diff --git a/.all-contributorsrc b/.all-contributorsrc index 146f6178ce..5dbb6fb2aa 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -3018,6 +3018,87 @@ "contributions": [ "code" ] + }, + { + "login": "koiakoia", + "name": "koiakoia", + "avatar_url": "https://avatars.githubusercontent.com/u/60405354?v=4", + "profile": "https://github.com/koiakoia", + "contributions": [ + "code" + ] + }, + { + "login": "mustafa-online", + "name": "Mustafa Online", + "avatar_url": "https://avatars.githubusercontent.com/u/5323832?v=4", + "profile": "https://github.com/mustafa-online", + "contributions": [ + "code" + ] + }, + { + "login": "franceslui", + "name": "franceslui", + "avatar_url": "https://avatars.githubusercontent.com/u/104601439?v=4", + "profile": "https://github.com/franceslui", + "contributions": [ + "code" + ] + }, + { + "login": "Q4kK", + "name": "Q4kK", + "avatar_url": "https://avatars.githubusercontent.com/u/125313163?v=4", + "profile": "https://github.com/Q4kK", + "contributions": [ + "code" + ] + }, + { + "login": "squintfox", + "name": "squintfox", + "avatar_url": "https://avatars.githubusercontent.com/u/55590532?v=4", + "profile": "https://github.com/squintfox", + "contributions": [ + "code" + ] + }, + { + "login": "jeffclay", + "name": "Jeff Clay", + "avatar_url": "https://avatars.githubusercontent.com/u/1380084?v=4", + "profile": "https://github.com/jeffclay", + "contributions": [ + "code" + ] + }, + { + "login": "PP-JN-RL", + "name": "Phil J R", + "avatar_url": "https://avatars.githubusercontent.com/u/52716446?v=4", + "profile": "https://github.com/PP-JN-RL", + "contributions": [ + "code" + ] + }, + { + "login": "chandanchowdhury", + "name": "i_virus", + "avatar_url": "https://avatars.githubusercontent.com/u/1496725?v=4", + "profile": "https://www.corelight.com/", + "contributions": [ + "code" + ] + }, + { + "login": "gitgrimbo", + "name": "Paul Grime", + "avatar_url": "https://avatars.githubusercontent.com/u/1020541?v=4", + "profile": "https://github.com/gitgrimbo", + "contributions": [ + "code" + ] } ] } diff --git a/.env.docker b/.env.docker index 87897b10db..7b9e2000cf 100644 --- a/.env.docker +++ b/.env.docker @@ -45,6 +45,7 @@ DB_SSL_KEY_PATH=null DB_SSL_CERT_PATH=null DB_SSL_CA_PATH=null DB_SSL_CIPHER=null +DB_SSL_VERIFY_SERVER=null # -------------------------------------------- # REQUIRED: OUTGOING MAIL SERVER SETTINGS diff --git a/.env.dusk.example b/.env.dusk.example index 074f6fc3d7..3a9765dc19 100644 --- a/.env.dusk.example +++ b/.env.dusk.example @@ -36,6 +36,7 @@ DB_SSL_KEY_PATH=null DB_SSL_CERT_PATH=null DB_SSL_CA_PATH=null DB_SSL_CIPHER=null +DB_SSL_VERIFY_SERVER=null # -------------------------------------------- # REQUIRED: OUTGOING MAIL SERVER SETTINGS diff --git a/.env.example b/.env.example index f8e1df2987..8f3e5a2d69 100644 --- a/.env.example +++ b/.env.example @@ -42,6 +42,7 @@ DB_SSL_KEY_PATH=null DB_SSL_CERT_PATH=null DB_SSL_CA_PATH=null DB_SSL_CIPHER=null +DB_SSL_VERIFY_SERVER=null # -------------------------------------------- # REQUIRED: OUTGOING MAIL SERVER SETTINGS @@ -86,6 +87,7 @@ COOKIE_DOMAIN=null SECURE_COOKIES=false API_TOKEN_EXPIRATION_YEARS=15 BS_TABLE_STORAGE=cookieStorage +BS_TABLE_DEEPLINK=true # -------------------------------------------- # OPTIONAL: SECURITY HEADER SETTINGS diff --git a/.github/workflows/codacy-analysis.yml b/.github/workflows/codacy-analysis.yml index d7438a7ae9..f8368dff83 100644 --- a/.github/workflows/codacy-analysis.yml +++ b/.github/workflows/codacy-analysis.yml @@ -36,7 +36,7 @@ jobs: # Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis - name: Run Codacy Analysis CLI - uses: codacy/codacy-analysis-cli-action@v4.4.0 + uses: codacy/codacy-analysis-cli-action@v4.4.1 with: # Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository # You can also omit the token and run the tools that support default configurations diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index afaad9a7a6..4278c082a1 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -432,6 +432,17 @@ Thanks goes to all of these wonderful people ([emoji key](https://github.com/ken bilias
bilias

💻 coach1988
coach1988

💻 MrM
MrM

💻 + koiakoia
koiakoia

💻 + Mustafa Online
Mustafa Online

💻 + franceslui
franceslui

💻 + Q4kK
Q4kK

💻 + + + squintfox
squintfox

💻 + Jeff Clay
Jeff Clay

💻 + Phil J R
Phil J R

💻 + i_virus
i_virus

💻 + Paul Grime
Paul Grime

💻 diff --git a/README.md b/README.md index d237a6856c..5c8e80944c 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,8 @@ It is built on [Laravel 8](http://laravel.com). Snipe-IT is actively developed and we [release quite frequently](https://github.com/snipe/snipe-it/releases). ([Check out the live demo here](https://snipeitapp.com/demo/).) -__This is web-based software__. This means there is no executable file (aka no .exe files), and it must be run on a web server and accessed through a web browser. It runs on any Mac OSX, flavor of Linux, as well as Windows, and we have a [Docker image](https://snipe-it.readme.io/docs/docker) available if that's what you're into. +> [!TIP] +> __This is web-based software__. This means there is no executable file (aka no .exe files), and it must be run on a web server and accessed through a web browser. It runs on any Mac OSX, any flavor of Linux, as well as Windows, and we have a [Docker image](https://snipe-it.readme.io/docs/docker) available if that's what you're into. ----- @@ -21,7 +22,7 @@ For instructions on installing and configuring Snipe-IT on your server, check ou If you're having trouble with the installation, please check the [Common Issues](https://snipe-it.readme.io/docs/common-issues) and [Getting Help](https://snipe-it.readme.io/docs/getting-help) documentation, and search this repository's open *and* closed issues for help. -[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy) + ----- ### User's Manual @@ -32,8 +33,9 @@ For help using Snipe-IT, check out the [user's manual](https://snipe-it.readme.i Feel free to check out the [GitHub Issues for this project](https://github.com/snipe/snipe-it/issues) to open a bug report or see what open issues you can help with. Please search through existing issues (open *and* closed) to see if your question has already been answered before opening a new issue. -**PLEASE see the [Getting Help Guidelines](https://snipe-it.readme.io/docs/getting-help) and [Common Issues](https://snipe-it.readme.io/docs/common-issues) before opening a ticket, and be sure to complete all of the questions in the Github Issue template to help us to help you as quickly as possible.** - +> [!IMPORTANT] +> **PLEASE see the [Getting Help Guidelines](https://snipe-it.readme.io/docs/getting-help) and [Common Issues](https://snipe-it.readme.io/docs/common-issues) before opening a ticket, and be sure to complete all of the questions in the Github Issue template to help us to help you as quickly as possible.** +> ----- ### Upgrading @@ -57,6 +59,9 @@ Please see the [translations documentation](https://snipe-it.readme.io/docs/tran Since the release of the JSON REST API, several third-party developers have been developing modules and libraries to work with Snipe-IT. +> [!NOTE] +> As these were created by third-parties, Snipe-IT cannot provide support for these project, and you should contact the developers directly if you need assistance. Additionally, Snipe-IT makes no guarantees as to the reliability, accuracy or maintainability of these libraries. Use at your own risk. :) + - [Python Module](https://github.com/jbloomer/SnipeIT-PythonAPI) by [@jbloomer](https://github.com/jbloomer) - [SnipeSharp - .NET module in C#](https://github.com/barrycarey/SnipeSharp) by [@barrycarey](https://github.com/barrycarey) - [InQRy -unmaintained-](https://github.com/Microsoft/InQRy) by [@Microsoft](https://github.com/Microsoft) @@ -73,8 +78,6 @@ Since the release of the JSON REST API, several third-party developers have been - [UniFi to Snipe-IT](https://github.com/RodneyLeeBrands/UnifiSnipeSync) by [@karpadiem](https://github.com/karpadiem) - Python script that synchronizes UniFi devices with Snipe-IT. - [Kandji2Snipe](https://github.com/grokability/kandji2snipe) by [@briangoldstein](https://github.com/briangoldstein) - Python script that synchronizes Kandji with Snipe-IT. - [SnipeAgent](https://github.com/ReticentRobot/SnipeAgent) by @ReticentRobot - Windows agent for Snipe-IT - -As these were created by third-parties, Snipe-IT cannot provide support for these project, and you should contact the developers directly if you need assistance. Additionally, Snipe-IT makes no guarantees as to the reliability, accuracy or maintainability of these libraries. Use at your own risk. :) ----- @@ -92,4 +95,5 @@ The ERD is available [online here](https://drawsql.app/templates/snipe-it). ### Security -To report a security vulnerability, please email security@snipeitapp.com instead of using the issue tracker. +> [!IMPORTANT] +> **To report a security vulnerability, please email security@snipeitapp.com instead of using the issue tracker.** diff --git a/app/Console/Commands/LdapSync.php b/app/Console/Commands/LdapSync.php index 05f60ee4e1..bd91c2bf25 100755 --- a/app/Console/Commands/LdapSync.php +++ b/app/Console/Commands/LdapSync.php @@ -390,7 +390,7 @@ class LdapSync extends Command $user->location_id = $location->id; } } - + $location = null; $user->ldap_import = 1; $errors = ''; diff --git a/app/Console/Commands/SendExpectedCheckinAlerts.php b/app/Console/Commands/SendExpectedCheckinAlerts.php index 34e9609ce5..e042e8b088 100644 --- a/app/Console/Commands/SendExpectedCheckinAlerts.php +++ b/app/Console/Commands/SendExpectedCheckinAlerts.php @@ -9,7 +9,6 @@ use App\Notifications\ExpectedCheckinAdminNotification; use App\Notifications\ExpectedCheckinNotification; use Carbon\Carbon; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Log; class SendExpectedCheckinAlerts extends Command { @@ -43,25 +42,31 @@ class SendExpectedCheckinAlerts extends Command public function handle() { $settings = Setting::getSettings(); - $whenNotify = Carbon::now(); - $assets = Asset::with('assignedTo')->whereNotNull('assigned_to')->whereNotNull('expected_checkin')->where('expected_checkin', '<=', $whenNotify)->get(); + $interval = $settings->audit_warning_days ?? 0; + $today = Carbon::now(); + $interval_date = $today->copy()->addDays($interval); + + $assets = Asset::whereNull('deleted_at')->DueOrOverdueForCheckin($settings)->orderBy('assets.expected_checkin', 'desc')->get(); + + $this->info($assets->count().' assets must be checked in on or before '.$interval_date.' is deadline'); - $this->info($whenNotify.' is deadline'); - $this->info($assets->count().' assets'); foreach ($assets as $asset) { - if ($asset->assigned && $asset->checkedOutToUser()) { - Log::info('Sending ExpectedCheckinNotification to ' . $asset->assigned->email); - $asset->assigned->notify((new ExpectedCheckinNotification($asset))); + if ($asset->assignedTo && (isset($asset->assignedTo->email)) && ($asset->assignedTo->email!='') && $asset->checkedOutToUser()) { + $this->info('Sending User ExpectedCheckinNotification to: '.$asset->assignedTo->email); + $asset->assignedTo->notify((new ExpectedCheckinNotification($asset))); } } if (($assets) && ($assets->count() > 0) && ($settings->alert_email != '')) { // Send a rollup to the admin, if settings dictate - $recipients = collect(explode(',', $settings->alert_email))->map(function ($item, $key) { + $recipients = collect(explode(',', $settings->alert_email))->map(function ($item) { return new AlertRecipient($item); }); + + $this->info('Sending Admin ExpectedCheckinNotification to: '.$settings->alert_email); \Notification::send($recipients, new ExpectedCheckinAdminNotification($assets)); + } } } diff --git a/app/Console/Commands/SendUpcomingAuditReport.php b/app/Console/Commands/SendUpcomingAuditReport.php index e9cba106c6..40ebb64c50 100644 --- a/app/Console/Commands/SendUpcomingAuditReport.php +++ b/app/Console/Commands/SendUpcomingAuditReport.php @@ -3,10 +3,8 @@ namespace App\Console\Commands; use App\Models\Asset; -use App\Models\License; -use App\Models\Recipients; +use App\Models\Recipients\AlertRecipient; use App\Models\Setting; -use App\Notifications\ExpiringAssetsNotification; use App\Notifications\SendUpcomingAuditNotification; use Carbon\Carbon; use DB; @@ -46,39 +44,24 @@ class SendUpcomingAuditReport extends Command public function handle() { $settings = Setting::getSettings(); + $interval = $settings->audit_warning_days ?? 0; + $today = Carbon::now(); + $interval_date = $today->copy()->addDays($interval); - if (($settings->alert_email != '') && ($settings->audit_warning_days) && ($settings->alerts_enabled == 1)) { + $assets = Asset::whereNull('deleted_at')->DueOrOverdueForAudit($settings)->orderBy('assets.next_audit_date', 'desc')->get(); + $this->info($assets->count().' assets must be audited in on or before '.$interval_date.' is deadline'); + + if (($assets) && ($assets->count() > 0) && ($settings->alert_email != '')) { // Send a rollup to the admin, if settings dictate - $recipients = collect(explode(',', $settings->alert_email))->map(function ($item, $key) { - return new \App\Models\Recipients\AlertRecipient($item); + $recipients = collect(explode(',', $settings->alert_email))->map(function ($item) { + return new AlertRecipient($item); }); - // Assets due for auditing + $this->info('Sending Admin SendUpcomingAuditNotification to: '.$settings->alert_email); + \Notification::send($recipients, new SendUpcomingAuditNotification($assets, $settings->audit_warning_days)); - $assets = Asset::whereNotNull('next_audit_date') - ->DueOrOverdueForAudit($settings) - ->orderBy('last_audit_date', 'asc')->get(); - - if ($assets->count() > 0) { - $this->info(trans_choice('mail.upcoming-audits', $assets->count(), - ['count' => $assets->count(), 'threshold' => $settings->audit_warning_days])); - \Notification::send($recipients, new SendUpcomingAuditNotification($assets, $settings->audit_warning_days)); - $this->info('Audit report sent to '.$settings->alert_email); - } else { - $this->info('No assets to be audited. No report sent.'); - } - } elseif ($settings->alert_email == '') { - $this->error('Could not send email. No alert email configured in settings'); - } elseif (! $settings->audit_warning_days) { - $this->error('No audit warning days set in Admin Notifications. No mail will be sent.'); - } elseif ($settings->alerts_enabled != 1) { - $this->info('Alerts are disabled in the settings. No mail will be sent'); - } else { - $this->error('Something went wrong. :( '); - $this->error('Admin Notifications Email Setting: '.$settings->alert_email); - $this->error('Admin Audit Warning Setting: '.$settings->audit_warning_days); - $this->error('Admin Alerts Emnabled: '.$settings->alerts_enabled); } + } } diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index b26887b6ce..b234e9cbf1 100644 --- a/app/Http/Controllers/Api/AssetsController.php +++ b/app/Http/Controllers/Api/AssetsController.php @@ -59,7 +59,7 @@ class AssetsController extends Controller * @since [v4.0] * @return \Illuminate\Http\JsonResponse */ - public function index(Request $request, $audit = null) + public function index(Request $request, $action = null, $upcoming_status = null) { $filter_non_deprecable_assets = false; @@ -94,6 +94,7 @@ class AssetsController extends Controller 'serial', 'model_number', 'last_checkout', + 'last_checkin', 'notes', 'expected_checkin', 'order_number', @@ -154,17 +155,44 @@ class AssetsController extends Controller $assets->TextSearch($request->input('search')); } - // This is used by the audit reporting routes - if (Gate::allows('audit', Asset::class)) { - switch ($audit) { - case 'due': - $assets->DueOrOverdueForAudit($settings); - break; - case 'overdue': - $assets->overdueForAudit($settings); - break; + + /** + * Handle due and overdue audits and checkin dates + */ + switch ($action) { + case 'audits': + + switch ($upcoming_status) { + case 'due': + $assets->DueForAudit($settings); + break; + case 'overdue': + $assets->OverdueForAudit(); + break; + case 'due-or-overdue': + $assets->DueOrOverdueForAudit($settings); + break; + } + break; + + case 'checkins': + switch ($upcoming_status) { + case 'due': + $assets->DueForCheckin($settings); + break; + case 'overdue': + $assets->OverdueForCheckin(); + break; + case 'due-or-overdue': + $assets->DueOrOverdueForCheckin($settings); + break; + } + break; } - } + + /** + * End handling due and overdue audits and checkin dates + */ // This is used by the sidenav, mostly @@ -591,6 +619,11 @@ class AssetsController extends Controller } } } + if ($field->element == 'checkbox') { + if(is_array($field_val)) { + $field_val = implode(',', $field_val); + } + } $asset->{$field->db_column} = $field_val; @@ -614,6 +647,8 @@ class AssetsController extends Controller } return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.create.success'))); + + return response()->json(Helper::formatStandardApiResponse('success', (new AssetsTransformer)->transformAsset($asset), trans('admin/hardware/message.create.success'))); } return response()->json(Helper::formatStandardApiResponse('error', null, $asset->getErrors()), 200); @@ -657,16 +692,26 @@ class AssetsController extends Controller $model = AssetModel::find($asset->model_id); // Update custom fields + $problems_updating_encrypted_custom_fields = false; if (($model) && (isset($model->fieldset))) { foreach ($model->fieldset->fields as $field) { + $field_val = $request->input($field->db_column, null); + if ($request->has($field->db_column)) { + if ($field->element == 'checkbox') { + if(is_array($field_val)) { + $field_val = implode(',', $field_val); + } + } if ($field->field_encrypted == '1') { if (Gate::allows('admin')) { - $asset->{$field->db_column} = \Crypt::encrypt($request->input($field->db_column)); + $field_val = Crypt::encrypt($field_val); + } else { + $problems_updating_encrypted_custom_fields = true; + continue; } - } else { - $asset->{$field->db_column} = $request->input($field->db_column); } + $asset->{$field->db_column} = $field_val; } } } @@ -692,7 +737,11 @@ class AssetsController extends Controller $asset->image = $asset->getImageUrl(); } - return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.update.success'))); + if ($problems_updating_encrypted_custom_fields) { + return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.update.encrypted_warning'))); + } else { + return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.update.success'))); + } } return response()->json(Helper::formatStandardApiResponse('error', null, $asset->getErrors()), 200); diff --git a/app/Http/Controllers/Api/ReportsController.php b/app/Http/Controllers/Api/ReportsController.php index a91d8a9bcc..fbeb78fc8f 100644 --- a/app/Http/Controllers/Api/ReportsController.php +++ b/app/Http/Controllers/Api/ReportsController.php @@ -32,19 +32,26 @@ class ReportsController extends Controller } if (($request->filled('item_type')) && ($request->filled('item_id'))) { - $actionlogs = $actionlogs->where('item_id', '=', $request->input('item_id')) + $actionlogs = $actionlogs->where(function($query) use ($request) + { + $query->where('item_id', '=', $request->input('item_id')) ->where('item_type', '=', 'App\\Models\\'.ucwords($request->input('item_type'))) ->orWhere(function($query) use ($request) { $query->where('target_id', '=', $request->input('item_id')) ->where('target_type', '=', 'App\\Models\\'.ucwords($request->input('item_type'))); }); + }); } if ($request->filled('action_type')) { $actionlogs = $actionlogs->where('action_type', '=', $request->input('action_type'))->orderBy('created_at', 'desc'); } + if ($request->filled('user_id')) { + $actionlogs = $actionlogs->where('user_id', '=', $request->input('user_id')); + } + if ($request->filled('action_source')) { $actionlogs = $actionlogs->where('action_source', '=', $request->input('action_source'))->orderBy('created_at', 'desc'); } diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index e9551d51a8..0faa541243 100644 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -75,8 +75,8 @@ class UsersController extends Controller 'users.autoassign_licenses', 'users.website', - ])->with('manager', 'groups', 'userloc', 'company', 'department', 'assets', 'licenses', 'accessories', 'consumables', 'createdBy',) - ->withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count'); + ])->with('manager', 'groups', 'userloc', 'company', 'department', 'assets', 'licenses', 'accessories', 'consumables', 'createdBy') + ->withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count', 'managesUsers as manages_users_count', 'managedLocations as manages_locations_count'); if ($request->filled('activated')) { @@ -187,6 +187,14 @@ class UsersController extends Controller $users->has('accessories', '=', $request->input('accessories_count')); } + if ($request->filled('manages_users_count')) { + $users->has('manages_users_count', '=', $request->input('manages_users_count')); + } + + if ($request->filled('manages_locations_count')) { + $users->has('manages_locations_count', '=', $request->input('manages_locations_count')); + } + if ($request->filled('autoassign_licenses')) { $users->where('autoassign_licenses', '=', $request->input('autoassign_licenses')); } @@ -244,6 +252,8 @@ class UsersController extends Controller 'licenses_count', 'consumables_count', 'accessories_count', + 'manages_user_count', + 'manages_locations_count', 'phone', 'address', 'city', @@ -273,6 +283,7 @@ class UsersController extends Controller $users = $users->withTrashed(); } + // Apply companyable scope $users = Company::scopeCompanyables($users); @@ -403,9 +414,16 @@ class UsersController extends Controller public function show($id) { $this->authorize('view', User::class); - $user = User::withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count')->findOrFail($id); - return (new UsersTransformer)->transformUser($user); + $user = User::withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count', 'managesUsers as manages_users_count', 'managedLocations as manages_locations_count'); + + if ($user = Company::scopeCompanyables($user)->find($id)) { + $this->authorize('view', $user); + return (new UsersTransformer)->transformUser($user); + } + + return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.user_not_found', compact('id')))); + } @@ -423,6 +441,8 @@ class UsersController extends Controller $this->authorize('update', User::class); $user = User::findOrFail($id); + $user = Company::scopeCompanyables($user)->find($id); + $this->authorize('update', $user); /** * This is a janky hack to prevent people from changing admin demo user data on the public demo. @@ -459,11 +479,11 @@ class UsersController extends Controller if (! Auth::user()->isSuperUser()) { unset($permissions_array['superuser']); } + $user->permissions = $permissions_array; } - // Update the location of any assets checked out to this user Asset::where('assigned_type', User::class) ->where('assigned_to', $user->id)->update(['location_id' => $request->input('location_id', null)]); @@ -473,14 +493,9 @@ class UsersController extends Controller if ($user->save()) { - // Sync group memberships: - // This was changed in Snipe-IT v4.6.x to 4.7, since we upgraded to Laravel 5.5 - // which changes the behavior of has vs filled. - // The $request->has method will now return true even if the input value is an empty string or null. - // A new $request->filled method has was added that provides the previous behavior of the has method. - // Check if the request has groups passed and has a value if ($request->filled('groups')) { + $validator = Validator::make($request->all(), [ 'groups.*' => 'integer|exists:permission_groups,id', ]); @@ -488,10 +503,19 @@ class UsersController extends Controller if ($validator->fails()){ return response()->json(Helper::formatStandardApiResponse('error', null, $user->getErrors())); } - $user->groups()->sync($request->input('groups')); + + // Only save groups if the user is a superuser + if (Auth::user()->isSuperUser()) { + $user->groups()->sync($request->input('groups')); + } + // The groups field has been passed but it is null, so we should blank it out } elseif ($request->has('groups')) { - $user->groups()->sync([]); + + // Only save groups if the user is a superuser + if (Auth::user()->isSuperUser()) { + $user->groups()->sync($request->input('groups')); + } } @@ -512,37 +536,43 @@ class UsersController extends Controller public function destroy($id) { $this->authorize('delete', User::class); - $user = User::findOrFail($id); + $user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed(); + $user = Company::scopeCompanyables($user)->find($id); $this->authorize('delete', $user); - if (($user->assets) && ($user->assets->count() > 0)) { - return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.error.delete_has_assets'))); - } + if ($user) { - if (($user->licenses) && ($user->licenses->count() > 0)) { - return response()->json(Helper::formatStandardApiResponse('error', null, 'This user still has '.$user->licenses->count().' license(s) associated with them and cannot be deleted.')); - } - - if (($user->accessories) && ($user->accessories->count() > 0)) { - return response()->json(Helper::formatStandardApiResponse('error', null, 'This user still has '.$user->accessories->count().' accessories associated with them.')); - } - - if (($user->managedLocations()) && ($user->managedLocations()->count() > 0)) { - return response()->json(Helper::formatStandardApiResponse('error', null, 'This user still has '.$user->managedLocations()->count().' locations that they manage.')); - } - - if ($user->delete()) { - - // Remove the user's avatar if they have one - if (Storage::disk('public')->exists('avatars/'.$user->avatar)) { - try { - Storage::disk('public')->delete('avatars/'.$user->avatar); - } catch (\Exception $e) { - \Log::debug($e); - } + $this->authorize('delete', $user); + + if (($user->assets) && ($user->assets->count() > 0)) { + return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.error.delete_has_assets'))); } - return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/users/message.success.delete'))); + if (($user->licenses) && ($user->licenses->count() > 0)) { + return response()->json(Helper::formatStandardApiResponse('error', null, 'This user still has ' . $user->licenses->count() . ' license(s) associated with them and cannot be deleted.')); + } + + if (($user->accessories) && ($user->accessories->count() > 0)) { + return response()->json(Helper::formatStandardApiResponse('error', null, 'This user still has ' . $user->accessories->count() . ' accessories associated with them.')); + } + + if (($user->managedLocations()) && ($user->managedLocations()->count() > 0)) { + return response()->json(Helper::formatStandardApiResponse('error', null, 'This user still has ' . $user->managedLocations()->count() . ' locations that they manage.')); + } + + if ($user->delete()) { + + // Remove the user's avatar if they have one + if (Storage::disk('public')->exists('avatars/' . $user->avatar)) { + try { + Storage::disk('public')->delete('avatars/' . $user->avatar); + } catch (\Exception $e) { + \Log::debug($e); + } + } + + return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/users/message.success.delete'))); + } } return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.error.delete'))); @@ -560,7 +590,31 @@ class UsersController extends Controller { $this->authorize('view', User::class); $this->authorize('view', Asset::class); - $assets = Asset::where('assigned_to', '=', $id)->where('assigned_type', '=', User::class)->with('model')->get(); + + $user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed(); + $user = Company::scopeCompanyables($user)->find($id); + $this->authorize('view', $user); + + $assets = Asset::where('assigned_to', '=', $id)->where('assigned_type', '=', User::class)->with('model'); + + + // Filter on category ID + if ($request->filled('category_id')) { + $assets = $assets->InCategory($request->input('category_id')); + } + + + // Filter on model ID + if ($request->filled('model_id')) { + + $model_ids = $request->input('model_id'); + if (!is_array($model_ids)) { + $model_ids = array($model_ids); + } + $assets = $assets->InModelList($model_ids); + } + + $assets = $assets->get(); return (new AssetsTransformer)->transformAssets($assets, $assets->count(), $request); } @@ -576,7 +630,10 @@ class UsersController extends Controller */ public function emailAssetList(Request $request, $id) { + $this->authorize('update', User::class); $user = User::findOrFail($id); + $user = Company::scopeCompanyables($user)->find($id); + $this->authorize('update', $user); if (empty($user->email)) { return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.inventorynotification.error'))); @@ -600,6 +657,7 @@ class UsersController extends Controller $this->authorize('view', User::class); $this->authorize('view', Consumable::class); $user = User::findOrFail($id); + $this->authorize('update', $user); $consumables = $user->consumables; return (new ConsumablesTransformer)->transformConsumables($consumables, $consumables->count(), $request); } @@ -616,6 +674,7 @@ class UsersController extends Controller { $this->authorize('view', User::class); $user = User::findOrFail($id); + $this->authorize('view', $user); $this->authorize('view', Accessory::class); $accessories = $user->accessories; @@ -636,6 +695,7 @@ class UsersController extends Controller $this->authorize('view', License::class); if ($user = User::where('id', $id)->withTrashed()->first()) { + $this->authorize('update', $user); $licenses = $user->licenses()->get(); return (new LicensesTransformer())->transformLicenses($licenses, $licenses->count()); } @@ -659,6 +719,7 @@ class UsersController extends Controller if ($request->filled('id')) { try { $user = User::find($request->get('id')); + $this->authorize('update', $user); $user->two_factor_secret = null; $user->two_factor_enrolled = 0; $user->saveQuietly(); diff --git a/app/Http/Controllers/AssetModelsController.php b/app/Http/Controllers/AssetModelsController.php index 484a2e2f85..8d387f968f 100755 --- a/app/Http/Controllers/AssetModelsController.php +++ b/app/Http/Controllers/AssetModelsController.php @@ -7,6 +7,7 @@ use App\Http\Requests\ImageUploadRequest; use App\Models\Actionlog; use App\Models\Asset; use App\Models\AssetModel; +use App\Models\CustomField; use App\Models\User; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; @@ -486,11 +487,11 @@ class AssetModelsController extends Controller * @param array $defaultValues * @return void */ - private function assignCustomFieldsDefaultValues(AssetModel $model, array $defaultValues) + private function assignCustomFieldsDefaultValues(AssetModel $model, array $defaultValues): bool { $data = array(); foreach ($defaultValues as $customFieldId => $defaultValue) { - $customField = \App\Models\CustomField::find($customFieldId); + $customField = CustomField::find($customFieldId); $data[$customField->db_column] = $defaultValue; } diff --git a/app/Http/Controllers/AssetModelsFilesController.php b/app/Http/Controllers/AssetModelsFilesController.php index a5419b428d..a4472c3504 100644 --- a/app/Http/Controllers/AssetModelsFilesController.php +++ b/app/Http/Controllers/AssetModelsFilesController.php @@ -38,7 +38,7 @@ class AssetModelsFilesController extends Controller $file_name = $request->handleFile('private_uploads/assetmodels/','model-'.$model->id,$file); - $model->logUpload($file_name, e($request->get('notes'))); + $model->logUpload($file_name, $request->get('notes')); } return redirect()->back()->with('success', trans('general.file_upload_success')); diff --git a/app/Http/Controllers/Assets/AssetCheckinController.php b/app/Http/Controllers/Assets/AssetCheckinController.php index 82cb98abe9..30ffd8bba2 100644 --- a/app/Http/Controllers/Assets/AssetCheckinController.php +++ b/app/Http/Controllers/Assets/AssetCheckinController.php @@ -39,6 +39,12 @@ class AssetCheckinController extends Controller $this->authorize('checkin', $asset); + // This asset is already checked in, redirect + + if (is_null($asset->assignedTo)) { + return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkin.already_checked_in')); + } + return view('hardware/checkin', compact('asset'))->with('statusLabel_list', Helper::statusLabelList())->with('backto', $backto); } diff --git a/app/Http/Controllers/Assets/AssetFilesController.php b/app/Http/Controllers/Assets/AssetFilesController.php index 7f4258bda2..7debfb479c 100644 --- a/app/Http/Controllers/Assets/AssetFilesController.php +++ b/app/Http/Controllers/Assets/AssetFilesController.php @@ -38,7 +38,7 @@ class AssetFilesController extends Controller foreach ($request->file('file') as $file) { $file_name = $request->handleFile('private_uploads/assets/','hardware-'.$asset->id, $file); - $asset->logUpload($file_name, e($request->get('notes'))); + $asset->logUpload($file_name, $request->get('notes')); } return redirect()->back()->with('success', trans('admin/hardware/message.upload.success')); diff --git a/app/Http/Controllers/Assets/AssetsController.php b/app/Http/Controllers/Assets/AssetsController.php index 6054718e6b..ac755fd389 100755 --- a/app/Http/Controllers/Assets/AssetsController.php +++ b/app/Http/Controllers/Assets/AssetsController.php @@ -854,11 +854,11 @@ class AssetsController extends Controller return view('hardware/audit-due'); } - public function overdueForAudit() + public function dueForCheckin() { - $this->authorize('audit', Asset::class); + $this->authorize('checkin', Asset::class); - return view('hardware/audit-overdue'); + return view('hardware/checkin-due'); } diff --git a/app/Http/Controllers/LabelsController.php b/app/Http/Controllers/LabelsController.php index 4fe04dc1c5..1c5715b35f 100755 --- a/app/Http/Controllers/LabelsController.php +++ b/app/Http/Controllers/LabelsController.php @@ -14,6 +14,7 @@ use App\Models\Setting; use App\Models\Supplier; use App\Models\User; use App\View\Label as LabelView; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; class LabelsController extends Controller @@ -21,9 +22,9 @@ class LabelsController extends Controller /** * Returns the Label view with test data * - * @author Grant Le Roux - * @param string $labelName + * @param string $labelName * @return \Illuminate\Contracts\View\View + * @author Grant Le Roux */ public function show(string $labelName) { @@ -66,16 +67,18 @@ class LabelsController extends Controller $exampleAsset->model->category->id = 999999; $exampleAsset->model->category->name = trans('admin/labels/table.example_category'); - $customFieldColumns = CustomField::all()->pluck('db_column'); + $customFieldColumns = CustomField::where('field_encrypted', '=', 0)->pluck('db_column'); collect(explode(';', Setting::getSettings()->label2_fields)) ->filter() ->each(function ($item) use ($customFieldColumns, $exampleAsset) { - $pair = explode('=', $item); - - if ($customFieldColumns->contains($pair[1])) { - $exampleAsset->{$pair[1]} = "{{$pair[0]}}"; - } + $pair = explode('=', $item); + + if (array_key_exists(1, $pair)) { + if ($customFieldColumns->contains($pair[1])) { + $exampleAsset->{$pair[1]} = "{{$pair[0]}}"; + } + } }); $settings = Setting::getSettings(); diff --git a/app/Http/Controllers/Licenses/LicensesController.php b/app/Http/Controllers/Licenses/LicensesController.php index c55181c518..268c3f8b66 100755 --- a/app/Http/Controllers/Licenses/LicensesController.php +++ b/app/Http/Controllers/Licenses/LicensesController.php @@ -11,6 +11,7 @@ use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; +use Symfony\Component\HttpFoundation\StreamedResponse; /** * This controller handles all actions related to Licenses for @@ -289,4 +290,106 @@ class LicensesController extends Controller ->with('item', $license) ->with('maintained_list', $maintained_list); } + + /** + * Exports Licenses to CSV + * + * @author [G. Martinez] + * @since [v6.3] + * @return StreamedResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function getExportLicensesCsv() + { + $this->authorize('view', License::class); + \Debugbar::disable(); + + $response = new StreamedResponse(function () { + // Open output stream + $handle = fopen('php://output', 'w'); + $licenses= License::with('company', + 'manufacturer', + 'category', + 'supplier', + 'adminuser', + 'assignedusers') + ->orderBy('created_at', 'DESC'); + Company::scopeCompanyables($licenses) + ->chunk(500, function ($licenses) use ($handle) { + $headers = [ + // strtolower to prevent Excel from trying to open it as a SYLK file + strtolower(trans('general.id')), + trans('general.company'), + trans('general.name'), + trans('general.serial_number'), + trans('general.purchase_date'), + trans('general.purchase_cost'), + trans('general.order_number'), + trans('general.licenses_available'), + trans('admin/licenses/table.seats'), + trans('general.created_by'), + trans('general.depreciation'), + trans('general.updated_at'), + trans('admin/licenses/table.deleted_at'), + trans('general.email'), + trans('admin/hardware/form.fully_depreciated'), + trans('general.supplier'), + trans('admin/licenses/form.expiration'), + trans('admin/licenses/form.purchase_order'), + trans('admin/licenses/form.termination_date'), + trans('admin/licenses/form.maintained'), + trans('general.manufacturer'), + trans('general.category'), + trans('general.min_amt'), + trans('admin/licenses/form.reassignable'), + trans('general.notes'), + trans('general.created_at'), + ]; + + fputcsv($handle, $headers); + + foreach ($licenses as $license) { + // Add a new row with data + $values = [ + $license->id, + $license->company ? $license->company->name: '', + $license->name, + $license->serial, + $license->purchase_date, + $license->purchase_cost, + $license->order_number, + $license->free_seat_count, + $license->seats, + $license->adminuser->present()->fullName(), + $license->depreciation ? $license->depreciation->name: '', + $license->updated_at, + $license->deleted_at, + $license->email, + ( $license->depreciate == '1') ? trans('general.yes') : trans('general.no'), + ($license->supplier) ? $license->supplier->name: '', + $license->expiration_date, + $license->purchase_order, + $license->termination_date, + ( $license->maintained == '1') ? trans('general.yes') : trans('general.no'), + $license->manufacturer ? $license->manufacturer->name: '', + $license->category ? $license->category->name: '', + $license->min_amt, + ( $license->reassignable == '1') ? trans('general.yes') : trans('general.no'), + $license->notes, + $license->created_at, + ]; + + fputcsv($handle, $values); + } + }); + + // Close the output stream + fclose($handle); + }, 200, [ + 'Content-Type' => 'text/csv; charset=UTF-8', + 'Content-Disposition' => 'attachment; filename="licenses-'.date('Y-m-d-his').'.csv"', + ]); + + return $response; + } } diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php index 31cefa4436..c1ae800342 100644 --- a/app/Http/Controllers/ReportsController.php +++ b/app/Http/Controllers/ReportsController.php @@ -696,16 +696,17 @@ class ReportsController extends Controller ->whereBetween('action_date',[$checkout_start, $checkout_end]) ->pluck('item_id'); - $assets->whereIn('id',$actionlogassets); + $assets->whereIn('assets.id',$actionlogassets); } if (($request->filled('checkin_date_start'))) { - $assets->whereBetween('last_checkin', [ - Carbon::parse($request->input('checkin_date_start'))->startOfDay(), - // use today's date if `checkin_date_end` is not provided - Carbon::parse($request->input('checkin_date_end', now()))->endOfDay(), - ]); + $checkin_start = \Carbon::parse($request->input('checkin_date_start'))->startOfDay(); + // use today's date is `checkin_date_end` is not provided + $checkin_end = \Carbon::parse($request->input('checkin_date_end', now()))->endOfDay(); + + $assets->whereBetween('assets.last_checkin', [$checkin_start, $checkin_end ]); } + //last checkin is exporting, but currently is a date and not a datetime in the custom report ONLY. if (($request->filled('expected_checkin_start')) && ($request->filled('expected_checkin_end'))) { $assets->whereBetween('assets.expected_checkin', [$request->input('expected_checkin_start'), $request->input('expected_checkin_end')]); diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index b1cb620a83..3c09c900fa 100755 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -20,6 +20,7 @@ use DB; use enshrined\svgSanitize\Sanitizer; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; +use Illuminate\Validation\Rule; use Image; use Input; use Redirect; @@ -499,6 +500,19 @@ class SettingsController extends Controller */ public function postSecurity(Request $request) { + $this->validate($request, [ + 'pwd_secure_complexity' => 'array', + 'pwd_secure_complexity.*' => [ + Rule::in([ + 'disallow_same_pwd_as_user_fields', + 'letters', + 'numbers', + 'symbols', + 'case_diff', + ]) + ] + ]); + if (is_null($setting = Setting::getSettings())) { return redirect()->to('admin')->with('error', trans('admin/settings/message.update.error')); } @@ -790,10 +804,9 @@ class SettingsController extends Controller */ public function getLabels() { - return view('settings.labels', [ - 'setting' => Setting::getSettings(), - 'customFields' => CustomField::all(), - ]); + return view('settings.labels') + ->with('setting', Setting::getSettings()) + ->with('customFields', CustomField::where('field_encrypted', '=', 0)->get()); } /** diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php index 672e33f3d7..b0874cb569 100755 --- a/app/Http/Controllers/Users/UsersController.php +++ b/app/Http/Controllers/Users/UsersController.php @@ -182,8 +182,13 @@ class UsersController extends Controller */ public function edit($id) { - if ($user = User::find($id)) { - $this->authorize('update', $user); + + $this->authorize('update', User::class); + $user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed(); + $user = Company::scopeCompanyables($user)->find($id); + + if ($user) { + $permissions = config('permissions'); $groups = Group::pluck('name', 'id'); @@ -210,106 +215,116 @@ class UsersController extends Controller */ public function update(SaveUserRequest $request, $id = null) { - // We need to reverse the UI specific logic for our - // permissions here before we update the user. - $permissions = $request->input('permissions', []); - app('request')->request->set('permissions', $permissions); + $this->authorize('update', User::class); // This is a janky hack to prevent people from changing admin demo user data on the public demo. // The $ids 1 and 2 are special since they are seeded as superadmins in the demo seeder. // Thanks, jerks. You are why we can't have nice things. - snipe if ((($id == 1) || ($id == 2)) && (config('app.lock_passwords'))) { - return redirect()->route('users.index')->with('error', 'Permission denied. You cannot update user information for superadmins on the demo.'); + return redirect()->route('users.index')->with('error', trans('general.permission_denied_superuser_demo')); } - try { - $user = User::findOrFail($id); - } catch (ModelNotFoundException $e) { - return redirect()->route('users.index') - ->with('error', trans('admin/users/message.user_not_found', compact('id'))); - } - $this->authorize('update', $user); - // Figure out of this user was an admin before this edit - $orig_permissions_array = $user->decodePermissions(); - $orig_superuser = '0'; - if (is_array($orig_permissions_array)) { - if (array_key_exists('superuser', $orig_permissions_array)) { - $orig_superuser = $orig_permissions_array['superuser']; + // We need to reverse the UI specific logic for our + // permissions here before we update the user. + $permissions = $request->input('permissions', []); + app('request')->request->set('permissions', $permissions); + + + $user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed(); + $user = Company::scopeCompanyables($user)->find($id); + + // User is valid - continue... + if ($user) { + $this->authorize('update', $user); + + // Figure out of this user was an admin before this edit + $orig_permissions_array = $user->decodePermissions(); + $orig_superuser = '0'; + if (is_array($orig_permissions_array)) { + if (array_key_exists('superuser', $orig_permissions_array)) { + $orig_superuser = $orig_permissions_array['superuser']; + } } - } - // Only save groups if the user is a super user - if (Auth::user()->isSuperUser()) { - $user->groups()->sync($request->input('groups')); - } + // Only save groups if the user is a superuser + if (Auth::user()->isSuperUser()) { + $user->groups()->sync($request->input('groups')); + } - // Update the user - if ($request->filled('username')) { + // Update the user fields $user->username = trim($request->input('username')); - } - $user->email = trim($request->input('email')); - $user->first_name = $request->input('first_name'); - $user->last_name = $request->input('last_name'); - $user->two_factor_optin = $request->input('two_factor_optin') ?: 0; - $user->locale = $request->input('locale'); - $user->employee_num = $request->input('employee_num'); - $user->activated = $request->input('activated', 0); - $user->jobtitle = $request->input('jobtitle', null); - $user->phone = $request->input('phone'); - $user->location_id = $request->input('location_id', null); - $user->company_id = Company::getIdForUser($request->input('company_id', null)); - $user->manager_id = $request->input('manager_id', null); - $user->notes = $request->input('notes'); - $user->department_id = $request->input('department_id', null); - $user->address = $request->input('address', null); - $user->city = $request->input('city', null); - $user->state = $request->input('state', null); - $user->country = $request->input('country', null); - // if a user is editing themselves we should always keep activated true - $user->activated = $request->input('activated', $request->user()->is($user) ? 1 : 0); - $user->zip = $request->input('zip', null); - $user->remote = $request->input('remote', 0); - $user->vip = $request->input('vip', 0); - $user->website = $request->input('website', null); - $user->start_date = $request->input('start_date', null); - $user->end_date = $request->input('end_date', null); - $user->autoassign_licenses = $request->input('autoassign_licenses', 0); + $user->email = trim($request->input('email')); + $user->first_name = $request->input('first_name'); + $user->last_name = $request->input('last_name'); + $user->two_factor_optin = $request->input('two_factor_optin') ?: 0; + $user->locale = $request->input('locale'); + $user->employee_num = $request->input('employee_num'); + $user->activated = $request->input('activated', 0); + $user->jobtitle = $request->input('jobtitle', null); + $user->phone = $request->input('phone'); + $user->location_id = $request->input('location_id', null); + $user->company_id = Company::getIdForUser($request->input('company_id', null)); + $user->manager_id = $request->input('manager_id', null); + $user->notes = $request->input('notes'); + $user->department_id = $request->input('department_id', null); + $user->address = $request->input('address', null); + $user->city = $request->input('city', null); + $user->state = $request->input('state', null); + $user->country = $request->input('country', null); + // if a user is editing themselves we should always keep activated true + $user->activated = $request->input('activated', $request->user()->is($user) ? 1 : 0); + $user->zip = $request->input('zip', null); + $user->remote = $request->input('remote', 0); + $user->vip = $request->input('vip', 0); + $user->website = $request->input('website', null); + $user->start_date = $request->input('start_date', null); + $user->end_date = $request->input('end_date', null); + $user->autoassign_licenses = $request->input('autoassign_licenses', 0); + + // Update the location of any assets checked out to this user + Asset::where('assigned_type', User::class) + ->where('assigned_to', $user->id) + ->update(['location_id' => $request->input('location_id', null)]); + + // Do we want to update the user password? + if ($request->filled('password')) { + $user->password = bcrypt($request->input('password')); + } + // Update the location of any assets checked out to this user Asset::where('assigned_type', User::class) ->where('assigned_to', $user->id) ->update(['location_id' => $user->location_id]); - // Do we want to update the user password? - if ($request->filled('password')) { - $user->password = bcrypt($request->input('password')); + $permissions_array = $request->input('permission'); + + + // Strip out the superuser permission if the user isn't a superadmin + if (! Auth::user()->isSuperUser()) { + unset($permissions_array['superuser']); + $permissions_array['superuser'] = $orig_superuser; + } + + $user->permissions = json_encode($permissions_array); + + // Handle uploaded avatar + app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); + + if ($user->save()) { + // Redirect to the user page + return redirect()->route('users.index') + ->with('success', trans('admin/users/message.success.update')); + } + + return redirect()->back()->withInput()->withErrors($user->getErrors()); + + } - $permissions_array = $request->input('permission'); - - // Strip out the superuser permission if the user isn't a superadmin - if (! Auth::user()->isSuperUser()) { - unset($permissions_array['superuser']); - $permissions_array['superuser'] = $orig_superuser; - } - - $user->permissions = json_encode($permissions_array); - - // Handle uploaded avatar - app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); - - //\Log::debug(print_r($user, true)); - - // Was the user updated? - if ($user->save()) { - // Redirect to the user page - return redirect()->route('users.index') - ->with('success', trans('admin/users/message.success.update')); - } - - return redirect()->back()->withInput()->withErrors($user->getErrors()); + return redirect()->route('users.index')->with('error', trans('admin/users/message.user_not_found', compact('id'))); } /** @@ -323,12 +338,13 @@ class UsersController extends Controller */ public function destroy($id = null) { - try { - // Get user information - $user = User::findOrFail($id); - // Authorize takes care of many of our logic checks now. - $this->authorize('delete', User::class); + $this->authorize('delete', User::class); + $user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed(); + $user = Company::scopeCompanyables($user)->find($id); + + + if ($user) { // Check if we are not trying to delete ourselves if ($user->id === Auth::id()) { // Redirect to the user management page @@ -362,16 +378,12 @@ class UsersController extends Controller // Delete the user $user->delete(); - - // Prepare the success message - // Redirect to the user management page return redirect()->route('users.index')->with('success', trans('admin/users/message.success.delete')); - } catch (ModelNotFoundException $e) { - // Prepare the error message - // Redirect to the user management page - return redirect()->route('users.index') - ->with('error', trans('admin/users/message.user_not_found', compact('id'))); } + + return redirect()->route('users.index') + ->with('error', trans('admin/users/message.user_not_found', compact('id'))); + } /** @@ -427,59 +439,25 @@ class UsersController extends Controller */ public function show($userId = null) { - if (! $user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed()->find($userId)) { - // Redirect to the user management page - return redirect()->route('users.index') - ->with('error', trans('admin/users/message.user_not_found', ['id' => $userId])); - } + // Make sure the user can view users at all + $this->authorize('view', User::class); - $userlog = $user->userlog->load('item'); + $user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed(); + $user = Company::scopeCompanyables($user)->find($userId); + // Make sure they can view this particular user $this->authorize('view', $user); - return view('users/view', compact('user', 'userlog')) - ->with('settings', Setting::getSettings()); - } - - /** - * Unsuspend a user. - * - * @author [A. Gianotto] [] - * @since [v1.0] - * @param int $id - * @return Redirect - * @throws \Illuminate\Auth\Access\AuthorizationException - */ - public function getUnsuspend($id = null) - { - try { - // Get user information - $user = User::findOrFail($id); - $this->authorize('update', $user); - - // Check if we are not trying to unsuspend ourselves - if ($user->id === Auth::id()) { - // Prepare the error message - $error = trans('admin/users/message.error.unsuspend'); - // Redirect to the user management page - return redirect()->route('users.index')->with('error', $error); - } - - // Do we have permission to unsuspend this user? - if ($user->isSuperUser() && ! Auth::user()->isSuperUser()) { - // Redirect to the user management page - return redirect()->route('users.index')->with('error', 'Insufficient permissions!'); - } - - // Redirect to the user management page - return redirect()->route('users.index')->with('success', trans('admin/users/message.success.unsuspend')); - } catch (ModelNotFoundException $e) { - // Redirect to the user management page - return redirect()->route('users.index') - ->with('error', trans('admin/users/message.user_not_found', compact('id'))); + if ($user) { + $userlog = $user->userlog->load('item'); + return view('users/view', compact('user', 'userlog'))->with('settings', Setting::getSettings()); } + + return redirect()->route('users.index')->with('error', trans('admin/users/message.user_not_found', ['id' => $userId])); + } + /** * Return a view containing a pre-populated new user form, * populated with some fields from an existing user. @@ -493,22 +471,34 @@ class UsersController extends Controller public function getClone(Request $request, $id = null) { $this->authorize('create', User::class); + // We need to reverse the UI specific logic for our // permissions here before we update the user. $permissions = $request->input('permissions', []); app('request')->request->set('permissions', $permissions); - try { - // Get the user information - $user_to_clone = User::withTrashed()->find($id); + + $user_to_clone = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed(); + $user_to_clone = Company::scopeCompanyables($user_to_clone)->find($id); + + // Make sure they can view this particular user + $this->authorize('view', $user_to_clone); + + + if ($user_to_clone) { + + $user = clone $user_to_clone; + + // Blank out some fields $user->first_name = ''; $user->last_name = ''; $user->email = substr($user->email, ($pos = strpos($user->email, '@')) !== false ? $pos : 0); $user->id = null; - // Get this user groups + // Get this user's groups $userGroups = $user_to_clone->groups()->pluck('name', 'id'); + // Get all the available permissions $permissions = config('permissions'); $clonedPermissions = $user_to_clone->decodePermissions(); @@ -517,16 +507,14 @@ class UsersController extends Controller // Show the page return view('users/edit', compact('permissions', 'userPermissions')) - ->with('user', $user) - ->with('groups', Group::pluck('name', 'id')) - ->with('userGroups', $userGroups) - ->with('clone_user', $user_to_clone); - } catch (ModelNotFoundException $e) { - // Prepare the error message - // Redirect to the user management page - return redirect()->route('users.index') - ->with('error', trans('admin/users/message.user_not_found', compact('id'))); + ->with('user', $user) + ->with('groups', Group::pluck('name', 'id')) + ->with('userGroups', $userGroups) + ->with('clone_user', $user_to_clone); } + + return redirect()->route('users.index')->with('error', trans('admin/users/message.user_not_found', compact('id'))); + } /** @@ -546,8 +534,20 @@ class UsersController extends Controller // Open output stream $handle = fopen('php://output', 'w'); - User::with('assets', 'accessories', 'consumables', 'department', 'licenses', 'manager', 'groups', 'userloc', 'company') - ->orderBy('created_at', 'DESC') + $users = User::with( + 'assets', + 'accessories', + 'consumables', + 'department', + 'licenses', + 'manager', + 'groups', + 'userloc', + 'company' + )->orderBy('created_at', 'DESC'); + + // FMCS scoping + Company::scopeCompanyables($users) ->chunk(500, function ($users) use ($handle) { $headers = [ // strtolower to prevent Excel from trying to open it as a SYLK file @@ -565,7 +565,7 @@ class UsersController extends Controller trans('general.licenses'), trans('general.accessories'), trans('general.consumables'), - trans('admin/users/table.groups'), + trans('general.groups'), trans('general.notes'), trans('admin/users/table.activated'), trans('general.created_at'), @@ -626,7 +626,11 @@ class UsersController extends Controller public function printInventory($id) { $this->authorize('view', User::class); - $show_user = User::where('id', $id)->withTrashed()->first(); + $show_user = Company::scopeCompanyables(User::where('id', $id)->withTrashed()->first()); + + // Make sure they can view this particular user + $this->authorize('view', $show_user); + $assets = Asset::where('assigned_to', $id)->where('assigned_type', User::class)->with('model', 'model.category')->get(); $accessories = $show_user->accessories()->get(); $consumables = $show_user->consumables()->get(); @@ -651,16 +655,23 @@ class UsersController extends Controller { $this->authorize('view', User::class); - if (!$user = User::find($id)) { - return redirect()->back() - ->with('error', trans('admin/users/message.user_not_found', ['id' => $id])); - } - if (empty($user->email)) { - return redirect()->back()->with('error', trans('admin/users/message.user_has_no_email')); + $user = Company::scopeCompanyables(User::find($id)); + + // Make sure they can view this particular user + $this->authorize('view', $user); + + if ($user) { + + if (empty($user->email)) { + return redirect()->back()->with('error', trans('admin/users/message.user_has_no_email')); + } + + $user->notify((new CurrentInventory($user))); + return redirect()->back()->with('success', trans('admin/users/general.user_notified')); } - $user->notify((new CurrentInventory($user))); - return redirect()->back()->with('success', trans('admin/users/general.user_notified')); + return redirect()->back()->with('error', trans('admin/users/message.user_not_found', ['id' => $id])); + } /** @@ -672,19 +683,19 @@ class UsersController extends Controller */ public function sendPasswordReset($id) { - if (($user = User::find($id)) && ($user->activated == '1') && ($user->email != '') && ($user->ldap_import == '0')) { + if (($user = Company::scopeCompanyables(User::find($id))) && ($user->activated == '1') && ($user->email != '') && ($user->ldap_import == '0')) { $credentials = ['email' => trim($user->email)]; try { Password::sendResetLink($credentials); - return redirect()->back()->with('success', trans('admin/users/message.password_reset_sent', ['email' => $user->email])); + } catch (\Exception $e) { - return redirect()->back()->with('error', ' Error sending email. :( '); + return redirect()->back()->with('error', trans('general.error_sending_email')); } } - return redirect()->back()->with('error', 'User is not activated, is LDAP synced, or does not have an email address '); + return redirect()->back()->with('error', trans('general.pwd_reset_not_sent')); } } diff --git a/app/Http/Middleware/AssetCountForSidebar.php b/app/Http/Middleware/AssetCountForSidebar.php index 5d9656f5c1..fa439f7753 100644 --- a/app/Http/Middleware/AssetCountForSidebar.php +++ b/app/Http/Middleware/AssetCountForSidebar.php @@ -5,6 +5,7 @@ namespace App\Http\Middleware; use App\Models\Asset; use Auth; use Closure; +use App\Models\Setting; class AssetCountForSidebar { @@ -17,6 +18,32 @@ class AssetCountForSidebar */ public function handle($request, Closure $next) { + /** + * This needs to be set for the /setup process, since the tables might not exist yet + */ + $total_assets = 0; + $total_due_for_checkin = 0; + $total_overdue_for_checkin = 0; + $total_due_for_audit = 0; + $total_overdue_for_audit = 0; + + try { + $settings = Setting::getSettings(); + view()->share('settings', $settings); + } catch (\Exception $e) { + \Log::debug($e); + } + + try { + $total_assets = Asset::count(); + if ($settings->show_archived_in_list != '1') { + $total_assets -= Asset::Archived()->count(); + } + view()->share('total_assets', $total_assets); + } catch (\Exception $e) { + \Log::debug($e); + } + try { $total_rtd_sidebar = Asset::RTD()->count(); view()->share('total_rtd_sidebar', $total_rtd_sidebar); @@ -59,6 +86,37 @@ class AssetCountForSidebar \Log::debug($e); } + try { + $total_due_for_audit = Asset::DueForAudit($settings)->count(); + view()->share('total_due_for_audit', $total_due_for_audit); + } catch (\Exception $e) { + \Log::debug($e); + } + + try { + $total_overdue_for_audit = Asset::OverdueForAudit()->count(); + view()->share('total_overdue_for_audit', $total_overdue_for_audit); + } catch (\Exception $e) { + \Log::debug($e); + } + + try { + $total_due_for_checkin = Asset::DueForCheckin($settings)->count(); + view()->share('total_due_for_checkin', $total_due_for_checkin); + } catch (\Exception $e) { + \Log::debug($e); + } + + try { + $total_overdue_for_checkin = Asset::OverdueForCheckin()->count(); + view()->share('total_overdue_for_checkin', $total_overdue_for_checkin); + } catch (\Exception $e) { + \Log::debug($e); + } + + view()->share('total_due_and_overdue_for_checkin', ($total_due_for_checkin + $total_overdue_for_checkin)); + view()->share('total_due_and_overdue_for_audit', ($total_due_for_audit + $total_overdue_for_audit)); + return $next($request); } } diff --git a/app/Http/Requests/ImageUploadRequest.php b/app/Http/Requests/ImageUploadRequest.php index 25156181e9..9677111059 100644 --- a/app/Http/Requests/ImageUploadRequest.php +++ b/app/Http/Requests/ImageUploadRequest.php @@ -36,6 +36,7 @@ class ImageUploadRequest extends Request return [ 'image' => 'mimes:png,gif,jpg,jpeg,svg,bmp,svg+xml,webp,avif', 'avatar' => 'mimes:png,gif,jpg,jpeg,svg,bmp,svg+xml,webp,avif', + 'favicon' => 'mimes:png,gif,jpg,jpeg,svg,bmp,svg+xml,webp,image/x-icon,image/vnd.microsoft.icon,ico', ]; } @@ -103,9 +104,9 @@ class ImageUploadRequest extends Request \Log::info('File name will be: '.$file_name); \Log::debug('File extension is: '.$ext); - if (($image->getMimeType() == 'image/avif') || ($image->getMimeType() == 'image/webp')) { - // If the file is a webp or avif, we need to just move it since webp support - // needs to be compiled into gd for resizing to be available + if (($image->getMimeType() == 'image/vnd.microsoft.icon') || ($image->getMimeType() == 'image/x-icon') || ($image->getMimeType() == 'image/avif') || ($image->getMimeType() == 'image/webp')) { + // If the file is an icon, webp or avif, we need to just move it since gd doesn't support resizing + // icons or avif, and webp support and needs to be compiled into gd for resizing to be available Storage::disk('public')->put($path.'/'.$file_name, file_get_contents($image)); } elseif($image->getMimeType() == 'image/svg+xml') { diff --git a/app/Http/Requests/StoreAssetRequest.php b/app/Http/Requests/StoreAssetRequest.php index 74988b6c62..007dd26843 100644 --- a/app/Http/Requests/StoreAssetRequest.php +++ b/app/Http/Requests/StoreAssetRequest.php @@ -4,6 +4,9 @@ namespace App\Http\Requests; use App\Models\Asset; use App\Models\Company; +use App\Models\Setting; +use Carbon\Carbon; +use Carbon\Exceptions\InvalidFormatException; use Illuminate\Support\Facades\Gate; class StoreAssetRequest extends ImageUploadRequest @@ -27,6 +30,8 @@ class StoreAssetRequest extends ImageUploadRequest ? Company::getIdForCurrentUser($this->company_id) : $this->company_id; + $this->parseLastAuditDate(); + $this->merge([ 'asset_tag' => $this->asset_tag ?? Asset::autoincrement_asset(), 'company_id' => $idForCurrentUser, @@ -41,10 +46,52 @@ class StoreAssetRequest extends ImageUploadRequest */ public function rules(): array { - $rules = array_merge( - (new Asset)->getRules(), + $modelRules = (new Asset)->getRules(); + + if (Setting::getSettings()->digit_separator === '1.234,56' && is_string($this->input('purchase_cost'))) { + // If purchase_cost was submitted as a string with a comma separator + // then we need to ignore the normal numeric rules. + // Since the original rules still live on the model they will be run + // right before saving (and after purchase_cost has been + // converted to a float via setPurchaseCostAttribute). + $modelRules = $this->removeNumericRulesFromPurchaseCost($modelRules); + } + + return array_merge( + $modelRules, parent::rules(), ); + } + + private function parseLastAuditDate(): void + { + if ($this->input('last_audit_date')) { + try { + $lastAuditDate = Carbon::parse($this->input('last_audit_date')); + + $this->merge([ + 'last_audit_date' => $lastAuditDate->startOfDay()->format('Y-m-d H:i:s'), + ]); + } catch (InvalidFormatException $e) { + // we don't need to do anything here... + // we'll keep the provided date in an + // invalid format so validation picks it up later + } + } + } + + private function removeNumericRulesFromPurchaseCost(array $rules): array + { + $purchaseCost = $rules['purchase_cost']; + + // If rule is in "|" format then turn it into an array + if (is_string($purchaseCost)) { + $purchaseCost = explode('|', $purchaseCost); + } + + $rules['purchase_cost'] = array_filter($purchaseCost, function ($rule) { + return $rule !== 'numeric' && $rule !== 'gte:0'; + }); return $rules; } diff --git a/app/Http/Transformers/AssetsTransformer.php b/app/Http/Transformers/AssetsTransformer.php index b9191d2e63..8a3fea0d00 100644 --- a/app/Http/Transformers/AssetsTransformer.php +++ b/app/Http/Transformers/AssetsTransformer.php @@ -88,6 +88,7 @@ class AssetsTransformer 'purchase_date' => Helper::getFormattedDateObject($asset->purchase_date, 'date'), 'age' => $asset->purchase_date ? $asset->purchase_date->diffForHumans() : '', 'last_checkout' => Helper::getFormattedDateObject($asset->last_checkout, 'datetime'), + 'last_checkin' => Helper::getFormattedDateObject($asset->last_checkin, 'datetime'), 'expected_checkin' => Helper::getFormattedDateObject($asset->expected_checkin, 'date'), 'purchase_cost' => Helper::formatCurrencyOutput($asset->purchase_cost), 'checkin_counter' => (int) $asset->checkin_counter, diff --git a/app/Http/Transformers/UsersTransformer.php b/app/Http/Transformers/UsersTransformer.php index 0ebaca2692..64752d0445 100644 --- a/app/Http/Transformers/UsersTransformer.php +++ b/app/Http/Transformers/UsersTransformer.php @@ -21,6 +21,7 @@ class UsersTransformer public function transformUser(User $user) { + $array = [ 'id' => (int) $user->id, 'avatar' => e($user->present()->gravatar), @@ -64,6 +65,8 @@ class UsersTransformer 'licenses_count' => (int) $user->licenses_count, 'accessories_count' => (int) $user->accessories_count, 'consumables_count' => (int) $user->consumables_count, + 'manages_users_count' => (int) $user->manages_users_count, + 'manages_locations_count' => (int) $user->manages_locations_count, 'company' => ($user->company) ? ['id' => (int) $user->company->id, 'name'=> e($user->company->name)] : null, 'created_by' => ($user->createdBy) ? [ 'id' => (int) $user->createdBy->id, diff --git a/app/Models/Asset.php b/app/Models/Asset.php index c2a2a8d995..c5373a04e2 100644 --- a/app/Models/Asset.php +++ b/app/Models/Asset.php @@ -74,9 +74,9 @@ class Asset extends Depreciable 'eol_explicit' => 'boolean', 'last_checkout' => 'datetime', 'last_checkin' => 'datetime', - 'expected_checkin' => 'date', + 'expected_checkin' => 'datetime:m-d-Y', 'last_audit_date' => 'datetime', - 'next_audit_date' => 'date', + 'next_audit_date' => 'datetime:m-d-Y', 'model_id' => 'integer', 'status_id' => 'integer', 'company_id' => 'integer', @@ -96,7 +96,10 @@ class Asset extends Depreciable 'company_id' => 'nullable|integer|exists:companies,id', 'warranty_months' => 'nullable|numeric|digits_between:0,240', 'last_checkout' => 'nullable|date_format:Y-m-d H:i:s', + 'last_checkin' => 'nullable|date_format:Y-m-d H:i:s', 'expected_checkin' => 'nullable|date', + 'last_audit_date' => 'nullable|date_format:Y-m-d H:i:s', + 'next_audit_date' => 'nullable|date|after:last_audit_date', 'location_id' => 'nullable|exists:locations,id', 'rtd_location_id' => 'nullable|exists:locations,id', 'purchase_date' => 'nullable|date|date_format:Y-m-d', @@ -167,6 +170,8 @@ class Asset extends Depreciable 'expected_checkin', 'next_audit_date', 'last_audit_date', + 'last_checkin', + 'last_checkout', 'asset_eol_date', ]; @@ -1158,10 +1163,11 @@ class Asset extends Depreciable public function scopeDueForAudit($query, $settings) { $interval = $settings->audit_warning_days ?? 0; + $today = Carbon::now(); + $interval_date = $today->copy()->addDays($interval)->format('Y-m-d'); return $query->whereNotNull('assets.next_audit_date') - ->where('assets.next_audit_date', '>=', Carbon::now()) - ->whereRaw("DATE_SUB(assets.next_audit_date, INTERVAL $interval DAY) <= '".Carbon::now()."'") + ->whereBetween('assets.next_audit_date', [$today->format('Y-m-d'), $interval_date]) ->where('assets.archived', '=', 0) ->NotArchived(); } @@ -1183,7 +1189,7 @@ class Asset extends Depreciable public function scopeOverdueForAudit($query) { return $query->whereNotNull('assets.next_audit_date') - ->where('assets.next_audit_date', '<', Carbon::now()) + ->where('assets.next_audit_date', '<', Carbon::now()->format('Y-m-d')) ->where('assets.archived', '=', 0) ->NotArchived(); } @@ -1204,14 +1210,69 @@ class Asset extends Depreciable public function scopeDueOrOverdueForAudit($query, $settings) { - $interval = $settings->audit_warning_days ?? 0; - return $query->whereNotNull('assets.next_audit_date') - ->whereRaw('DATE_SUB('.DB::getTablePrefix()."assets.next_audit_date, INTERVAL $interval DAY) <= '".Carbon::now()."'") + return $query->where(function ($query) { + $query->OverdueForAudit(); + })->orWhere(function ($query) use ($settings) { + $query->DueForAudit($settings); + }); + } + + + /** + * Query builder scope for Assets that are DUE for checkin, based on the assets.expected_checkin + * and settings.audit_warning_days. It checks to see if assets.expected_checkin is now + * + * @author A. Gianotto + * @since v6.4.0 + * @return \Illuminate\Database\Query\Builder Modified query builder + */ + + public function scopeDueForCheckin($query, $settings) + { + $interval = $settings->audit_warning_days ?? 0; + $today = Carbon::now(); + $interval_date = $today->copy()->addDays($interval)->format('Y-m-d'); + + return $query->whereNotNull('assets.expected_checkin') + ->whereBetween('assets.expected_checkin', [$today->format('Y-m-d'), $interval_date]) ->where('assets.archived', '=', 0) + ->whereNotNull('assets.assigned_to') ->NotArchived(); } + /** + * Query builder scope for Assets that are overdue for checkin OR overdue + * + * @author A. Gianotto + * @since v6.4.0 + * @return \Illuminate\Database\Query\Builder Modified query builder + */ + public function scopeOverdueForCheckin($query) + { + return $query->whereNotNull('assets.expected_checkin') + ->where('assets.expected_checkin', '<', Carbon::now()->format('Y-m-d')) + ->where('assets.archived', '=', 0) + ->whereNotNull('assets.assigned_to') + ->NotArchived(); + } + + /** + * Query builder scope for Assets that are due for checkin OR overdue + * + * @author A. Gianotto + * @since v6.4.0 + * @return \Illuminate\Database\Query\Builder Modified query builder + */ + public function scopeDueOrOverdueForCheckin($query, $settings) + { + return $query->where(function ($query) { + $query->OverdueForCheckin(); + })->orWhere(function ($query) use ($settings) { + $query->DueForCheckin($settings); + }); + } + /** * Query builder scope for Archived assets counting diff --git a/app/Models/Company.php b/app/Models/Company.php index 60a8022ed7..8f8e71ff5c 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -81,26 +81,6 @@ final class Company extends SnipeModel } } - /** - * Scoping table queries, determining if a logged in user is part of a company, and only allows - * that user to see items associated with that company - */ - private static function scopeCompanyablesDirectly($query, $column = 'company_id', $table_name = null) - { - if (Auth::user()) { - $company_id = Auth::user()->company_id; - } else { - $company_id = null; - } - - $table = ($table_name) ? $table_name."." : $query->getModel()->getTable()."."; - - if (\Schema::hasColumn($query->getModel()->getTable(), $column)) { - return $query->where($table.$column, '=', $company_id); - } else { - return $query->join('users as users_comp', 'users_comp.id', 'user_id')->where('users_comp.company_id', '=', $company_id); - } - } public static function getIdFromInput($unescaped_input) { @@ -141,25 +121,49 @@ final class Company extends SnipeModel } } + /** + * Check to see if the current user should have access to the model. + * I hate this method and I think it should be refactored. + * + * @param $companyable + * @return bool|void + */ public static function isCurrentUserHasAccess($companyable) { + // When would this even happen tho?? if (is_null($companyable)) { return false; - } elseif (! static::isFullMultipleCompanySupportEnabled()) { - return true; - } elseif (!$companyable instanceof Company && !\Schema::hasColumn($companyable->getModel()->getTable(), 'company_id')) { - // This is primary for the gate:allows-check in location->isDeletable() - // Locations don't have a company_id so without this it isn't possible to delete locations with FullMultipleCompanySupport enabled - // because this function is called by SnipePermissionsPolicy->before() - return true; - } else { - if (Auth::user()) { - $current_user_company_id = Auth::user()->company_id; - $companyable_company_id = $companyable->company_id; + } - return $current_user_company_id == null || $current_user_company_id == $companyable_company_id || Auth::user()->isSuperUser(); + // If FMCS is not enabled, everyone has access, return true + if (! static::isFullMultipleCompanySupportEnabled()) { + return true; + } + + // Again, where would this happen? But check that $companyable is not a string + if (!is_string($companyable)) { + $company_table = $companyable->getModel()->getTable(); + try { + // This is primary for the gate:allows-check in location->isDeletable() + // Locations don't have a company_id so without this it isn't possible to delete locations with FullMultipleCompanySupport enabled + // because this function is called by SnipePermissionsPolicy->before() + if (!$companyable instanceof Company && !\Schema::hasColumn($company_table, 'company_id')) { + return true; + } + + } catch (\Exception $e) { + \Log::warning($e); } } + + + if (Auth::user()) { + \Log::warning('Companyable is '.$companyable); + $current_user_company_id = Auth::user()->company_id; + $companyable_company_id = $companyable->company_id; + return $current_user_company_id == null || $current_user_company_id == $companyable_company_id || Auth::user()->isSuperUser(); + } + } public static function isCurrentUserAuthorized() @@ -190,6 +194,10 @@ final class Company extends SnipeModel && ($this->users()->count() === 0); } + /** + * @param $unescaped_input + * @return int|mixed|string|null + */ public static function getIdForUser($unescaped_input) { if (! static::isFullMultipleCompanySupportEnabled() || Auth::user()->isSuperUser()) { @@ -199,38 +207,6 @@ final class Company extends SnipeModel } } - public static function scopeCompanyables($query, $column = 'company_id', $table_name = null) - { - // If not logged in and hitting this, assume we are on the command line and don't scope?' - if (! static::isFullMultipleCompanySupportEnabled() || (Auth::check() && Auth::user()->isSuperUser()) || (! Auth::check())) { - return $query; - } else { - return static::scopeCompanyablesDirectly($query, $column, $table_name); - } - } - - public static function scopeCompanyableChildren(array $companyable_names, $query) - { - if (count($companyable_names) == 0) { - throw new Exception('No Companyable Children to scope'); - } elseif (! static::isFullMultipleCompanySupportEnabled() || (Auth::check() && Auth::user()->isSuperUser())) { - return $query; - } else { - $f = function ($q) { - static::scopeCompanyablesDirectly($q); - }; - - $q = $query->where(function ($q) use ($companyable_names, $f) { - $q2 = $q->whereHas($companyable_names[0], $f); - - for ($i = 1; $i < count($companyable_names); $i++) { - $q2 = $q2->orWhereHas($companyable_names[$i], $f); - } - }); - - return $q; - } - } public function users() { @@ -261,4 +237,97 @@ final class Company extends SnipeModel { return $this->hasMany(Component::class, 'company_id'); } + + /** + * START COMPANY SCOPING FOR FMCS + */ + + /** + * Scoping table queries, determining if a logged in user is part of a company, and only allows the user to access items associated with that company if FMCS is enabled. + * + * This method is the one that the CompanyableTrait uses to contrain queries automatically, however that trait CANNOT be + * applied to the user's model, since it causes an infinite loop against the authenticated user. + * + * @todo - refactor that trait to handle the user's model as well. + * + * @author [A. Gianotto] + * @param $query + * @param $column + * @param $table_name + * @return mixed + */ + public static function scopeCompanyables($query, $column = 'company_id', $table_name = null) + { + // If not logged in and hitting this, assume we are on the command line and don't scope?' + if (! static::isFullMultipleCompanySupportEnabled() || (Auth::check() && Auth::user()->isSuperUser()) || (! Auth::check())) { + return $query; + } else { + \Log::debug('Fire scopeCompanyablesDirectly.'); + return static::scopeCompanyablesDirectly($query, $column, $table_name); + } + } + + /** + * Scoping table queries, determining if a logged in user is part of a company, and only allows + * that user to see items associated with that company + */ + private static function scopeCompanyablesDirectly($query, $column = 'company_id', $table_name = null) + { + // Get the company ID of the logged in user, or set it to null if there is no company assicoated with the user + if (Auth::user()) { + \Log::debug('Admin company is: '.Auth::user()->company_id); + $company_id = Auth::user()->company_id; + } else { + $company_id = null; + } + + // Dynamically get the table name if it's not passed in, based on the model we're querying against + $table = ($table_name) ? $table_name."." : $query->getModel()->getTable()."."; + \Log::debug('Model is: '.$query->getModel()); + + \Log::debug('Table is: '.$table); + + // If the column exists in the table, use it to scope the query + if (\Schema::hasColumn($query->getModel()->getTable(), $column)) { + return $query->where($table.$column, '=', $company_id); + } else { + return $query->join('users as users_comp', 'users_comp.id', 'user_id')->where('users_comp.company_id', '=', $company_id); + } + } + + /** + * I legit do not know what this method does, but we can't remove it (yet). + * + * This gets invoked by CompanyableChildScope, but I'm not sure what it does. + * + * @author [A. Gianotto] + * @param array $companyable_names + * @param $query + * @return mixed + */ + public static function scopeCompanyableChildren(array $companyable_names, $query) + { + + if (count($companyable_names) == 0) { + throw new Exception('No Companyable Children to scope'); + } elseif (! static::isFullMultipleCompanySupportEnabled() || (Auth::check() && Auth::user()->isSuperUser())) { + return $query; + } else { + $f = function ($q) { + \Log::debug('scopeCompanyablesDirectly firing '); + static::scopeCompanyablesDirectly($q); + }; + + $q = $query->where(function ($q) use ($companyable_names, $f) { + $q2 = $q->whereHas($companyable_names[0], $f); + + for ($i = 1; $i < count($companyable_names); $i++) { + $q2 = $q2->orWhereHas($companyable_names[$i], $f); + } + }); + + return $q; + } + } + } diff --git a/app/Models/CompanyableTrait.php b/app/Models/CompanyableTrait.php index b03b346d2e..df67f2be4f 100644 --- a/app/Models/CompanyableTrait.php +++ b/app/Models/CompanyableTrait.php @@ -5,8 +5,13 @@ namespace App\Models; trait CompanyableTrait { /** - * Boot the companyable trait for a model. + * This trait is used to scope models to the current company. To use this scope on companyable models, + * we use the "use Companyable;" statement at the top of the mode. * + * We CANNOT USE THIS ON USERS, as it causes an infinite loop and prevents users from logging in, since this scope will be + * applied to the currently logged in (or logging in) user in addition to the user model for viewing lists of users. + * + * @see \App\Models\Company\Company::scopeCompanyables() * @return void */ public static function bootCompanyableTrait() diff --git a/app/Models/CustomFieldset.php b/app/Models/CustomFieldset.php index a62f96d631..71be28e8a3 100644 --- a/app/Models/CustomFieldset.php +++ b/app/Models/CustomFieldset.php @@ -5,6 +5,8 @@ namespace App\Models; use Gate; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Rule; use Watson\Validating\ValidatingTrait; class CustomFieldset extends Model @@ -92,8 +94,19 @@ class CustomFieldset extends Model array_push($rule, $field->attributes['format']); $rules[$field->db_column_name()] = $rule; - //add not_array to rules for all fields - $rules[$field->db_column_name()][] = 'not_array'; + + // add not_array to rules for all fields but checkboxes + if ($field->element != 'checkbox') { + $rules[$field->db_column_name()][] = 'not_array'; + } + + if ($field->element == 'checkbox') { + $rules[$field->db_column_name()][] = 'checkboxes'; + } + + if ($field->element == 'radio') { + $rules[$field->db_column_name()][] = 'radio_buttons'; + } } return $rules; diff --git a/app/Models/Labels/FieldOption.php b/app/Models/Labels/FieldOption.php index 7e45cc0ce7..38a90e31dc 100644 --- a/app/Models/Labels/FieldOption.php +++ b/app/Models/Labels/FieldOption.php @@ -18,8 +18,14 @@ class FieldOption { // assignedTo directly on the asset is a special case where // we want to avoid returning the property directly // and instead return the entity's presented name. - if ($dataPath[0] === 'assignedTo'){ - return $asset->assignedTo ? $asset->assignedTo->present()->fullName() : null; + if ($dataPath[0] === 'assignedTo') { + if ($asset->relationLoaded('assignedTo')) { + // If the "assignedTo" relationship was eager loaded then the way to get the + // relationship changes from $asset->assignedTo to $asset->assigned. + return $asset->assigned ? $asset->assigned->present()->fullName() : null; + } + + return $asset->assignedTo ? $asset->assignedTo->present()->fullName() : null; } return $dataPath->reduce(function ($myValue, $path) { diff --git a/app/Models/Labels/Tapes/Brother/TZe_18mm.php b/app/Models/Labels/Tapes/Brother/TZe_18mm.php new file mode 100644 index 0000000000..38c14c7aa4 --- /dev/null +++ b/app/Models/Labels/Tapes/Brother/TZe_18mm.php @@ -0,0 +1,19 @@ +getUnit()); } + public function getMarginTop() { return Helper::convertUnit(self::MARGIN_SIDES, 'mm', $this->getUnit()); } + public function getMarginBottom() { return Helper::convertUnit(self::MARGIN_SIDES, 'mm', $this->getUnit());} + public function getMarginLeft() { return Helper::convertUnit(self::MARGIN_ENDS, 'mm', $this->getUnit()); } + public function getMarginRight() { return Helper::convertUnit(self::MARGIN_ENDS, 'mm', $this->getUnit()); } +} \ No newline at end of file diff --git a/app/Models/Labels/Tapes/Brother/TZe_18mm_A.php b/app/Models/Labels/Tapes/Brother/TZe_18mm_A.php new file mode 100644 index 0000000000..32156f5ee6 --- /dev/null +++ b/app/Models/Labels/Tapes/Brother/TZe_18mm_A.php @@ -0,0 +1,56 @@ +getPrintableArea(); + + if ($record->has('barcode1d')) { + static::write1DBarcode( + $pdf, $record->get('barcode1d')->content, $record->get('barcode1d')->type, + $pa->x1, $pa->y1, $pa->w, self::BARCODE_SIZE + ); + } + + $currentY = $pa->y1 + self::BARCODE_SIZE + self::BARCODE_MARGIN; + $usableHeight = $pa->h - self::BARCODE_SIZE - self::BARCODE_MARGIN; + $fontSize = $usableHeight + self::TEXT_SIZE_MOD; + + $tagWidth = $pa->w / 3; + $fieldWidth = $pa->w / 3 * 2; + + static::writeText( + $pdf, $record->get('tag'), + $pa->x1, $currentY, + 'freemono', 'b', $fontSize, 'L', + $tagWidth, $usableHeight, true, 0, 0 + ); + + if ($record->get('fields')->count() >= 1) { + static::writeText( + $pdf, $record->get('fields')->values()->get(0)['value'], + $pa->x1 + ($tagWidth), $currentY, + 'freemono', 'b', $fontSize, 'R', + $fieldWidth, $usableHeight, true, 0, 0 + ); + } + + } +} \ No newline at end of file diff --git a/app/Models/Labels/Tapes/Dymo/LabelWriter_1933081.php b/app/Models/Labels/Tapes/Dymo/LabelWriter_1933081.php new file mode 100644 index 0000000000..9b56012f7a --- /dev/null +++ b/app/Models/Labels/Tapes/Dymo/LabelWriter_1933081.php @@ -0,0 +1,89 @@ +getPrintableArea(); + + $currentX = $pa->x1; + $currentY = $pa->y1; + $usableWidth = $pa->w; + + $barcodeSize = $pa->h - self::TAG_SIZE; + + if ($record->has('barcode2d')) { + static::writeText( + $pdf, $record->get('tag'), + $pa->x1, $pa->y2 - self::TAG_SIZE, + 'freesans', 'b', self::TAG_SIZE, 'C', + $barcodeSize, self::TAG_SIZE, true, 0 + ); + static::write2DBarcode( + $pdf, $record->get('barcode2d')->content, $record->get('barcode2d')->type, + $currentX, $currentY, + $barcodeSize, $barcodeSize + ); + $currentX += $barcodeSize + self::BARCODE_MARGIN; + $usableWidth -= $barcodeSize + self::BARCODE_MARGIN; + } else { + static::writeText( + $pdf, $record->get('tag'), + $pa->x1, $pa->y2 - self::TAG_SIZE, + 'freesans', 'b', self::TAG_SIZE, 'R', + $usableWidth, self::TAG_SIZE, true, 0 + ); + } + + if ($record->has('title')) { + static::writeText( + $pdf, $record->get('title'), + $currentX, $currentY, + 'freesans', 'b', self::TITLE_SIZE, 'L', + $usableWidth, self::TITLE_SIZE, true, 0 + ); + $currentY += self::TITLE_SIZE + self::TITLE_MARGIN; + } + + foreach ($record->get('fields') as $field) { + static::writeText( + $pdf, (($field['label']) ? $field['label'].' ' : '') . $field['value'], + $currentX, $currentY, + 'freesans', '', self::FIELD_SIZE, 'L', + $usableWidth, self::FIELD_SIZE, true, 0, 0.3 + ); + $currentY += self::FIELD_SIZE + self::FIELD_MARGIN; + } + + if ($record->has('barcode1d')) { + static::write1DBarcode( + $pdf, $record->get('barcode1d')->content, $record->get('barcode1d')->type, + $currentX, $barcodeSize + self::BARCODE_MARGIN, $usableWidth - self::TAG_SIZE, self::TAG_SIZE + ); + } + } + +} diff --git a/app/Models/Labels/Tapes/Dymo/LabelWriter_2112283.php b/app/Models/Labels/Tapes/Dymo/LabelWriter_2112283.php new file mode 100644 index 0000000000..e1305bd068 --- /dev/null +++ b/app/Models/Labels/Tapes/Dymo/LabelWriter_2112283.php @@ -0,0 +1,89 @@ +getPrintableArea(); + + $currentX = $pa->x1; + $currentY = $pa->y1; + $usableWidth = $pa->w; + + $barcodeSize = $pa->h - self::TAG_SIZE; + + if ($record->has('barcode2d')) { + static::writeText( + $pdf, $record->get('tag'), + $pa->x1, $pa->y2 - self::TAG_SIZE, + 'freesans', 'b', self::TAG_SIZE, 'C', + $barcodeSize, self::TAG_SIZE, true, 0 + ); + static::write2DBarcode( + $pdf, $record->get('barcode2d')->content, $record->get('barcode2d')->type, + $currentX, $currentY, + $barcodeSize, $barcodeSize + ); + $currentX += $barcodeSize + self::BARCODE_MARGIN; + $usableWidth -= $barcodeSize + self::BARCODE_MARGIN; + } else { + static::writeText( + $pdf, $record->get('tag'), + $pa->x1, $pa->y2 - self::TAG_SIZE, + 'freesans', 'b', self::TAG_SIZE, 'R', + $usableWidth, self::TAG_SIZE, true, 0 + ); + } + + if ($record->has('title')) { + static::writeText( + $pdf, $record->get('title'), + $currentX, $currentY, + 'freesans', 'b', self::TITLE_SIZE, 'L', + $usableWidth, self::TITLE_SIZE, true, 0 + ); + $currentY += self::TITLE_SIZE + self::TITLE_MARGIN; + } + + foreach ($record->get('fields') as $field) { + static::writeText( + $pdf, (($field['label']) ? $field['label'].' ' : '') . $field['value'], + $currentX, $currentY, + 'freesans', '', self::FIELD_SIZE, 'L', + $usableWidth, self::FIELD_SIZE, true, 0, 0.3 + ); + $currentY += self::FIELD_SIZE + self::FIELD_MARGIN; + } + + if ($record->has('barcode1d')) { + static::write1DBarcode( + $pdf, $record->get('barcode1d')->content, $record->get('barcode1d')->type, + $currentX, $barcodeSize + self::BARCODE_MARGIN, $usableWidth - self::TAG_SIZE, self::TAG_SIZE + ); + } + } + +} diff --git a/app/Models/License.php b/app/Models/License.php index 7fb4f9e4cb..deb1221e73 100755 --- a/app/Models/License.php +++ b/app/Models/License.php @@ -81,6 +81,7 @@ class License extends Depreciable 'serial', 'supplier_id', 'termination_date', + 'free_seat_count', 'user_id', 'min_amt', ]; @@ -114,6 +115,7 @@ class License extends Depreciable 'category' => ['name'], 'depreciation' => ['name'], ]; + protected $appends = ['free_seat_count']; /** * Update seat counts when the license is updated @@ -280,6 +282,16 @@ class License extends Depreciable } $this->attributes['termination_date'] = $value; } + /** + * Sets free_seat_count attribute + * + * @author G. Martinez + * @since [v6.3] + * @return mixed + */ + public function getFreeSeatCountAttribute(){ + return $this->attributes['free_seat_count'] = $this->remaincount(); + } /** * Establishes the license -> company relationship @@ -502,7 +514,13 @@ class License extends Depreciable ->whereNull('deleted_at') ->count(); } - + /** + * Returns the available seats remaining + * + * @author A. Gianotto + * @since [v2.0] + * @return int + */ /** * Returns the number of total available seats for this license @@ -579,7 +597,7 @@ class License extends Depreciable $taken = $this->assigned_seats_count; $diff = ($total - $taken); - return $diff; + return (int) $diff; } /** diff --git a/app/Models/User.php b/app/Models/User.php index e535fa0fde..e30136703e 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -214,10 +214,12 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo public function isDeletable() { return Gate::allows('delete', $this) - && ($this->assets()->count() === 0) - && ($this->licenses()->count() === 0) - && ($this->consumables()->count() === 0) - && ($this->accessories()->count() === 0) + && ($this->assets->count() === 0) + && ($this->licenses->count() === 0) + && ($this->consumables->count() === 0) + && ($this->accessories->count() === 0) + && ($this->managedLocations->count() === 0) + && ($this->managesUsers->count() === 0) && ($this->deleted_at == ''); } @@ -410,6 +412,19 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo return $this->belongsTo(self::class, 'manager_id')->withTrashed(); } + /** + * Establishes the user -> managed users relationship + * + * @author A. Gianotto + * @since [v6.4.1] + * @return \Illuminate\Database\Eloquent\Relations\Relation + */ + public function managesUsers() + { + return $this->hasMany(\App\Models\User::class, 'manager_id'); + } + + /** * Establishes the user -> managed locations relationship * diff --git a/app/Policies/SnipePermissionsPolicy.php b/app/Policies/SnipePermissionsPolicy.php index d4f2d88ccd..96c94cd776 100644 --- a/app/Policies/SnipePermissionsPolicy.php +++ b/app/Policies/SnipePermissionsPolicy.php @@ -35,16 +35,50 @@ abstract class SnipePermissionsPolicy public function before(User $user, $ability, $item) { - // Lets move all company related checks here. - if ($item instanceof \App\Models\SnipeModel && ! Company::isCurrentUserHasAccess($item)) { - return false; - } - // If an admin, they can do all asset related tasks. + /** + * If an admin, they can do all item related tasks, but ARE constrained by FMCSA company access. + * That scoping happens on the model level (except for the Users model) via the Companyable trait. + * + * This does lead to some inconsistencies in the responses, since attempting to edit assets, + * accessories, etc (anything other than users) will result in a Forbidden error, whereas the users + * area will redirect with "That user doesn't exist" since the scoping is handled directly on those queries. + * + * The *superuser* global permission gets handled in the AuthServiceProvider before() method. + * + * @see https://snipe-it.readme.io/docs/permissions + */ + if ($user->hasAccess('admin')) { return true; } + + /** + * If we got here by $this→authorize('something', $actualModel) then we can continue on Il but if we got here + * via $this→authorize('something', Model::class) then calling Company:: isCurrentUserHasAccess($item) gets weird. + * Bail out here by returning "nothing" and allow the relevant method lower in this class to be called and handle authorization. + */ + if (!$item instanceof Model){ + return; + } + + + /** + * The Company::isCurrentUserHasAccess() method from the company model handles the check for FMCS already so we + * don't have to do that here. + */ + if (!Company::isCurrentUserHasAccess($item)) { + return false; + } + } + + /** + * These methods handle the generic view/create/edit/delete permissions for the model. + * + * @param User $user + * @return bool + */ public function index(User $user) { return $user->hasAccess($this->columnName().'.view'); diff --git a/app/Presenters/AssetPresenter.php b/app/Presenters/AssetPresenter.php index 5f900a6a83..163ee1b606 100644 --- a/app/Presenters/AssetPresenter.php +++ b/app/Presenters/AssetPresenter.php @@ -253,6 +253,13 @@ class AssetPresenter extends Presenter 'visible' => false, 'title' => trans('admin/hardware/table.checkout_date'), 'formatter' => 'dateDisplayFormatter', + ], [ + 'field' => 'last_checkin', + 'searchable' => false, + 'sortable' => true, + 'visible' => false, + 'title' => trans('admin/hardware/table.last_checkin_date'), + 'formatter' => 'dateDisplayFormatter', ], [ 'field' => 'expected_checkin', 'searchable' => false, diff --git a/app/Presenters/UserPresenter.php b/app/Presenters/UserPresenter.php index 4726205c72..a5b99adb14 100644 --- a/app/Presenters/UserPresenter.php +++ b/app/Presenters/UserPresenter.php @@ -221,7 +221,7 @@ class UserPresenter extends Presenter 'switchable' => true, 'escape' => true, 'class' => 'css-barcode', - 'title' => 'Assets', + 'title' => trans('general.assets'), 'visible' => true, ], [ @@ -230,7 +230,7 @@ class UserPresenter extends Presenter 'sortable' => true, 'switchable' => true, 'class' => 'css-license', - 'title' => 'License', + 'title' => trans('general.licenses'), 'visible' => true, ], [ @@ -239,7 +239,7 @@ class UserPresenter extends Presenter 'sortable' => true, 'switchable' => true, 'class' => 'css-consumable', - 'title' => 'Consumables', + 'title' => trans('general.consumables'), 'visible' => true, ], [ @@ -248,7 +248,25 @@ class UserPresenter extends Presenter 'sortable' => true, 'switchable' => true, 'class' => 'css-accessory', - 'title' => 'Accessories', + 'title' => trans('general.accessories'), + 'visible' => true, + ], + [ + 'field' => 'manages_users_count', + 'searchable' => false, + 'sortable' => true, + 'switchable' => true, + 'class' => 'css-users', + 'title' => trans('admin/users/table.managed_users'), + 'visible' => true, + ], + [ + 'field' => 'manages_locations_count', + 'searchable' => false, + 'sortable' => true, + 'switchable' => true, + 'class' => 'css-location', + 'title' => trans('admin/users/table.managed_locations'), 'visible' => true, ], [ diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 9d493e85bb..11a5d3c1ba 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -93,21 +93,28 @@ class AuthServiceProvider extends ServiceProvider Passport::personalAccessTokensExpireIn(Carbon::now()->addYears(config('passport.expiration_years'))); Passport::withCookieSerialization(); - // -------------------------------- - // BEFORE ANYTHING ELSE - // -------------------------------- - // If this condition is true, ANYTHING else below will be assumed - // to be true. This can cause weird blade behavior. + + /** + * BEFORE ANYTHING ELSE + * + * If this condition is true, ANYTHING else below will be assumed to be true. + * This is where we set the superadmin permission to allow superadmins to be able to do everything within the system. + * + */ Gate::before(function ($user) { if ($user->isSuperUser()) { return true; } }); - // -------------------------------- - // GENERAL GATES - // These control general sections of the admin - // -------------------------------- + + /** + * GENERAL GATES + * + * These control general sections of the admin. These definitions are used in our blades via @can('blah) and also + * use in our controllers to determine if a user has access to a certain area. + */ + Gate::define('admin', function ($user) { if ($user->hasAccess('admin')) { return true; diff --git a/app/Providers/ValidationServiceProvider.php b/app/Providers/ValidationServiceProvider.php index 50468c8d72..4646b3c78b 100644 --- a/app/Providers/ValidationServiceProvider.php +++ b/app/Providers/ValidationServiceProvider.php @@ -2,9 +2,12 @@ namespace App\Providers; +use App\Models\CustomField; use App\Models\Department; use App\Models\Setting; use DB; +use Illuminate\Support\Facades\Crypt; +use Illuminate\Support\Facades\Log; use Illuminate\Support\ServiceProvider; use Illuminate\Validation\Rule; use Validator; @@ -276,7 +279,24 @@ class ValidationServiceProvider extends ServiceProvider Validator::extend('is_unique_department', function ($attribute, $value, $parameters, $validator) { $data = $validator->getData(); - if ((array_key_exists('location_id', $data) && $data['location_id'] != null) && (array_key_exists('company_id', $data) && $data['company_id'] != null)) { + + if ( + array_key_exists('location_id', $data) && $data['location_id'] !== null && + array_key_exists('company_id', $data) && $data['company_id'] !== null + ) { + //for updating existing departments + if(array_key_exists('id', $data) && $data['id'] !== null){ + $count = Department::where('name', $data['name']) + ->where('location_id', $data['location_id']) + ->where('company_id', $data['company_id']) + ->whereNotNull('company_id') + ->whereNotNull('location_id') + ->where('id', '!=', $data['id']) + ->count('name'); + + return $count < 1; + }else // for entering in new departments + { $count = Department::where('name', $data['name']) ->where('location_id', $data['location_id']) ->where('company_id', $data['company_id']) @@ -286,14 +306,48 @@ class ValidationServiceProvider extends ServiceProvider return $count < 1; } + } else { return true; - } + } }); Validator::extend('not_array', function ($attribute, $value, $parameters, $validator) { return !is_array($value); }); + + // This is only used in Models/CustomFieldset.php - it does automatic validation for checkboxes by making sure + // that the submitted values actually exist in the options. + Validator::extend('checkboxes', function ($attribute, $value, $parameters, $validator){ + $field = CustomField::where('db_column', $attribute)->first(); + $options = $field->formatFieldValuesAsArray(); + + if(is_array($value)) { + $invalid = array_diff($value, $options); + if(count($invalid) > 0) { + return false; + } + } + + // for legacy, allows users to submit a comma separated string of options + elseif(!is_array($value)) { + $exploded = array_map('trim', explode(',', $value)); + $invalid = array_diff($exploded, $options); + if(count($invalid) > 0) { + return false; + } + } + + return true; + }); + + // Validates that a radio button option exists + Validator::extend('radio_buttons', function ($attribute, $value) { + $field = CustomField::where('db_column', $attribute)->first(); + $options = $field->formatFieldValuesAsArray(); + + return in_array($value, $options); + }); } /** diff --git a/app/View/Label.php b/app/View/Label.php index f47ad6acd5..3ec3a4099c 100644 --- a/app/View/Label.php +++ b/app/View/Label.php @@ -142,7 +142,32 @@ class Label implements View // Remove Duplicates $toAdd = $field ->filter(fn($o) => !$myFields->contains('dataSource', $o['dataSource'])) - ->first(); + // For fields that have multiple options, we need to combine them + // into a single field so all values are displayed. + ->reduce(function ($previous, $current) { + // On the first iteration we simply return the item. + // If there is only one item to be processed for the row + // then this effectively skips everything below this if block. + if (is_null($previous)) { + return $current; + } + + // At this point we are dealing with a row with multiple items being displayed. + // We need to combine the label and value of the current item with the previous item. + + // The end result of this will be in this format: + // {labelOne} {valueOne} | {labelTwo} {valueTwo} | {labelThree} {valueThree} + $previous['value'] = trim(implode(' | ', [ + implode(' ', [$previous['label'], $previous['value']]), + implode(' ', [$current['label'], $current['value']]), + ])); + + // We'll set the label to an empty string since we + // injected the label into the value field above. + $previous['label'] = ''; + + return $previous; + }); return $toAdd ? $myFields->push($toAdd) : $myFields; }, new Collection()); diff --git a/composer.lock b/composer.lock index 127254236b..4f5a0df23b 100644 --- a/composer.lock +++ b/composer.lock @@ -10983,20 +10983,20 @@ }, { "name": "tecnickcom/tcpdf", - "version": "6.6.2", + "version": "6.7.5", "source": { "type": "git", "url": "https://github.com/tecnickcom/TCPDF.git", - "reference": "e3cffc9bcbc76e89e167e9eb0bbda0cab7518459" + "reference": "951eabf0338ec2522bd0d5d9c79b08a3a3d36b36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/e3cffc9bcbc76e89e167e9eb0bbda0cab7518459", - "reference": "e3cffc9bcbc76e89e167e9eb0bbda0cab7518459", + "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/951eabf0338ec2522bd0d5d9c79b08a3a3d36b36", + "reference": "951eabf0338ec2522bd0d5d9c79b08a3a3d36b36", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.5.0" }, "type": "library", "autoload": { @@ -11021,7 +11021,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0-only" + "LGPL-3.0-or-later" ], "authors": [ { @@ -11043,7 +11043,7 @@ ], "support": { "issues": "https://github.com/tecnickcom/TCPDF/issues", - "source": "https://github.com/tecnickcom/TCPDF/tree/6.6.2" + "source": "https://github.com/tecnickcom/TCPDF/tree/6.7.5" }, "funding": [ { @@ -11051,7 +11051,7 @@ "type": "custom" } ], - "time": "2022-12-17T10:28:59+00:00" + "time": "2024-04-20T17:25:10+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", diff --git a/config/database.php b/config/database.php index 1b4feeca93..de3c40bb25 100755 --- a/config/database.php +++ b/config/database.php @@ -96,6 +96,7 @@ return [ PDO::MYSQL_ATTR_SSL_CERT => env('DB_SSL_CERT_PATH'), // /path/to/cert.pem PDO::MYSQL_ATTR_SSL_CA => env('DB_SSL_CA_PATH'), // /path/to/ca.pem PDO::MYSQL_ATTR_SSL_CIPHER => env('DB_SSL_CIPHER'), + PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => env('DB_SSL_VERIFY_SERVER'), //true/false ]) : [], ], diff --git a/config/session.php b/config/session.php index a47294a8cb..5c6cb27a9f 100644 --- a/config/session.php +++ b/config/session.php @@ -174,4 +174,17 @@ return [ 'bs_table_storage' => env('BS_TABLE_STORAGE', 'cookieStorage'), + + /* + |-------------------------------------------------------------------------- + | Bootstrap Table Enable Deeplinking + |-------------------------------------------------------------------------- + | + | Use deeplinks to directly link to search results, sorting, and pagination + | + | More info: https://github.com/generals-space/bootstrap-table-addrbar/blob/master/readme(EN).md + */ + + 'bs_table_addrbar' => env('BS_TABLE_DEEPLINK', true), + ]; diff --git a/config/version.php b/config/version.php index a1d26453da..421e5fcb20 100644 --- a/config/version.php +++ b/config/version.php @@ -1,10 +1,10 @@ 'v6.3.3', - 'full_app_version' => 'v6.3.3 - build 12903-g0f63fa23e', - 'build_version' => '12903', + 'app_version' => 'v6.4.1', + 'full_app_version' => 'v6.4.1 - build 13386-g4642f50d6b', + 'build_version' => '13386', 'prerelease_version' => '', - 'hash_version' => 'g0f63fa23e', - 'full_hash' => 'v6.3.3-67-g0f63fa23e', + 'hash_version' => 'g4642f50d6b', + 'full_hash' => 'v6.4.1-31-g4642f50d6b', 'branch' => 'develop', ); \ No newline at end of file diff --git a/database/factories/AssetFactory.php b/database/factories/AssetFactory.php index 5461303c88..6c5e883636 100644 --- a/database/factories/AssetFactory.php +++ b/database/factories/AssetFactory.php @@ -4,6 +4,7 @@ namespace Database\Factories; use App\Models\Asset; use App\Models\AssetModel; +use App\Models\CustomField; use App\Models\Location; use App\Models\Statuslabel; use App\Models\Supplier; @@ -353,6 +354,16 @@ class AssetFactory extends Factory return $this->state(['requestable' => false]); } + public function hasEncryptedCustomField(CustomField $field = null) + { + return $this->state(function () use ($field) { + return [ + 'model_id' => AssetModel::factory()->hasEncryptedCustomField($field), + ]; + }); + } + + /** * This allows bypassing model level validation if you want to purposefully * create an asset in an invalid state. Validation is turned back on diff --git a/database/factories/AssetModelFactory.php b/database/factories/AssetModelFactory.php index 4881d6560b..ed3d478261 100644 --- a/database/factories/AssetModelFactory.php +++ b/database/factories/AssetModelFactory.php @@ -3,6 +3,7 @@ namespace Database\Factories; use App\Models\AssetModel; +use App\Models\CustomField; use App\Models\CustomFieldset; use App\Models\Depreciation; use App\Models\Manufacturer; @@ -429,4 +430,13 @@ class AssetModelFactory extends Factory ]; }); } + + public function hasEncryptedCustomField(CustomField $field = null) + { + return $this->state(function () use ($field) { + return [ + 'fieldset_id' => CustomFieldset::factory()->hasEncryptedCustomField($field), + ]; + }); + } } diff --git a/database/factories/CustomFieldsetFactory.php b/database/factories/CustomFieldsetFactory.php index e651b5c8d3..9a410ba25f 100644 --- a/database/factories/CustomFieldsetFactory.php +++ b/database/factories/CustomFieldsetFactory.php @@ -3,6 +3,7 @@ namespace Database\Factories; use App\Models\CustomFieldset; +use App\Models\CustomField; use Illuminate\Database\Eloquent\Factories\Factory; class CustomFieldsetFactory extends Factory @@ -43,4 +44,13 @@ class CustomFieldsetFactory extends Factory ]; }); } + + public function hasEncryptedCustomField(CustomField $field = null) + { + return $this->afterCreating(function (CustomFieldset $fieldset) use ($field) { + $field = $field ?? CustomField::factory()->testEncrypted()->create(); + + $fieldset->fields()->attach($field, ['order' => '1', 'required' => false]); + }); + } } diff --git a/database/migrations/2024_03_18_221612_update_legacy_locale.php b/database/migrations/2024_03_18_221612_update_legacy_locale.php new file mode 100644 index 0000000000..dc81207b1d --- /dev/null +++ b/database/migrations/2024_03_18_221612_update_legacy_locale.php @@ -0,0 +1,47 @@ +string('locale', 10)->nullable()->default('en-US')->change(); + }); + + Schema::table('settings', function (Blueprint $table) { + // + $table->string('locale', 10)->nullable()->default('en-US')->change(); + }); + + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + Schema::table('users', function (Blueprint $table) { + // + $table->string('locale', 10)->nullable()->default(config('app.locale'))->change(); + }); + Schema::table('settings', function (Blueprint $table) { + // + $table->string('locale', 10)->nullable()->default(config('app.locale'))->change(); + }); + } +} diff --git a/package-lock.json b/package-lock.json index 3a81578e6a..1a61476f90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1329,9 +1329,9 @@ "dev": true }, "@fortawesome/fontawesome-free": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.1.tgz", - "integrity": "sha512-CNy5vSwN3fsUStPRLX7fUYojyuzoEMSXPl7zSLJ8TgtRfjv24LOnOWKT2zYwaHZCJGkdyRnTmstR0P+Ah503Gw==" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.2.tgz", + "integrity": "sha512-hRILoInAx8GNT5IMkrtIt9blOdrqHOnPBH+k70aWUAqPZPgopb9G5EQJFpaBx/S8zp2fC+mPW349Bziuk1o28Q==" }, "@jridgewell/gen-mapping": { "version": "0.1.1", @@ -1460,9 +1460,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -1752,9 +1752,9 @@ "dev": true }, "@types/raf": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", - "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", "optional": true }, "@types/range-parser": { @@ -2424,12 +2424,48 @@ } }, "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "dependencies": { + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + } } }, "array-filter": { @@ -3781,9 +3817,9 @@ }, "dependencies": { "core-js": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.0.tgz", - "integrity": "sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", + "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==", "optional": true }, "regenerator-runtime": { @@ -4373,9 +4409,9 @@ } }, "crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, "css-declaration-sorter": { "version": "6.3.0", @@ -4607,14 +4643,14 @@ } }, "deep-equal": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", - "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "requires": { "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.1", + "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", @@ -4624,36 +4660,58 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", + "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.13" }, "dependencies": { "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } }, "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "requires": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "has-symbols": { @@ -4693,26 +4751,26 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" } } } @@ -4731,6 +4789,16 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -4902,9 +4970,9 @@ } }, "dompurify": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz", - "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.2.tgz", + "integrity": "sha512-5vSyvxRAb45EoWwAktUT3AYqAwXK4FL7si22Cgj46U6ICsj/YJczCN+Bk7WNABIQmpWRymGfslMhrRUZkQNnqA==", "optional": true }, "domutils": { @@ -5071,6 +5139,43 @@ "string.prototype.trimstart": "^1.0.3" } }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "requires": { + "get-intrinsic": "^1.2.4" + }, + "dependencies": { + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + } + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, "es-get-iterator": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", @@ -5087,15 +5192,21 @@ "stop-iteration-iterator": "^1.0.0" }, "dependencies": { + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "has-symbols": { @@ -15154,15 +15265,21 @@ "get-intrinsic": "^1.1.3" }, "dependencies": { + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "has-symbols": { @@ -15236,17 +15353,17 @@ "dev": true }, "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "requires": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" } }, "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" }, "has-symbols": { "version": "1.0.1", @@ -15254,11 +15371,11 @@ "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=" }, "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "requires": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "dependencies": { "has-symbols": { @@ -15318,6 +15435,21 @@ "minimalistic-assert": "^1.0.1" } }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + }, + "dependencies": { + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + } + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -15813,31 +15945,13 @@ } }, "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" - }, - "dependencies": { - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - } } }, "interpret": { @@ -15880,55 +15994,35 @@ } }, "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" }, "dependencies": { - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "requires": { - "which-typed-array": "^1.1.11" - } - }, - "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } } } }, @@ -16018,9 +16112,9 @@ } }, "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==" }, "is-negative-zero": { "version": "2.0.1", @@ -16065,16 +16159,52 @@ } }, "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==" }, "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "requires": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "dependencies": { + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + } } }, "is-stream": { @@ -16112,17 +16242,53 @@ } }, "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==" }, "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "dependencies": { + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + } } }, "is-what": { @@ -16366,9 +16532,9 @@ }, "dependencies": { "core-js": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.0.tgz", - "integrity": "sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", + "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==", "optional": true } } @@ -17500,12 +17666,58 @@ "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" }, "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "dependencies": { + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + } } }, "object-keys": { @@ -17853,6 +18065,11 @@ "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==" }, + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==" + }, "postcss": { "version": "8.4.5", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", @@ -18695,23 +18912,59 @@ } }, "regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "dependencies": { - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "requires": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" } } }, @@ -19077,6 +19330,54 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "dependencies": { + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + } + } + }, + "set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + } + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -19162,6 +19463,11 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "signature_pad": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/signature_pad/-/signature_pad-4.2.0.tgz", + "integrity": "sha512-YLWysmaUBaC5wosAKkgbX7XI+LBv2w5L0QUcI6Jc4moHYzv9BUBJtAyNLpWzHjtjKTeWOH6bfP4a4pzf0UinfQ==" + }, "simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", @@ -19328,9 +19634,9 @@ "dev": true }, "stackblur-canvas": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.6.0.tgz", - "integrity": "sha512-8S1aIA+UoF6erJYnglGPug6MaHYGo1Ot7h5fuXx4fUPvcvQfcdw2o/ppCse63+eZf8PPidSu4v1JnmEVtEDnpg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", "optional": true }, "statuses": { @@ -19623,9 +19929,9 @@ } }, "tableexport.jquery.plugin": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/tableexport.jquery.plugin/-/tableexport.jquery.plugin-1.28.0.tgz", - "integrity": "sha512-ydDjOhw8A+LOu+801zPXDeMF8MoU1q2HtS2msphCuny0tdXgbXG9GJfA4ll1hBs0ABiAnOaVVZaRuxBmW/qHtw==", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/tableexport.jquery.plugin/-/tableexport.jquery.plugin-1.30.0.tgz", + "integrity": "sha512-kMztiFUsGbxsknFVCDph+5j4e9xmqBBV6Na7T9vRYCUGDxtlndrdxMs9qLJDSOXjlgkIqCUv+S/e5iTUNAFF/g==", "requires": { "file-saver": ">=2.0.4", "html2canvas": ">=1.0.0", @@ -20602,14 +20908,14 @@ } }, "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" } }, "which-module": { diff --git a/package.json b/package.json index f02b78db0b..0526d5370b 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,12 @@ "vue-template-compiler": "2.4.4" }, "dependencies": { - "@fortawesome/fontawesome-free": "^6.5.0", + "@fortawesome/fontawesome-free": "^6.5.2", "acorn": "^8.11.2", "acorn-import-assertions": "^1.9.0", "admin-lte": "^2.4.18", "ajv": "^6.12.6", - "alpinejs": "^3.13.5", + "alpinejs": "3.13.5", "blueimp-file-upload": "^9.34.0", "bootstrap": "^3.4.1", "bootstrap-colorpicker": "^2.5.3", @@ -56,7 +56,8 @@ "papaparse": "^4.3.3", "select2": "4.0.13", "sheetjs": "^2.0.0", - "tableexport.jquery.plugin": "1.28.0", + "signature_pad": "^4.2.0", + "tableexport.jquery.plugin": "1.30.0", "tether": "^1.4.0", "vue-resource": "^1.5.2", "webpack": "^5.90.2" diff --git a/public/css/build/app.css b/public/css/build/app.css index f6e9fd6804..e48198e10f 100644 --- a/public/css/build/app.css +++ b/public/css/build/app.css @@ -697,6 +697,9 @@ body { font-size: 14px; white-space: normal; } +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading { + z-index: 0 !important; +} @media print { a[href]:after { content: none; @@ -878,6 +881,8 @@ th.css-barcode > .th-inner, th.css-license > .th-inner, th.css-consumable > .th-inner, th.css-envelope > .th-inner, +th.css-users > .th-inner, +th.css-location > .th-inner, th.css-accessory > .th-inner { font-size: 0px; line-height: 0.75 !important; @@ -891,6 +896,8 @@ th.css-barcode > .th-inner::before, th.css-license > .th-inner::before, th.css-consumable > .th-inner::before, th.css-envelope > .th-inner::before, +th.css-users > .th-inner::before, +th.css-location > .th-inner::before, th.css-accessory > .th-inner::before { display: inline-block; font-size: 20px; @@ -905,6 +912,7 @@ th.css-padlock > .th-inner::before { font-size: 12px; } /** +BEGIN ICON TABLE HEADERS Set the font-weight css property as 900 (For Solid), 400 (Regular or Brands), 300 (Light for pro icons). **/ th.css-barcode > .th-inner::before { @@ -932,6 +940,17 @@ th.css-accessory > .th-inner::before { font-family: "Font Awesome 5 Free"; font-weight: 400; } +th.css-users > .th-inner::before { + content: "\f0c0"; + font-family: "Font Awesome 5 Free"; + font-size: 15px; +} +th.css-location > .th-inner::before { + content: "\f3c5"; + font-family: "Font Awesome 5 Free"; + font-size: 19px; + margin-bottom: 0px; +} .small-box .inner { padding-left: 15px; padding-right: 15px; @@ -968,6 +987,12 @@ th.css-accessory > .th-inner::before { .sidebar-menu { margin-top: 100px; } + .navbar-custom-menu > .navbar-nav > li.dropdown.user.user-menu { + float: right; + } + .navbar-custom-menu > .navbar-nav > li > .dropdown-menu { + margin-right: -39px; + } } @media screen and (max-width: 1268px) and (min-width: 912px) { .sidebar-menu { @@ -1145,4 +1170,9 @@ input[type="radio"]:checked::before { .datepicker.dropdown-menu { z-index: 1030 !important; } +.sidebar-menu > li .badge { + margin-top: 0px; + filter: brightness(70%); + font-size: 70%; +} diff --git a/public/css/build/overrides.css b/public/css/build/overrides.css index f32d3051dd..402329d6f1 100644 --- a/public/css/build/overrides.css +++ b/public/css/build/overrides.css @@ -330,6 +330,9 @@ body { font-size: 14px; white-space: normal; } +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading { + z-index: 0 !important; +} @media print { a[href]:after { content: none; @@ -511,6 +514,8 @@ th.css-barcode > .th-inner, th.css-license > .th-inner, th.css-consumable > .th-inner, th.css-envelope > .th-inner, +th.css-users > .th-inner, +th.css-location > .th-inner, th.css-accessory > .th-inner { font-size: 0px; line-height: 0.75 !important; @@ -524,6 +529,8 @@ th.css-barcode > .th-inner::before, th.css-license > .th-inner::before, th.css-consumable > .th-inner::before, th.css-envelope > .th-inner::before, +th.css-users > .th-inner::before, +th.css-location > .th-inner::before, th.css-accessory > .th-inner::before { display: inline-block; font-size: 20px; @@ -538,6 +545,7 @@ th.css-padlock > .th-inner::before { font-size: 12px; } /** +BEGIN ICON TABLE HEADERS Set the font-weight css property as 900 (For Solid), 400 (Regular or Brands), 300 (Light for pro icons). **/ th.css-barcode > .th-inner::before { @@ -565,6 +573,17 @@ th.css-accessory > .th-inner::before { font-family: "Font Awesome 5 Free"; font-weight: 400; } +th.css-users > .th-inner::before { + content: "\f0c0"; + font-family: "Font Awesome 5 Free"; + font-size: 15px; +} +th.css-location > .th-inner::before { + content: "\f3c5"; + font-family: "Font Awesome 5 Free"; + font-size: 19px; + margin-bottom: 0px; +} .small-box .inner { padding-left: 15px; padding-right: 15px; @@ -601,6 +620,12 @@ th.css-accessory > .th-inner::before { .sidebar-menu { margin-top: 100px; } + .navbar-custom-menu > .navbar-nav > li.dropdown.user.user-menu { + float: right; + } + .navbar-custom-menu > .navbar-nav > li > .dropdown-menu { + margin-right: -39px; + } } @media screen and (max-width: 1268px) and (min-width: 912px) { .sidebar-menu { @@ -778,4 +803,9 @@ input[type="radio"]:checked::before { .datepicker.dropdown-menu { z-index: 1030 !important; } +.sidebar-menu > li .badge { + margin-top: 0px; + filter: brightness(70%); + font-size: 70%; +} diff --git a/public/css/dist/all.css b/public/css/dist/all.css index 9d7cd1b408..a8bd7025d6 100644 --- a/public/css/dist/all.css +++ b/public/css/dist/all.css @@ -6833,9 +6833,9 @@ button.close { } /*# sourceMappingURL=bootstrap.css.map */ /*! - * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2023 Fonticons, Inc. + * Copyright 2024 Fonticons, Inc. */ .fa { font-family: var(--fa-style-family, "Font Awesome 6 Free"); @@ -7297,8 +7297,8 @@ button.close { transform: scale(-1, -1); } .fa-rotate-by { - -webkit-transform: rotate(var(--fa-rotate-angle, none)); - transform: rotate(var(--fa-rotate-angle, none)); } + -webkit-transform: rotate(var(--fa-rotate-angle, 0)); + transform: rotate(var(--fa-rotate-angle, 0)); } .fa-stack { display: inline-block; @@ -9602,6 +9602,9 @@ readers do not read off random characters that represent icons */ .fa-italic::before { content: "\f033"; } +.fa-table-cells-column-lock::before { + content: "\e678"; } + .fa-church::before { content: "\f51d"; } @@ -11774,6 +11777,9 @@ readers do not read off random characters that represent icons */ .fa-font::before { content: "\f031"; } +.fa-table-cells-row-lock::before { + content: "\e67a"; } + .fa-rupiah-sign::before { content: "\e23d"; } @@ -13315,6 +13321,9 @@ readers do not read off random characters that represent icons */ .fa-drupal:before { content: "\f1a9"; } +.fa-jxl:before { + content: "\e67b"; } + .fa-hire-a-helper:before { content: "\f3b0"; } @@ -13618,6 +13627,9 @@ readers do not read off random characters that represent icons */ .fa-kickstarter:before { content: "\f3bb"; } +.fa-square-kickstarter:before { + content: "\f3bb"; } + .fa-grav:before { content: "\f2d6"; } @@ -14050,6 +14062,9 @@ readers do not read off random characters that represent icons */ .fa-google-plus-square:before { content: "\f0d4"; } +.fa-web-awesome:before { + content: "\e682"; } + .fa-mandalorian:before { content: "\f50f"; } @@ -14212,6 +14227,9 @@ readers do not read off random characters that represent icons */ .fa-xbox:before { content: "\f412"; } +.fa-square-web-awesome-stroke:before { + content: "\e684"; } + .fa-searchengin:before { content: "\f3eb"; } @@ -14320,6 +14338,9 @@ readers do not read off random characters that represent icons */ .fa-whatsapp:before { content: "\f232"; } +.fa-square-upwork:before { + content: "\e67c"; } + .fa-slideshare:before { content: "\f1e7"; } @@ -14398,6 +14419,9 @@ readers do not read off random characters that represent icons */ .fa-sellsy:before { content: "\f213"; } +.fa-square-web-awesome:before { + content: "\e683"; } + .fa-sass:before { content: "\f41e"; } @@ -14434,6 +14458,9 @@ readers do not read off random characters that represent icons */ .fa-waze:before { content: "\f83f"; } +.fa-bluesky:before { + content: "\e671"; } + .fa-cc-jcb:before { content: "\f24b"; } @@ -22197,6 +22224,9 @@ body { font-size: 14px; white-space: normal; } +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading { + z-index: 0 !important; +} @media print { a[href]:after { content: none; @@ -22378,6 +22408,8 @@ th.css-barcode > .th-inner, th.css-license > .th-inner, th.css-consumable > .th-inner, th.css-envelope > .th-inner, +th.css-users > .th-inner, +th.css-location > .th-inner, th.css-accessory > .th-inner { font-size: 0px; line-height: 0.75 !important; @@ -22391,6 +22423,8 @@ th.css-barcode > .th-inner::before, th.css-license > .th-inner::before, th.css-consumable > .th-inner::before, th.css-envelope > .th-inner::before, +th.css-users > .th-inner::before, +th.css-location > .th-inner::before, th.css-accessory > .th-inner::before { display: inline-block; font-size: 20px; @@ -22405,6 +22439,7 @@ th.css-padlock > .th-inner::before { font-size: 12px; } /** +BEGIN ICON TABLE HEADERS Set the font-weight css property as 900 (For Solid), 400 (Regular or Brands), 300 (Light for pro icons). **/ th.css-barcode > .th-inner::before { @@ -22432,6 +22467,17 @@ th.css-accessory > .th-inner::before { font-family: "Font Awesome 5 Free"; font-weight: 400; } +th.css-users > .th-inner::before { + content: "\f0c0"; + font-family: "Font Awesome 5 Free"; + font-size: 15px; +} +th.css-location > .th-inner::before { + content: "\f3c5"; + font-family: "Font Awesome 5 Free"; + font-size: 19px; + margin-bottom: 0px; +} .small-box .inner { padding-left: 15px; padding-right: 15px; @@ -22468,6 +22514,12 @@ th.css-accessory > .th-inner::before { .sidebar-menu { margin-top: 100px; } + .navbar-custom-menu > .navbar-nav > li.dropdown.user.user-menu { + float: right; + } + .navbar-custom-menu > .navbar-nav > li > .dropdown-menu { + margin-right: -39px; + } } @media screen and (max-width: 1268px) and (min-width: 912px) { .sidebar-menu { @@ -22645,6 +22697,11 @@ input[type="radio"]:checked::before { .datepicker.dropdown-menu { z-index: 1030 !important; } +.sidebar-menu > li .badge { + margin-top: 0px; + filter: brightness(70%); + font-size: 70%; +} .select2-container { @@ -23461,6 +23518,9 @@ body { font-size: 14px; white-space: normal; } +.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading { + z-index: 0 !important; +} @media print { a[href]:after { content: none; @@ -23642,6 +23702,8 @@ th.css-barcode > .th-inner, th.css-license > .th-inner, th.css-consumable > .th-inner, th.css-envelope > .th-inner, +th.css-users > .th-inner, +th.css-location > .th-inner, th.css-accessory > .th-inner { font-size: 0px; line-height: 0.75 !important; @@ -23655,6 +23717,8 @@ th.css-barcode > .th-inner::before, th.css-license > .th-inner::before, th.css-consumable > .th-inner::before, th.css-envelope > .th-inner::before, +th.css-users > .th-inner::before, +th.css-location > .th-inner::before, th.css-accessory > .th-inner::before { display: inline-block; font-size: 20px; @@ -23669,6 +23733,7 @@ th.css-padlock > .th-inner::before { font-size: 12px; } /** +BEGIN ICON TABLE HEADERS Set the font-weight css property as 900 (For Solid), 400 (Regular or Brands), 300 (Light for pro icons). **/ th.css-barcode > .th-inner::before { @@ -23696,6 +23761,17 @@ th.css-accessory > .th-inner::before { font-family: "Font Awesome 5 Free"; font-weight: 400; } +th.css-users > .th-inner::before { + content: "\f0c0"; + font-family: "Font Awesome 5 Free"; + font-size: 15px; +} +th.css-location > .th-inner::before { + content: "\f3c5"; + font-family: "Font Awesome 5 Free"; + font-size: 19px; + margin-bottom: 0px; +} .small-box .inner { padding-left: 15px; padding-right: 15px; @@ -23732,6 +23808,12 @@ th.css-accessory > .th-inner::before { .sidebar-menu { margin-top: 100px; } + .navbar-custom-menu > .navbar-nav > li.dropdown.user.user-menu { + float: right; + } + .navbar-custom-menu > .navbar-nav > li > .dropdown-menu { + margin-right: -39px; + } } @media screen and (max-width: 1268px) and (min-width: 912px) { .sidebar-menu { @@ -23909,4 +23991,9 @@ input[type="radio"]:checked::before { .datepicker.dropdown-menu { z-index: 1030 !important; } +.sidebar-menu > li .badge { + margin-top: 0px; + filter: brightness(70%); + font-size: 70%; +} diff --git a/public/css/dist/skins/skin-black-dark.css b/public/css/dist/skins/skin-black-dark.css index f12332df6d..bff2a825db 100644 --- a/public/css/dist/skins/skin-black-dark.css +++ b/public/css/dist/skins/skin-black-dark.css @@ -141,7 +141,7 @@ .btn .btn-primary:link, .btn:hover .btn-primary:link { background-color: #000000; - border-color: #000000; + border-color: #FFF; color: #fff; } .btna.btn-primary:hover, @@ -462,7 +462,10 @@ input[type=search] { color: var(--text-main); } .skin-black-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-black-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #000000; } .fixed-table-body thead th .th-inner, .skin-black-dark .sidebar-menu > li.active > a, diff --git a/public/css/dist/skins/skin-black-dark.min.css b/public/css/dist/skins/skin-black-dark.min.css index f12332df6d..bff2a825db 100644 --- a/public/css/dist/skins/skin-black-dark.min.css +++ b/public/css/dist/skins/skin-black-dark.min.css @@ -141,7 +141,7 @@ .btn .btn-primary:link, .btn:hover .btn-primary:link { background-color: #000000; - border-color: #000000; + border-color: #FFF; color: #fff; } .btna.btn-primary:hover, @@ -462,7 +462,10 @@ input[type=search] { color: var(--text-main); } .skin-black-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-black-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #000000; } .fixed-table-body thead th .th-inner, .skin-black-dark .sidebar-menu > li.active > a, diff --git a/public/css/dist/skins/skin-blue-dark.css b/public/css/dist/skins/skin-blue-dark.css index c4f2672931..eca722dac4 100644 --- a/public/css/dist/skins/skin-blue-dark.css +++ b/public/css/dist/skins/skin-blue-dark.css @@ -310,7 +310,6 @@ body { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link) !important; } #componentsTable > tbody > tr > td > nobr > a > i.fa { color: var(--text-main); @@ -444,7 +443,10 @@ input[type=search] { color: var(--text-main); } .skin-blue-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-blue-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #3c8dbc; } .fixed-table-body thead th .th-inner, .skin-blue-dark .sidebar-menu > li.active > a, diff --git a/public/css/dist/skins/skin-blue-dark.min.css b/public/css/dist/skins/skin-blue-dark.min.css index c4f2672931..eca722dac4 100644 --- a/public/css/dist/skins/skin-blue-dark.min.css +++ b/public/css/dist/skins/skin-blue-dark.min.css @@ -310,7 +310,6 @@ body { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link) !important; } #componentsTable > tbody > tr > td > nobr > a > i.fa { color: var(--text-main); @@ -444,7 +443,10 @@ input[type=search] { color: var(--text-main); } .skin-blue-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-blue-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #3c8dbc; } .fixed-table-body thead th .th-inner, .skin-blue-dark .sidebar-menu > li.active > a, diff --git a/public/css/dist/skins/skin-green-dark.css b/public/css/dist/skins/skin-green-dark.css index e024040c4e..7681a2021e 100644 --- a/public/css/dist/skins/skin-green-dark.css +++ b/public/css/dist/skins/skin-green-dark.css @@ -301,7 +301,6 @@ body { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link) !important; } #componentsTable > tbody > tr > td > nobr > a > i.fa { color: var(--text-main); @@ -431,7 +430,10 @@ input[type=search] { color: var(--text-main); } .skin-green-dark .main-header .navbar .dropdown-menu li a { - color: var(--link); + color: #FFFFFF; +} +.skin-green-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #006300; } .fixed-table-body thead th .th-inner, .skin-green-dark .sidebar-menu > li.active > a, diff --git a/public/css/dist/skins/skin-green-dark.min.css b/public/css/dist/skins/skin-green-dark.min.css index e024040c4e..7681a2021e 100644 --- a/public/css/dist/skins/skin-green-dark.min.css +++ b/public/css/dist/skins/skin-green-dark.min.css @@ -301,7 +301,6 @@ body { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link) !important; } #componentsTable > tbody > tr > td > nobr > a > i.fa { color: var(--text-main); @@ -431,7 +430,10 @@ input[type=search] { color: var(--text-main); } .skin-green-dark .main-header .navbar .dropdown-menu li a { - color: var(--link); + color: #FFFFFF; +} +.skin-green-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #006300; } .fixed-table-body thead th .th-inner, .skin-green-dark .sidebar-menu > li.active > a, diff --git a/public/css/dist/skins/skin-orange-dark.css b/public/css/dist/skins/skin-orange-dark.css index 1ec2c0701a..40b1ae0b66 100644 --- a/public/css/dist/skins/skin-orange-dark.css +++ b/public/css/dist/skins/skin-orange-dark.css @@ -311,7 +311,6 @@ a:link.btn-default { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link) !important; } #componentsTable > tbody > tr > td > nobr > a > i.fa { color: var(--text-main); @@ -445,7 +444,10 @@ input[type=search] { color: var(--text-main); } .skin-orange-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-orange-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #ff8c00; } .fixed-table-body thead th .th-inner, .skin-orange-dark .sidebar-menu > li.active > a, diff --git a/public/css/dist/skins/skin-orange-dark.min.css b/public/css/dist/skins/skin-orange-dark.min.css index 1ec2c0701a..40b1ae0b66 100644 --- a/public/css/dist/skins/skin-orange-dark.min.css +++ b/public/css/dist/skins/skin-orange-dark.min.css @@ -311,7 +311,6 @@ a:link.btn-default { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link) !important; } #componentsTable > tbody > tr > td > nobr > a > i.fa { color: var(--text-main); @@ -445,7 +444,10 @@ input[type=search] { color: var(--text-main); } .skin-orange-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-orange-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #ff8c00; } .fixed-table-body thead th .th-inner, .skin-orange-dark .sidebar-menu > li.active > a, diff --git a/public/css/dist/skins/skin-purple-dark.css b/public/css/dist/skins/skin-purple-dark.css index cec9819d7d..60753281a8 100644 --- a/public/css/dist/skins/skin-purple-dark.css +++ b/public/css/dist/skins/skin-purple-dark.css @@ -311,7 +311,6 @@ body { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link) !important; } #componentsTable > tbody > tr > td > nobr > a > i.fa { color: var(--text-main); @@ -445,7 +444,10 @@ input[type=search] { color: var(--text-main); } .skin-purple-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-purple-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #5f5ca8; } .fixed-table-body thead th .th-inner, .skin-purple-dark .sidebar-menu > li.active > a, diff --git a/public/css/dist/skins/skin-purple-dark.min.css b/public/css/dist/skins/skin-purple-dark.min.css index cec9819d7d..60753281a8 100644 --- a/public/css/dist/skins/skin-purple-dark.min.css +++ b/public/css/dist/skins/skin-purple-dark.min.css @@ -311,7 +311,6 @@ body { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link) !important; } #componentsTable > tbody > tr > td > nobr > a > i.fa { color: var(--text-main); @@ -445,7 +444,10 @@ input[type=search] { color: var(--text-main); } .skin-purple-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-purple-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #5f5ca8; } .fixed-table-body thead th .th-inner, .skin-purple-dark .sidebar-menu > li.active > a, diff --git a/public/css/dist/skins/skin-red-dark.css b/public/css/dist/skins/skin-red-dark.css index 17d495cbbb..56fd0897e8 100644 --- a/public/css/dist/skins/skin-red-dark.css +++ b/public/css/dist/skins/skin-red-dark.css @@ -310,7 +310,6 @@ body { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link) !important; } #componentsTable > tbody > tr > td > nobr > a > i.fa { color: var(--text-main); @@ -444,7 +443,10 @@ input[type=search] { color: var(--text-main); } .skin-red-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-red-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #c23320; } .fixed-table-body thead th .th-inner, .skin-red-dark .sidebar-menu > li.active > a, diff --git a/public/css/dist/skins/skin-red-dark.min.css b/public/css/dist/skins/skin-red-dark.min.css index 17d495cbbb..56fd0897e8 100644 --- a/public/css/dist/skins/skin-red-dark.min.css +++ b/public/css/dist/skins/skin-red-dark.min.css @@ -310,7 +310,6 @@ body { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link) !important; } #componentsTable > tbody > tr > td > nobr > a > i.fa { color: var(--text-main); @@ -444,7 +443,10 @@ input[type=search] { color: var(--text-main); } .skin-red-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-red-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #c23320; } .fixed-table-body thead th .th-inner, .skin-red-dark .sidebar-menu > li.active > a, diff --git a/public/css/dist/skins/skin-yellow-dark.css b/public/css/dist/skins/skin-yellow-dark.css index 09babaa6ab..c414a98ae6 100644 --- a/public/css/dist/skins/skin-yellow-dark.css +++ b/public/css/dist/skins/skin-yellow-dark.css @@ -106,7 +106,7 @@ .btn .btn-primary:link, .btn:hover .btn-primary:link { background-color: var(--button-default); - border-color: var(--button-default); + border-color: #000000; color: #545454; } .btna.btn-primary:hover, @@ -423,8 +423,11 @@ input[type=search] { .skin-yellow-dark .main-header .navbar .dropdown-menu li a { color: var(--header); } +.skin-yellow-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #000000; +} tr th div.th-inner { - color: var(--text-main); + color: #FFFFFF; } .tab-content, .tab-pane { diff --git a/public/css/dist/skins/skin-yellow-dark.min.css b/public/css/dist/skins/skin-yellow-dark.min.css index 09babaa6ab..c414a98ae6 100644 --- a/public/css/dist/skins/skin-yellow-dark.min.css +++ b/public/css/dist/skins/skin-yellow-dark.min.css @@ -106,7 +106,7 @@ .btn .btn-primary:link, .btn:hover .btn-primary:link { background-color: var(--button-default); - border-color: var(--button-default); + border-color: #000000; color: #545454; } .btna.btn-primary:hover, @@ -423,8 +423,11 @@ input[type=search] { .skin-yellow-dark .main-header .navbar .dropdown-menu li a { color: var(--header); } +.skin-yellow-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #000000; +} tr th div.th-inner { - color: var(--text-main); + color: #FFFFFF; } .tab-content, .tab-pane { diff --git a/public/css/webfonts/fa-brands-400.ttf b/public/css/webfonts/fa-brands-400.ttf index 5efb1d4f96..1fbb1f7c32 100644 Binary files a/public/css/webfonts/fa-brands-400.ttf and b/public/css/webfonts/fa-brands-400.ttf differ diff --git a/public/css/webfonts/fa-brands-400.woff2 b/public/css/webfonts/fa-brands-400.woff2 index 36fbda7d33..5d28021697 100644 Binary files a/public/css/webfonts/fa-brands-400.woff2 and b/public/css/webfonts/fa-brands-400.woff2 differ diff --git a/public/css/webfonts/fa-regular-400.ttf b/public/css/webfonts/fa-regular-400.ttf index 838b4e2cfe..549d68dc02 100644 Binary files a/public/css/webfonts/fa-regular-400.ttf and b/public/css/webfonts/fa-regular-400.ttf differ diff --git a/public/css/webfonts/fa-regular-400.woff2 b/public/css/webfonts/fa-regular-400.woff2 index b6cabbacb6..18400d7fad 100644 Binary files a/public/css/webfonts/fa-regular-400.woff2 and b/public/css/webfonts/fa-regular-400.woff2 differ diff --git a/public/css/webfonts/fa-solid-900.ttf b/public/css/webfonts/fa-solid-900.ttf index ec24749db9..bb2a869565 100644 Binary files a/public/css/webfonts/fa-solid-900.ttf and b/public/css/webfonts/fa-solid-900.ttf differ diff --git a/public/css/webfonts/fa-solid-900.woff2 b/public/css/webfonts/fa-solid-900.woff2 index 824d518eb4..758dd4f607 100644 Binary files a/public/css/webfonts/fa-solid-900.woff2 and b/public/css/webfonts/fa-solid-900.woff2 differ diff --git a/public/css/webfonts/fa-v4compatibility.ttf b/public/css/webfonts/fa-v4compatibility.ttf index b175aa8ece..8c5864c42f 100644 Binary files a/public/css/webfonts/fa-v4compatibility.ttf and b/public/css/webfonts/fa-v4compatibility.ttf differ diff --git a/public/css/webfonts/fa-v4compatibility.woff2 b/public/css/webfonts/fa-v4compatibility.woff2 index e09b5a5500..f94bec2275 100644 Binary files a/public/css/webfonts/fa-v4compatibility.woff2 and b/public/css/webfonts/fa-v4compatibility.woff2 differ diff --git a/public/js/dist/bootstrap-table.js b/public/js/dist/bootstrap-table.js index 7d45dced5d..ba97c0639f 100644 --- a/public/js/dist/bootstrap-table.js +++ b/public/js/dist/bootstrap-table.js @@ -8941,2137 +8941,6 @@ })); -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) : - typeof define === 'function' && define.amd ? define(['jquery'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jQuery)); -})(this, (function ($$6) { 'use strict'; - - function _iterableToArrayLimit(arr, i) { - var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; - if (null != _i) { - var _s, - _e, - _x, - _r, - _arr = [], - _n = !0, - _d = !1; - try { - if (_x = (_i = _i.call(arr)).next, 0 === i) { - if (Object(_i) !== _i) return; - _n = !1; - } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); - } catch (err) { - _d = !0, _e = err; - } finally { - try { - if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; - } finally { - if (_d) throw _e; - } - } - return _arr; - } - } - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); - } - } - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; - } - function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - writable: true, - configurable: true - } - }); - Object.defineProperty(subClass, "prototype", { - writable: false - }); - if (superClass) _setPrototypeOf(subClass, superClass); - } - function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - return _getPrototypeOf(o); - } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - return _setPrototypeOf(o, p); - } - function _isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) return false; - if (Reflect.construct.sham) return false; - if (typeof Proxy === "function") return true; - try { - Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); - return true; - } catch (e) { - return false; - } - } - function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - return self; - } - function _possibleConstructorReturn(self, call) { - if (call && (typeof call === "object" || typeof call === "function")) { - return call; - } else if (call !== void 0) { - throw new TypeError("Derived constructors may only return object or undefined"); - } - return _assertThisInitialized(self); - } - function _createSuper(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), - result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; - } - function _superPropBase(object, property) { - while (!Object.prototype.hasOwnProperty.call(object, property)) { - object = _getPrototypeOf(object); - if (object === null) break; - } - return object; - } - function _get() { - if (typeof Reflect !== "undefined" && Reflect.get) { - _get = Reflect.get.bind(); - } else { - _get = function _get(target, property, receiver) { - var base = _superPropBase(target, property); - if (!base) return; - var desc = Object.getOwnPropertyDescriptor(base, property); - if (desc.get) { - return desc.get.call(arguments.length < 3 ? target : receiver); - } - return desc.value; - }; - } - return _get.apply(this, arguments); - } - function _slicedToArray(arr, i) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); - } - function _arrayWithHoles(arr) { - if (Array.isArray(arr)) return arr; - } - function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); - } - function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - return arr2; - } - function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - function _toPrimitive(input, hint) { - if (typeof input !== "object" || input === null) return input; - var prim = input[Symbol.toPrimitive]; - if (prim !== undefined) { - var res = prim.call(input, hint || "default"); - if (typeof res !== "object") return res; - throw new TypeError("@@toPrimitive must return a primitive value."); - } - return (hint === "string" ? String : Number)(input); - } - function _toPropertyKey(arg) { - var key = _toPrimitive(arg, "string"); - return typeof key === "symbol" ? key : String(key); - } - - var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - var check = function (it) { - return it && it.Math == Math && it; - }; - - // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 - var global$b = - // eslint-disable-next-line es/no-global-this -- safe - check(typeof globalThis == 'object' && globalThis) || - check(typeof window == 'object' && window) || - // eslint-disable-next-line no-restricted-globals -- safe - check(typeof self == 'object' && self) || - check(typeof commonjsGlobal == 'object' && commonjsGlobal) || - // eslint-disable-next-line no-new-func -- fallback - (function () { return this; })() || Function('return this')(); - - var objectGetOwnPropertyDescriptor = {}; - - var fails$d = function (exec) { - try { - return !!exec(); - } catch (error) { - return true; - } - }; - - var fails$c = fails$d; - - // Detect IE8's incomplete defineProperty implementation - var descriptors = !fails$c(function () { - // eslint-disable-next-line es/no-object-defineproperty -- required for testing - return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; - }); - - var fails$b = fails$d; - - var functionBindNative = !fails$b(function () { - // eslint-disable-next-line es/no-function-prototype-bind -- safe - var test = (function () { /* empty */ }).bind(); - // eslint-disable-next-line no-prototype-builtins -- safe - return typeof test != 'function' || test.hasOwnProperty('prototype'); - }); - - var NATIVE_BIND$2 = functionBindNative; - - var call$5 = Function.prototype.call; - - var functionCall = NATIVE_BIND$2 ? call$5.bind(call$5) : function () { - return call$5.apply(call$5, arguments); - }; - - var objectPropertyIsEnumerable = {}; - - var $propertyIsEnumerable$1 = {}.propertyIsEnumerable; - // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe - var getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor; - - // Nashorn ~ JDK8 bug - var NASHORN_BUG = getOwnPropertyDescriptor$1 && !$propertyIsEnumerable$1.call({ 1: 2 }, 1); - - // `Object.prototype.propertyIsEnumerable` method implementation - // https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable - objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) { - var descriptor = getOwnPropertyDescriptor$1(this, V); - return !!descriptor && descriptor.enumerable; - } : $propertyIsEnumerable$1; - - var createPropertyDescriptor$3 = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; - }; - - var NATIVE_BIND$1 = functionBindNative; - - var FunctionPrototype$1 = Function.prototype; - var call$4 = FunctionPrototype$1.call; - var uncurryThisWithBind = NATIVE_BIND$1 && FunctionPrototype$1.bind.bind(call$4, call$4); - - var functionUncurryThis = NATIVE_BIND$1 ? uncurryThisWithBind : function (fn) { - return function () { - return call$4.apply(fn, arguments); - }; - }; - - var uncurryThis$g = functionUncurryThis; - - var toString$5 = uncurryThis$g({}.toString); - var stringSlice$1 = uncurryThis$g(''.slice); - - var classofRaw$2 = function (it) { - return stringSlice$1(toString$5(it), 8, -1); - }; - - var uncurryThis$f = functionUncurryThis; - var fails$a = fails$d; - var classof$5 = classofRaw$2; - - var $Object$3 = Object; - var split = uncurryThis$f(''.split); - - // fallback for non-array-like ES3 and non-enumerable old V8 strings - var indexedObject = fails$a(function () { - // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 - // eslint-disable-next-line no-prototype-builtins -- safe - return !$Object$3('z').propertyIsEnumerable(0); - }) ? function (it) { - return classof$5(it) == 'String' ? split(it, '') : $Object$3(it); - } : $Object$3; - - // we can't use just `it == null` since of `document.all` special case - // https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec - var isNullOrUndefined$2 = function (it) { - return it === null || it === undefined; - }; - - var isNullOrUndefined$1 = isNullOrUndefined$2; - - var $TypeError$6 = TypeError; - - // `RequireObjectCoercible` abstract operation - // https://tc39.es/ecma262/#sec-requireobjectcoercible - var requireObjectCoercible$3 = function (it) { - if (isNullOrUndefined$1(it)) throw $TypeError$6("Can't call method on " + it); - return it; - }; - - // toObject with fallback for non-array-like ES3 strings - var IndexedObject$2 = indexedObject; - var requireObjectCoercible$2 = requireObjectCoercible$3; - - var toIndexedObject$5 = function (it) { - return IndexedObject$2(requireObjectCoercible$2(it)); - }; - - var documentAll$2 = typeof document == 'object' && document.all; - - // https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot - // eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing - var IS_HTMLDDA = typeof documentAll$2 == 'undefined' && documentAll$2 !== undefined; - - var documentAll_1 = { - all: documentAll$2, - IS_HTMLDDA: IS_HTMLDDA - }; - - var $documentAll$1 = documentAll_1; - - var documentAll$1 = $documentAll$1.all; - - // `IsCallable` abstract operation - // https://tc39.es/ecma262/#sec-iscallable - var isCallable$c = $documentAll$1.IS_HTMLDDA ? function (argument) { - return typeof argument == 'function' || argument === documentAll$1; - } : function (argument) { - return typeof argument == 'function'; - }; - - var isCallable$b = isCallable$c; - var $documentAll = documentAll_1; - - var documentAll = $documentAll.all; - - var isObject$7 = $documentAll.IS_HTMLDDA ? function (it) { - return typeof it == 'object' ? it !== null : isCallable$b(it) || it === documentAll; - } : function (it) { - return typeof it == 'object' ? it !== null : isCallable$b(it); - }; - - var global$a = global$b; - var isCallable$a = isCallable$c; - - var aFunction = function (argument) { - return isCallable$a(argument) ? argument : undefined; - }; - - var getBuiltIn$4 = function (namespace, method) { - return arguments.length < 2 ? aFunction(global$a[namespace]) : global$a[namespace] && global$a[namespace][method]; - }; - - var uncurryThis$e = functionUncurryThis; - - var objectIsPrototypeOf = uncurryThis$e({}.isPrototypeOf); - - var engineUserAgent = typeof navigator != 'undefined' && String(navigator.userAgent) || ''; - - var global$9 = global$b; - var userAgent = engineUserAgent; - - var process = global$9.process; - var Deno = global$9.Deno; - var versions = process && process.versions || Deno && Deno.version; - var v8 = versions && versions.v8; - var match, version; - - if (v8) { - match = v8.split('.'); - // in old Chrome, versions of V8 isn't V8 = Chrome / 10 - // but their correct versions are not interesting for us - version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); - } - - // BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` - // so check `userAgent` even if `.v8` exists, but 0 - if (!version && userAgent) { - match = userAgent.match(/Edge\/(\d+)/); - if (!match || match[1] >= 74) { - match = userAgent.match(/Chrome\/(\d+)/); - if (match) version = +match[1]; - } - } - - var engineV8Version = version; - - /* eslint-disable es/no-symbol -- required for testing */ - - var V8_VERSION$2 = engineV8Version; - var fails$9 = fails$d; - - // eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing - var symbolConstructorDetection = !!Object.getOwnPropertySymbols && !fails$9(function () { - var symbol = Symbol(); - // Chrome 38 Symbol has incorrect toString conversion - // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances - return !String(symbol) || !(Object(symbol) instanceof Symbol) || - // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances - !Symbol.sham && V8_VERSION$2 && V8_VERSION$2 < 41; - }); - - /* eslint-disable es/no-symbol -- required for testing */ - - var NATIVE_SYMBOL$1 = symbolConstructorDetection; - - var useSymbolAsUid = NATIVE_SYMBOL$1 - && !Symbol.sham - && typeof Symbol.iterator == 'symbol'; - - var getBuiltIn$3 = getBuiltIn$4; - var isCallable$9 = isCallable$c; - var isPrototypeOf = objectIsPrototypeOf; - var USE_SYMBOL_AS_UID$1 = useSymbolAsUid; - - var $Object$2 = Object; - - var isSymbol$2 = USE_SYMBOL_AS_UID$1 ? function (it) { - return typeof it == 'symbol'; - } : function (it) { - var $Symbol = getBuiltIn$3('Symbol'); - return isCallable$9($Symbol) && isPrototypeOf($Symbol.prototype, $Object$2(it)); - }; - - var $String$3 = String; - - var tryToString$1 = function (argument) { - try { - return $String$3(argument); - } catch (error) { - return 'Object'; - } - }; - - var isCallable$8 = isCallable$c; - var tryToString = tryToString$1; - - var $TypeError$5 = TypeError; - - // `Assert: IsCallable(argument) is true` - var aCallable$2 = function (argument) { - if (isCallable$8(argument)) return argument; - throw $TypeError$5(tryToString(argument) + ' is not a function'); - }; - - var aCallable$1 = aCallable$2; - var isNullOrUndefined = isNullOrUndefined$2; - - // `GetMethod` abstract operation - // https://tc39.es/ecma262/#sec-getmethod - var getMethod$1 = function (V, P) { - var func = V[P]; - return isNullOrUndefined(func) ? undefined : aCallable$1(func); - }; - - var call$3 = functionCall; - var isCallable$7 = isCallable$c; - var isObject$6 = isObject$7; - - var $TypeError$4 = TypeError; - - // `OrdinaryToPrimitive` abstract operation - // https://tc39.es/ecma262/#sec-ordinarytoprimitive - var ordinaryToPrimitive$1 = function (input, pref) { - var fn, val; - if (pref === 'string' && isCallable$7(fn = input.toString) && !isObject$6(val = call$3(fn, input))) return val; - if (isCallable$7(fn = input.valueOf) && !isObject$6(val = call$3(fn, input))) return val; - if (pref !== 'string' && isCallable$7(fn = input.toString) && !isObject$6(val = call$3(fn, input))) return val; - throw $TypeError$4("Can't convert object to primitive value"); - }; - - var sharedExports = {}; - var shared$3 = { - get exports(){ return sharedExports; }, - set exports(v){ sharedExports = v; }, - }; - - var global$8 = global$b; - - // eslint-disable-next-line es/no-object-defineproperty -- safe - var defineProperty$3 = Object.defineProperty; - - var defineGlobalProperty$3 = function (key, value) { - try { - defineProperty$3(global$8, key, { value: value, configurable: true, writable: true }); - } catch (error) { - global$8[key] = value; - } return value; - }; - - var global$7 = global$b; - var defineGlobalProperty$2 = defineGlobalProperty$3; - - var SHARED = '__core-js_shared__'; - var store$3 = global$7[SHARED] || defineGlobalProperty$2(SHARED, {}); - - var sharedStore = store$3; - - var store$2 = sharedStore; - - (shared$3.exports = function (key, value) { - return store$2[key] || (store$2[key] = value !== undefined ? value : {}); - })('versions', []).push({ - version: '3.29.0', - mode: 'global', - copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)', - license: 'https://github.com/zloirock/core-js/blob/v3.29.0/LICENSE', - source: 'https://github.com/zloirock/core-js' - }); - - var requireObjectCoercible$1 = requireObjectCoercible$3; - - var $Object$1 = Object; - - // `ToObject` abstract operation - // https://tc39.es/ecma262/#sec-toobject - var toObject$4 = function (argument) { - return $Object$1(requireObjectCoercible$1(argument)); - }; - - var uncurryThis$d = functionUncurryThis; - var toObject$3 = toObject$4; - - var hasOwnProperty = uncurryThis$d({}.hasOwnProperty); - - // `HasOwnProperty` abstract operation - // https://tc39.es/ecma262/#sec-hasownproperty - // eslint-disable-next-line es/no-object-hasown -- safe - var hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) { - return hasOwnProperty(toObject$3(it), key); - }; - - var uncurryThis$c = functionUncurryThis; - - var id = 0; - var postfix = Math.random(); - var toString$4 = uncurryThis$c(1.0.toString); - - var uid$2 = function (key) { - return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$4(++id + postfix, 36); - }; - - var global$6 = global$b; - var shared$2 = sharedExports; - var hasOwn$6 = hasOwnProperty_1; - var uid$1 = uid$2; - var NATIVE_SYMBOL = symbolConstructorDetection; - var USE_SYMBOL_AS_UID = useSymbolAsUid; - - var Symbol$2 = global$6.Symbol; - var WellKnownSymbolsStore = shared$2('wks'); - var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol$2['for'] || Symbol$2 : Symbol$2 && Symbol$2.withoutSetter || uid$1; - - var wellKnownSymbol$7 = function (name) { - if (!hasOwn$6(WellKnownSymbolsStore, name)) { - WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn$6(Symbol$2, name) - ? Symbol$2[name] - : createWellKnownSymbol('Symbol.' + name); - } return WellKnownSymbolsStore[name]; - }; - - var call$2 = functionCall; - var isObject$5 = isObject$7; - var isSymbol$1 = isSymbol$2; - var getMethod = getMethod$1; - var ordinaryToPrimitive = ordinaryToPrimitive$1; - var wellKnownSymbol$6 = wellKnownSymbol$7; - - var $TypeError$3 = TypeError; - var TO_PRIMITIVE = wellKnownSymbol$6('toPrimitive'); - - // `ToPrimitive` abstract operation - // https://tc39.es/ecma262/#sec-toprimitive - var toPrimitive$1 = function (input, pref) { - if (!isObject$5(input) || isSymbol$1(input)) return input; - var exoticToPrim = getMethod(input, TO_PRIMITIVE); - var result; - if (exoticToPrim) { - if (pref === undefined) pref = 'default'; - result = call$2(exoticToPrim, input, pref); - if (!isObject$5(result) || isSymbol$1(result)) return result; - throw $TypeError$3("Can't convert object to primitive value"); - } - if (pref === undefined) pref = 'number'; - return ordinaryToPrimitive(input, pref); - }; - - var toPrimitive = toPrimitive$1; - var isSymbol = isSymbol$2; - - // `ToPropertyKey` abstract operation - // https://tc39.es/ecma262/#sec-topropertykey - var toPropertyKey$3 = function (argument) { - var key = toPrimitive(argument, 'string'); - return isSymbol(key) ? key : key + ''; - }; - - var global$5 = global$b; - var isObject$4 = isObject$7; - - var document$1 = global$5.document; - // typeof document.createElement is 'object' in old IE - var EXISTS$1 = isObject$4(document$1) && isObject$4(document$1.createElement); - - var documentCreateElement$1 = function (it) { - return EXISTS$1 ? document$1.createElement(it) : {}; - }; - - var DESCRIPTORS$9 = descriptors; - var fails$8 = fails$d; - var createElement = documentCreateElement$1; - - // Thanks to IE8 for its funny defineProperty - var ie8DomDefine = !DESCRIPTORS$9 && !fails$8(function () { - // eslint-disable-next-line es/no-object-defineproperty -- required for testing - return Object.defineProperty(createElement('div'), 'a', { - get: function () { return 7; } - }).a != 7; - }); - - var DESCRIPTORS$8 = descriptors; - var call$1 = functionCall; - var propertyIsEnumerableModule$1 = objectPropertyIsEnumerable; - var createPropertyDescriptor$2 = createPropertyDescriptor$3; - var toIndexedObject$4 = toIndexedObject$5; - var toPropertyKey$2 = toPropertyKey$3; - var hasOwn$5 = hasOwnProperty_1; - var IE8_DOM_DEFINE$1 = ie8DomDefine; - - // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe - var $getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor; - - // `Object.getOwnPropertyDescriptor` method - // https://tc39.es/ecma262/#sec-object.getownpropertydescriptor - objectGetOwnPropertyDescriptor.f = DESCRIPTORS$8 ? $getOwnPropertyDescriptor$1 : function getOwnPropertyDescriptor(O, P) { - O = toIndexedObject$4(O); - P = toPropertyKey$2(P); - if (IE8_DOM_DEFINE$1) try { - return $getOwnPropertyDescriptor$1(O, P); - } catch (error) { /* empty */ } - if (hasOwn$5(O, P)) return createPropertyDescriptor$2(!call$1(propertyIsEnumerableModule$1.f, O, P), O[P]); - }; - - var objectDefineProperty = {}; - - var DESCRIPTORS$7 = descriptors; - var fails$7 = fails$d; - - // V8 ~ Chrome 36- - // https://bugs.chromium.org/p/v8/issues/detail?id=3334 - var v8PrototypeDefineBug = DESCRIPTORS$7 && fails$7(function () { - // eslint-disable-next-line es/no-object-defineproperty -- required for testing - return Object.defineProperty(function () { /* empty */ }, 'prototype', { - value: 42, - writable: false - }).prototype != 42; - }); - - var isObject$3 = isObject$7; - - var $String$2 = String; - var $TypeError$2 = TypeError; - - // `Assert: Type(argument) is Object` - var anObject$4 = function (argument) { - if (isObject$3(argument)) return argument; - throw $TypeError$2($String$2(argument) + ' is not an object'); - }; - - var DESCRIPTORS$6 = descriptors; - var IE8_DOM_DEFINE = ie8DomDefine; - var V8_PROTOTYPE_DEFINE_BUG$1 = v8PrototypeDefineBug; - var anObject$3 = anObject$4; - var toPropertyKey$1 = toPropertyKey$3; - - var $TypeError$1 = TypeError; - // eslint-disable-next-line es/no-object-defineproperty -- safe - var $defineProperty = Object.defineProperty; - // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe - var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - var ENUMERABLE = 'enumerable'; - var CONFIGURABLE$1 = 'configurable'; - var WRITABLE = 'writable'; - - // `Object.defineProperty` method - // https://tc39.es/ecma262/#sec-object.defineproperty - objectDefineProperty.f = DESCRIPTORS$6 ? V8_PROTOTYPE_DEFINE_BUG$1 ? function defineProperty(O, P, Attributes) { - anObject$3(O); - P = toPropertyKey$1(P); - anObject$3(Attributes); - if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { - var current = $getOwnPropertyDescriptor(O, P); - if (current && current[WRITABLE]) { - O[P] = Attributes.value; - Attributes = { - configurable: CONFIGURABLE$1 in Attributes ? Attributes[CONFIGURABLE$1] : current[CONFIGURABLE$1], - enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], - writable: false - }; - } - } return $defineProperty(O, P, Attributes); - } : $defineProperty : function defineProperty(O, P, Attributes) { - anObject$3(O); - P = toPropertyKey$1(P); - anObject$3(Attributes); - if (IE8_DOM_DEFINE) try { - return $defineProperty(O, P, Attributes); - } catch (error) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw $TypeError$1('Accessors not supported'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; - }; - - var DESCRIPTORS$5 = descriptors; - var definePropertyModule$4 = objectDefineProperty; - var createPropertyDescriptor$1 = createPropertyDescriptor$3; - - var createNonEnumerableProperty$2 = DESCRIPTORS$5 ? function (object, key, value) { - return definePropertyModule$4.f(object, key, createPropertyDescriptor$1(1, value)); - } : function (object, key, value) { - object[key] = value; - return object; - }; - - var makeBuiltInExports = {}; - var makeBuiltIn$2 = { - get exports(){ return makeBuiltInExports; }, - set exports(v){ makeBuiltInExports = v; }, - }; - - var DESCRIPTORS$4 = descriptors; - var hasOwn$4 = hasOwnProperty_1; - - var FunctionPrototype = Function.prototype; - // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe - var getDescriptor = DESCRIPTORS$4 && Object.getOwnPropertyDescriptor; - - var EXISTS = hasOwn$4(FunctionPrototype, 'name'); - // additional protection from minified / mangled / dropped function names - var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; - var CONFIGURABLE = EXISTS && (!DESCRIPTORS$4 || (DESCRIPTORS$4 && getDescriptor(FunctionPrototype, 'name').configurable)); - - var functionName = { - EXISTS: EXISTS, - PROPER: PROPER, - CONFIGURABLE: CONFIGURABLE - }; - - var uncurryThis$b = functionUncurryThis; - var isCallable$6 = isCallable$c; - var store$1 = sharedStore; - - var functionToString = uncurryThis$b(Function.toString); - - // this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper - if (!isCallable$6(store$1.inspectSource)) { - store$1.inspectSource = function (it) { - return functionToString(it); - }; - } - - var inspectSource$2 = store$1.inspectSource; - - var global$4 = global$b; - var isCallable$5 = isCallable$c; - - var WeakMap$1 = global$4.WeakMap; - - var weakMapBasicDetection = isCallable$5(WeakMap$1) && /native code/.test(String(WeakMap$1)); - - var shared$1 = sharedExports; - var uid = uid$2; - - var keys = shared$1('keys'); - - var sharedKey$2 = function (key) { - return keys[key] || (keys[key] = uid(key)); - }; - - var hiddenKeys$4 = {}; - - var NATIVE_WEAK_MAP = weakMapBasicDetection; - var global$3 = global$b; - var isObject$2 = isObject$7; - var createNonEnumerableProperty$1 = createNonEnumerableProperty$2; - var hasOwn$3 = hasOwnProperty_1; - var shared = sharedStore; - var sharedKey$1 = sharedKey$2; - var hiddenKeys$3 = hiddenKeys$4; - - var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; - var TypeError$1 = global$3.TypeError; - var WeakMap = global$3.WeakMap; - var set, get, has; - - var enforce = function (it) { - return has(it) ? get(it) : set(it, {}); - }; - - var getterFor = function (TYPE) { - return function (it) { - var state; - if (!isObject$2(it) || (state = get(it)).type !== TYPE) { - throw TypeError$1('Incompatible receiver, ' + TYPE + ' required'); - } return state; - }; - }; - - if (NATIVE_WEAK_MAP || shared.state) { - var store = shared.state || (shared.state = new WeakMap()); - /* eslint-disable no-self-assign -- prototype methods protection */ - store.get = store.get; - store.has = store.has; - store.set = store.set; - /* eslint-enable no-self-assign -- prototype methods protection */ - set = function (it, metadata) { - if (store.has(it)) throw TypeError$1(OBJECT_ALREADY_INITIALIZED); - metadata.facade = it; - store.set(it, metadata); - return metadata; - }; - get = function (it) { - return store.get(it) || {}; - }; - has = function (it) { - return store.has(it); - }; - } else { - var STATE = sharedKey$1('state'); - hiddenKeys$3[STATE] = true; - set = function (it, metadata) { - if (hasOwn$3(it, STATE)) throw TypeError$1(OBJECT_ALREADY_INITIALIZED); - metadata.facade = it; - createNonEnumerableProperty$1(it, STATE, metadata); - return metadata; - }; - get = function (it) { - return hasOwn$3(it, STATE) ? it[STATE] : {}; - }; - has = function (it) { - return hasOwn$3(it, STATE); - }; - } - - var internalState = { - set: set, - get: get, - has: has, - enforce: enforce, - getterFor: getterFor - }; - - var uncurryThis$a = functionUncurryThis; - var fails$6 = fails$d; - var isCallable$4 = isCallable$c; - var hasOwn$2 = hasOwnProperty_1; - var DESCRIPTORS$3 = descriptors; - var CONFIGURABLE_FUNCTION_NAME = functionName.CONFIGURABLE; - var inspectSource$1 = inspectSource$2; - var InternalStateModule = internalState; - - var enforceInternalState = InternalStateModule.enforce; - var getInternalState = InternalStateModule.get; - var $String$1 = String; - // eslint-disable-next-line es/no-object-defineproperty -- safe - var defineProperty$2 = Object.defineProperty; - var stringSlice = uncurryThis$a(''.slice); - var replace$1 = uncurryThis$a(''.replace); - var join = uncurryThis$a([].join); - - var CONFIGURABLE_LENGTH = DESCRIPTORS$3 && !fails$6(function () { - return defineProperty$2(function () { /* empty */ }, 'length', { value: 8 }).length !== 8; - }); - - var TEMPLATE = String(String).split('String'); - - var makeBuiltIn$1 = makeBuiltIn$2.exports = function (value, name, options) { - if (stringSlice($String$1(name), 0, 7) === 'Symbol(') { - name = '[' + replace$1($String$1(name), /^Symbol\(([^)]*)\)/, '$1') + ']'; - } - if (options && options.getter) name = 'get ' + name; - if (options && options.setter) name = 'set ' + name; - if (!hasOwn$2(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) { - if (DESCRIPTORS$3) defineProperty$2(value, 'name', { value: name, configurable: true }); - else value.name = name; - } - if (CONFIGURABLE_LENGTH && options && hasOwn$2(options, 'arity') && value.length !== options.arity) { - defineProperty$2(value, 'length', { value: options.arity }); - } - try { - if (options && hasOwn$2(options, 'constructor') && options.constructor) { - if (DESCRIPTORS$3) defineProperty$2(value, 'prototype', { writable: false }); - // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable - } else if (value.prototype) value.prototype = undefined; - } catch (error) { /* empty */ } - var state = enforceInternalState(value); - if (!hasOwn$2(state, 'source')) { - state.source = join(TEMPLATE, typeof name == 'string' ? name : ''); - } return value; - }; - - // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative - // eslint-disable-next-line no-extend-native -- required - Function.prototype.toString = makeBuiltIn$1(function toString() { - return isCallable$4(this) && getInternalState(this).source || inspectSource$1(this); - }, 'toString'); - - var isCallable$3 = isCallable$c; - var definePropertyModule$3 = objectDefineProperty; - var makeBuiltIn = makeBuiltInExports; - var defineGlobalProperty$1 = defineGlobalProperty$3; - - var defineBuiltIn$2 = function (O, key, value, options) { - if (!options) options = {}; - var simple = options.enumerable; - var name = options.name !== undefined ? options.name : key; - if (isCallable$3(value)) makeBuiltIn(value, name, options); - if (options.global) { - if (simple) O[key] = value; - else defineGlobalProperty$1(key, value); - } else { - try { - if (!options.unsafe) delete O[key]; - else if (O[key]) simple = true; - } catch (error) { /* empty */ } - if (simple) O[key] = value; - else definePropertyModule$3.f(O, key, { - value: value, - enumerable: false, - configurable: !options.nonConfigurable, - writable: !options.nonWritable - }); - } return O; - }; - - var objectGetOwnPropertyNames = {}; - - var ceil = Math.ceil; - var floor = Math.floor; - - // `Math.trunc` method - // https://tc39.es/ecma262/#sec-math.trunc - // eslint-disable-next-line es/no-math-trunc -- safe - var mathTrunc = Math.trunc || function trunc(x) { - var n = +x; - return (n > 0 ? floor : ceil)(n); - }; - - var trunc = mathTrunc; - - // `ToIntegerOrInfinity` abstract operation - // https://tc39.es/ecma262/#sec-tointegerorinfinity - var toIntegerOrInfinity$2 = function (argument) { - var number = +argument; - // eslint-disable-next-line no-self-compare -- NaN check - return number !== number || number === 0 ? 0 : trunc(number); - }; - - var toIntegerOrInfinity$1 = toIntegerOrInfinity$2; - - var max = Math.max; - var min$1 = Math.min; - - // Helper for a popular repeating case of the spec: - // Let integer be ? ToInteger(index). - // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). - var toAbsoluteIndex$1 = function (index, length) { - var integer = toIntegerOrInfinity$1(index); - return integer < 0 ? max(integer + length, 0) : min$1(integer, length); - }; - - var toIntegerOrInfinity = toIntegerOrInfinity$2; - - var min = Math.min; - - // `ToLength` abstract operation - // https://tc39.es/ecma262/#sec-tolength - var toLength$1 = function (argument) { - return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 - }; - - var toLength = toLength$1; - - // `LengthOfArrayLike` abstract operation - // https://tc39.es/ecma262/#sec-lengthofarraylike - var lengthOfArrayLike$3 = function (obj) { - return toLength(obj.length); - }; - - var toIndexedObject$3 = toIndexedObject$5; - var toAbsoluteIndex = toAbsoluteIndex$1; - var lengthOfArrayLike$2 = lengthOfArrayLike$3; - - // `Array.prototype.{ indexOf, includes }` methods implementation - var createMethod$3 = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIndexedObject$3($this); - var length = lengthOfArrayLike$2(O); - var index = toAbsoluteIndex(fromIndex, length); - var value; - // Array#includes uses SameValueZero equality algorithm - // eslint-disable-next-line no-self-compare -- NaN check - if (IS_INCLUDES && el != el) while (length > index) { - value = O[index++]; - // eslint-disable-next-line no-self-compare -- NaN check - if (value != value) return true; - // Array#indexOf ignores holes, Array#includes - not - } else for (;length > index; index++) { - if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; - }; - - var arrayIncludes = { - // `Array.prototype.includes` method - // https://tc39.es/ecma262/#sec-array.prototype.includes - includes: createMethod$3(true), - // `Array.prototype.indexOf` method - // https://tc39.es/ecma262/#sec-array.prototype.indexof - indexOf: createMethod$3(false) - }; - - var uncurryThis$9 = functionUncurryThis; - var hasOwn$1 = hasOwnProperty_1; - var toIndexedObject$2 = toIndexedObject$5; - var indexOf = arrayIncludes.indexOf; - var hiddenKeys$2 = hiddenKeys$4; - - var push$2 = uncurryThis$9([].push); - - var objectKeysInternal = function (object, names) { - var O = toIndexedObject$2(object); - var i = 0; - var result = []; - var key; - for (key in O) !hasOwn$1(hiddenKeys$2, key) && hasOwn$1(O, key) && push$2(result, key); - // Don't enum bug & hidden keys - while (names.length > i) if (hasOwn$1(O, key = names[i++])) { - ~indexOf(result, key) || push$2(result, key); - } - return result; - }; - - // IE8- don't enum bug keys - var enumBugKeys$3 = [ - 'constructor', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'toLocaleString', - 'toString', - 'valueOf' - ]; - - var internalObjectKeys$1 = objectKeysInternal; - var enumBugKeys$2 = enumBugKeys$3; - - var hiddenKeys$1 = enumBugKeys$2.concat('length', 'prototype'); - - // `Object.getOwnPropertyNames` method - // https://tc39.es/ecma262/#sec-object.getownpropertynames - // eslint-disable-next-line es/no-object-getownpropertynames -- safe - objectGetOwnPropertyNames.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { - return internalObjectKeys$1(O, hiddenKeys$1); - }; - - var objectGetOwnPropertySymbols = {}; - - // eslint-disable-next-line es/no-object-getownpropertysymbols -- safe - objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols; - - var getBuiltIn$2 = getBuiltIn$4; - var uncurryThis$8 = functionUncurryThis; - var getOwnPropertyNamesModule = objectGetOwnPropertyNames; - var getOwnPropertySymbolsModule$1 = objectGetOwnPropertySymbols; - var anObject$2 = anObject$4; - - var concat$1 = uncurryThis$8([].concat); - - // all object keys, includes non-enumerable and symbols - var ownKeys$1 = getBuiltIn$2('Reflect', 'ownKeys') || function ownKeys(it) { - var keys = getOwnPropertyNamesModule.f(anObject$2(it)); - var getOwnPropertySymbols = getOwnPropertySymbolsModule$1.f; - return getOwnPropertySymbols ? concat$1(keys, getOwnPropertySymbols(it)) : keys; - }; - - var hasOwn = hasOwnProperty_1; - var ownKeys = ownKeys$1; - var getOwnPropertyDescriptorModule = objectGetOwnPropertyDescriptor; - var definePropertyModule$2 = objectDefineProperty; - - var copyConstructorProperties$1 = function (target, source, exceptions) { - var keys = ownKeys(source); - var defineProperty = definePropertyModule$2.f; - var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { - defineProperty(target, key, getOwnPropertyDescriptor(source, key)); - } - } - }; - - var fails$5 = fails$d; - var isCallable$2 = isCallable$c; - - var replacement = /#|\.prototype\./; - - var isForced$1 = function (feature, detection) { - var value = data[normalize(feature)]; - return value == POLYFILL ? true - : value == NATIVE ? false - : isCallable$2(detection) ? fails$5(detection) - : !!detection; - }; - - var normalize = isForced$1.normalize = function (string) { - return String(string).replace(replacement, '.').toLowerCase(); - }; - - var data = isForced$1.data = {}; - var NATIVE = isForced$1.NATIVE = 'N'; - var POLYFILL = isForced$1.POLYFILL = 'P'; - - var isForced_1 = isForced$1; - - var global$2 = global$b; - var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f; - var createNonEnumerableProperty = createNonEnumerableProperty$2; - var defineBuiltIn$1 = defineBuiltIn$2; - var defineGlobalProperty = defineGlobalProperty$3; - var copyConstructorProperties = copyConstructorProperties$1; - var isForced = isForced_1; - - /* - options.target - name of the target object - options.global - target is the global object - options.stat - export as static methods of target - options.proto - export as prototype methods of target - options.real - real prototype method for the `pure` version - options.forced - export even if the native feature is available - options.bind - bind methods to the target, required for the `pure` version - options.wrap - wrap constructors to preventing global pollution, required for the `pure` version - options.unsafe - use the simple assignment of property instead of delete + defineProperty - options.sham - add a flag to not completely full polyfills - options.enumerable - export as enumerable property - options.dontCallGetSet - prevent calling a getter on target - options.name - the .name of the function if it does not match the key - */ - var _export = function (options, source) { - var TARGET = options.target; - var GLOBAL = options.global; - var STATIC = options.stat; - var FORCED, target, key, targetProperty, sourceProperty, descriptor; - if (GLOBAL) { - target = global$2; - } else if (STATIC) { - target = global$2[TARGET] || defineGlobalProperty(TARGET, {}); - } else { - target = (global$2[TARGET] || {}).prototype; - } - if (target) for (key in source) { - sourceProperty = source[key]; - if (options.dontCallGetSet) { - descriptor = getOwnPropertyDescriptor(target, key); - targetProperty = descriptor && descriptor.value; - } else targetProperty = target[key]; - FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); - // contained in target - if (!FORCED && targetProperty !== undefined) { - if (typeof sourceProperty == typeof targetProperty) continue; - copyConstructorProperties(sourceProperty, targetProperty); - } - // add a flag to not completely full polyfills - if (options.sham || (targetProperty && targetProperty.sham)) { - createNonEnumerableProperty(sourceProperty, 'sham', true); - } - defineBuiltIn$1(target, key, sourceProperty, options); - } - }; - - var internalObjectKeys = objectKeysInternal; - var enumBugKeys$1 = enumBugKeys$3; - - // `Object.keys` method - // https://tc39.es/ecma262/#sec-object.keys - // eslint-disable-next-line es/no-object-keys -- safe - var objectKeys$3 = Object.keys || function keys(O) { - return internalObjectKeys(O, enumBugKeys$1); - }; - - var DESCRIPTORS$2 = descriptors; - var uncurryThis$7 = functionUncurryThis; - var objectKeys$2 = objectKeys$3; - var toIndexedObject$1 = toIndexedObject$5; - var $propertyIsEnumerable = objectPropertyIsEnumerable.f; - - var propertyIsEnumerable = uncurryThis$7($propertyIsEnumerable); - var push$1 = uncurryThis$7([].push); - - // `Object.{ entries, values }` methods implementation - var createMethod$2 = function (TO_ENTRIES) { - return function (it) { - var O = toIndexedObject$1(it); - var keys = objectKeys$2(O); - var length = keys.length; - var i = 0; - var result = []; - var key; - while (length > i) { - key = keys[i++]; - if (!DESCRIPTORS$2 || propertyIsEnumerable(O, key)) { - push$1(result, TO_ENTRIES ? [key, O[key]] : O[key]); - } - } - return result; - }; - }; - - var objectToArray = { - // `Object.entries` method - // https://tc39.es/ecma262/#sec-object.entries - entries: createMethod$2(true), - // `Object.values` method - // https://tc39.es/ecma262/#sec-object.values - values: createMethod$2(false) - }; - - var $$5 = _export; - var $entries = objectToArray.entries; - - // `Object.entries` method - // https://tc39.es/ecma262/#sec-object.entries - $$5({ target: 'Object', stat: true }, { - entries: function entries(O) { - return $entries(O); - } - }); - - var classofRaw$1 = classofRaw$2; - var uncurryThis$6 = functionUncurryThis; - - var functionUncurryThisClause = function (fn) { - // Nashorn bug: - // https://github.com/zloirock/core-js/issues/1128 - // https://github.com/zloirock/core-js/issues/1130 - if (classofRaw$1(fn) === 'Function') return uncurryThis$6(fn); - }; - - var uncurryThis$5 = functionUncurryThisClause; - var aCallable = aCallable$2; - var NATIVE_BIND = functionBindNative; - - var bind$1 = uncurryThis$5(uncurryThis$5.bind); - - // optional / simple context binding - var functionBindContext = function (fn, that) { - aCallable(fn); - return that === undefined ? fn : NATIVE_BIND ? bind$1(fn, that) : function (/* ...args */) { - return fn.apply(that, arguments); - }; - }; - - var classof$4 = classofRaw$2; - - // `IsArray` abstract operation - // https://tc39.es/ecma262/#sec-isarray - // eslint-disable-next-line es/no-array-isarray -- safe - var isArray$2 = Array.isArray || function isArray(argument) { - return classof$4(argument) == 'Array'; - }; - - var wellKnownSymbol$5 = wellKnownSymbol$7; - - var TO_STRING_TAG$1 = wellKnownSymbol$5('toStringTag'); - var test = {}; - - test[TO_STRING_TAG$1] = 'z'; - - var toStringTagSupport = String(test) === '[object z]'; - - var TO_STRING_TAG_SUPPORT$2 = toStringTagSupport; - var isCallable$1 = isCallable$c; - var classofRaw = classofRaw$2; - var wellKnownSymbol$4 = wellKnownSymbol$7; - - var TO_STRING_TAG = wellKnownSymbol$4('toStringTag'); - var $Object = Object; - - // ES3 wrong here - var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; - - // fallback for IE11 Script Access Denied error - var tryGet = function (it, key) { - try { - return it[key]; - } catch (error) { /* empty */ } - }; - - // getting tag from ES6+ `Object.prototype.toString` - var classof$3 = TO_STRING_TAG_SUPPORT$2 ? classofRaw : function (it) { - var O, tag, result; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag - // builtinTag case - : CORRECT_ARGUMENTS ? classofRaw(O) - // ES3 arguments fallback - : (result = classofRaw(O)) == 'Object' && isCallable$1(O.callee) ? 'Arguments' : result; - }; - - var uncurryThis$4 = functionUncurryThis; - var fails$4 = fails$d; - var isCallable = isCallable$c; - var classof$2 = classof$3; - var getBuiltIn$1 = getBuiltIn$4; - var inspectSource = inspectSource$2; - - var noop = function () { /* empty */ }; - var empty = []; - var construct = getBuiltIn$1('Reflect', 'construct'); - var constructorRegExp = /^\s*(?:class|function)\b/; - var exec$1 = uncurryThis$4(constructorRegExp.exec); - var INCORRECT_TO_STRING = !constructorRegExp.exec(noop); - - var isConstructorModern = function isConstructor(argument) { - if (!isCallable(argument)) return false; - try { - construct(noop, empty, argument); - return true; - } catch (error) { - return false; - } - }; - - var isConstructorLegacy = function isConstructor(argument) { - if (!isCallable(argument)) return false; - switch (classof$2(argument)) { - case 'AsyncFunction': - case 'GeneratorFunction': - case 'AsyncGeneratorFunction': return false; - } - try { - // we can't check .prototype since constructors produced by .bind haven't it - // `Function#toString` throws on some built-it function in some legacy engines - // (for example, `DOMQuad` and similar in FF41-) - return INCORRECT_TO_STRING || !!exec$1(constructorRegExp, inspectSource(argument)); - } catch (error) { - return true; - } - }; - - isConstructorLegacy.sham = true; - - // `IsConstructor` abstract operation - // https://tc39.es/ecma262/#sec-isconstructor - var isConstructor$1 = !construct || fails$4(function () { - var called; - return isConstructorModern(isConstructorModern.call) - || !isConstructorModern(Object) - || !isConstructorModern(function () { called = true; }) - || called; - }) ? isConstructorLegacy : isConstructorModern; - - var isArray$1 = isArray$2; - var isConstructor = isConstructor$1; - var isObject$1 = isObject$7; - var wellKnownSymbol$3 = wellKnownSymbol$7; - - var SPECIES$1 = wellKnownSymbol$3('species'); - var $Array = Array; - - // a part of `ArraySpeciesCreate` abstract operation - // https://tc39.es/ecma262/#sec-arrayspeciescreate - var arraySpeciesConstructor$1 = function (originalArray) { - var C; - if (isArray$1(originalArray)) { - C = originalArray.constructor; - // cross-realm fallback - if (isConstructor(C) && (C === $Array || isArray$1(C.prototype))) C = undefined; - else if (isObject$1(C)) { - C = C[SPECIES$1]; - if (C === null) C = undefined; - } - } return C === undefined ? $Array : C; - }; - - var arraySpeciesConstructor = arraySpeciesConstructor$1; - - // `ArraySpeciesCreate` abstract operation - // https://tc39.es/ecma262/#sec-arrayspeciescreate - var arraySpeciesCreate$2 = function (originalArray, length) { - return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); - }; - - var bind = functionBindContext; - var uncurryThis$3 = functionUncurryThis; - var IndexedObject$1 = indexedObject; - var toObject$2 = toObject$4; - var lengthOfArrayLike$1 = lengthOfArrayLike$3; - var arraySpeciesCreate$1 = arraySpeciesCreate$2; - - var push = uncurryThis$3([].push); - - // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation - var createMethod$1 = function (TYPE) { - var IS_MAP = TYPE == 1; - var IS_FILTER = TYPE == 2; - var IS_SOME = TYPE == 3; - var IS_EVERY = TYPE == 4; - var IS_FIND_INDEX = TYPE == 6; - var IS_FILTER_REJECT = TYPE == 7; - var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; - return function ($this, callbackfn, that, specificCreate) { - var O = toObject$2($this); - var self = IndexedObject$1(O); - var boundFunction = bind(callbackfn, that); - var length = lengthOfArrayLike$1(self); - var index = 0; - var create = specificCreate || arraySpeciesCreate$1; - var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined; - var value, result; - for (;length > index; index++) if (NO_HOLES || index in self) { - value = self[index]; - result = boundFunction(value, index, O); - if (TYPE) { - if (IS_MAP) target[index] = result; // map - else if (result) switch (TYPE) { - case 3: return true; // some - case 5: return value; // find - case 6: return index; // findIndex - case 2: push(target, value); // filter - } else switch (TYPE) { - case 4: return false; // every - case 7: push(target, value); // filterReject - } - } - } - return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; - }; - }; - - var arrayIteration = { - // `Array.prototype.forEach` method - // https://tc39.es/ecma262/#sec-array.prototype.foreach - forEach: createMethod$1(0), - // `Array.prototype.map` method - // https://tc39.es/ecma262/#sec-array.prototype.map - map: createMethod$1(1), - // `Array.prototype.filter` method - // https://tc39.es/ecma262/#sec-array.prototype.filter - filter: createMethod$1(2), - // `Array.prototype.some` method - // https://tc39.es/ecma262/#sec-array.prototype.some - some: createMethod$1(3), - // `Array.prototype.every` method - // https://tc39.es/ecma262/#sec-array.prototype.every - every: createMethod$1(4), - // `Array.prototype.find` method - // https://tc39.es/ecma262/#sec-array.prototype.find - find: createMethod$1(5), - // `Array.prototype.findIndex` method - // https://tc39.es/ecma262/#sec-array.prototype.findIndex - findIndex: createMethod$1(6), - // `Array.prototype.filterReject` method - // https://github.com/tc39/proposal-array-filtering - filterReject: createMethod$1(7) - }; - - var objectDefineProperties = {}; - - var DESCRIPTORS$1 = descriptors; - var V8_PROTOTYPE_DEFINE_BUG = v8PrototypeDefineBug; - var definePropertyModule$1 = objectDefineProperty; - var anObject$1 = anObject$4; - var toIndexedObject = toIndexedObject$5; - var objectKeys$1 = objectKeys$3; - - // `Object.defineProperties` method - // https://tc39.es/ecma262/#sec-object.defineproperties - // eslint-disable-next-line es/no-object-defineproperties -- safe - objectDefineProperties.f = DESCRIPTORS$1 && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { - anObject$1(O); - var props = toIndexedObject(Properties); - var keys = objectKeys$1(Properties); - var length = keys.length; - var index = 0; - var key; - while (length > index) definePropertyModule$1.f(O, key = keys[index++], props[key]); - return O; - }; - - var getBuiltIn = getBuiltIn$4; - - var html$1 = getBuiltIn('document', 'documentElement'); - - /* global ActiveXObject -- old IE, WSH */ - - var anObject = anObject$4; - var definePropertiesModule = objectDefineProperties; - var enumBugKeys = enumBugKeys$3; - var hiddenKeys = hiddenKeys$4; - var html = html$1; - var documentCreateElement = documentCreateElement$1; - var sharedKey = sharedKey$2; - - var GT = '>'; - var LT = '<'; - var PROTOTYPE = 'prototype'; - var SCRIPT = 'script'; - var IE_PROTO = sharedKey('IE_PROTO'); - - var EmptyConstructor = function () { /* empty */ }; - - var scriptTag = function (content) { - return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; - }; - - // Create object with fake `null` prototype: use ActiveX Object with cleared prototype - var NullProtoObjectViaActiveX = function (activeXDocument) { - activeXDocument.write(scriptTag('')); - activeXDocument.close(); - var temp = activeXDocument.parentWindow.Object; - activeXDocument = null; // avoid memory leak - return temp; - }; - - // Create object with fake `null` prototype: use iframe Object with cleared prototype - var NullProtoObjectViaIFrame = function () { - // Thrash, waste and sodomy: IE GC bug - var iframe = documentCreateElement('iframe'); - var JS = 'java' + SCRIPT + ':'; - var iframeDocument; - iframe.style.display = 'none'; - html.appendChild(iframe); - // https://github.com/zloirock/core-js/issues/475 - iframe.src = String(JS); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(scriptTag('document.F=Object')); - iframeDocument.close(); - return iframeDocument.F; - }; - - // Check for document.domain and active x support - // No need to use active x approach when document.domain is not set - // see https://github.com/es-shims/es5-shim/issues/150 - // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 - // avoid IE GC bug - var activeXDocument; - var NullProtoObject = function () { - try { - activeXDocument = new ActiveXObject('htmlfile'); - } catch (error) { /* ignore */ } - NullProtoObject = typeof document != 'undefined' - ? document.domain && activeXDocument - ? NullProtoObjectViaActiveX(activeXDocument) // old IE - : NullProtoObjectViaIFrame() - : NullProtoObjectViaActiveX(activeXDocument); // WSH - var length = enumBugKeys.length; - while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; - return NullProtoObject(); - }; - - hiddenKeys[IE_PROTO] = true; - - // `Object.create` method - // https://tc39.es/ecma262/#sec-object.create - // eslint-disable-next-line es/no-object-create -- safe - var objectCreate = Object.create || function create(O, Properties) { - var result; - if (O !== null) { - EmptyConstructor[PROTOTYPE] = anObject(O); - result = new EmptyConstructor(); - EmptyConstructor[PROTOTYPE] = null; - // add "__proto__" for Object.getPrototypeOf polyfill - result[IE_PROTO] = O; - } else result = NullProtoObject(); - return Properties === undefined ? result : definePropertiesModule.f(result, Properties); - }; - - var wellKnownSymbol$2 = wellKnownSymbol$7; - var create = objectCreate; - var defineProperty$1 = objectDefineProperty.f; - - var UNSCOPABLES = wellKnownSymbol$2('unscopables'); - var ArrayPrototype = Array.prototype; - - // Array.prototype[@@unscopables] - // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables - if (ArrayPrototype[UNSCOPABLES] == undefined) { - defineProperty$1(ArrayPrototype, UNSCOPABLES, { - configurable: true, - value: create(null) - }); - } - - // add a key to Array.prototype[@@unscopables] - var addToUnscopables$1 = function (key) { - ArrayPrototype[UNSCOPABLES][key] = true; - }; - - var $$4 = _export; - var $find = arrayIteration.find; - var addToUnscopables = addToUnscopables$1; - - var FIND = 'find'; - var SKIPS_HOLES = true; - - // Shouldn't skip holes - if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; }); - - // `Array.prototype.find` method - // https://tc39.es/ecma262/#sec-array.prototype.find - $$4({ target: 'Array', proto: true, forced: SKIPS_HOLES }, { - find: function find(callbackfn /* , that = undefined */) { - return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); - } - }); - - // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables - addToUnscopables(FIND); - - var TO_STRING_TAG_SUPPORT$1 = toStringTagSupport; - var classof$1 = classof$3; - - // `Object.prototype.toString` method implementation - // https://tc39.es/ecma262/#sec-object.prototype.tostring - var objectToString = TO_STRING_TAG_SUPPORT$1 ? {}.toString : function toString() { - return '[object ' + classof$1(this) + ']'; - }; - - var TO_STRING_TAG_SUPPORT = toStringTagSupport; - var defineBuiltIn = defineBuiltIn$2; - var toString$3 = objectToString; - - // `Object.prototype.toString` method - // https://tc39.es/ecma262/#sec-object.prototype.tostring - if (!TO_STRING_TAG_SUPPORT) { - defineBuiltIn(Object.prototype, 'toString', toString$3, { unsafe: true }); - } - - var classof = classof$3; - - var $String = String; - - var toString$2 = function (argument) { - if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string'); - return $String(argument); - }; - - // a string of all valid unicode whitespaces - var whitespaces$2 = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' + - '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; - - var uncurryThis$2 = functionUncurryThis; - var requireObjectCoercible = requireObjectCoercible$3; - var toString$1 = toString$2; - var whitespaces$1 = whitespaces$2; - - var replace = uncurryThis$2(''.replace); - var ltrim = RegExp('^[' + whitespaces$1 + ']+'); - var rtrim = RegExp('(^|[^' + whitespaces$1 + '])[' + whitespaces$1 + ']+$'); - - // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation - var createMethod = function (TYPE) { - return function ($this) { - var string = toString$1(requireObjectCoercible($this)); - if (TYPE & 1) string = replace(string, ltrim, ''); - if (TYPE & 2) string = replace(string, rtrim, '$1'); - return string; - }; - }; - - var stringTrim = { - // `String.prototype.{ trimLeft, trimStart }` methods - // https://tc39.es/ecma262/#sec-string.prototype.trimstart - start: createMethod(1), - // `String.prototype.{ trimRight, trimEnd }` methods - // https://tc39.es/ecma262/#sec-string.prototype.trimend - end: createMethod(2), - // `String.prototype.trim` method - // https://tc39.es/ecma262/#sec-string.prototype.trim - trim: createMethod(3) - }; - - var global$1 = global$b; - var fails$3 = fails$d; - var uncurryThis$1 = functionUncurryThis; - var toString = toString$2; - var trim = stringTrim.trim; - var whitespaces = whitespaces$2; - - var $parseInt$1 = global$1.parseInt; - var Symbol$1 = global$1.Symbol; - var ITERATOR = Symbol$1 && Symbol$1.iterator; - var hex = /^[+-]?0x/i; - var exec = uncurryThis$1(hex.exec); - var FORCED$1 = $parseInt$1(whitespaces + '08') !== 8 || $parseInt$1(whitespaces + '0x16') !== 22 - // MS Edge 18- broken with boxed symbols - || (ITERATOR && !fails$3(function () { $parseInt$1(Object(ITERATOR)); })); - - // `parseInt` method - // https://tc39.es/ecma262/#sec-parseint-string-radix - var numberParseInt = FORCED$1 ? function parseInt(string, radix) { - var S = trim(toString(string)); - return $parseInt$1(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10)); - } : $parseInt$1; - - var $$3 = _export; - var $parseInt = numberParseInt; - - // `parseInt` method - // https://tc39.es/ecma262/#sec-parseint-string-radix - $$3({ global: true, forced: parseInt != $parseInt }, { - parseInt: $parseInt - }); - - var fails$2 = fails$d; - var wellKnownSymbol$1 = wellKnownSymbol$7; - var V8_VERSION$1 = engineV8Version; - - var SPECIES = wellKnownSymbol$1('species'); - - var arrayMethodHasSpeciesSupport$2 = function (METHOD_NAME) { - // We can't use this feature detection in V8 since it causes - // deoptimization and serious performance degradation - // https://github.com/zloirock/core-js/issues/677 - return V8_VERSION$1 >= 51 || !fails$2(function () { - var array = []; - var constructor = array.constructor = {}; - constructor[SPECIES] = function () { - return { foo: 1 }; - }; - return array[METHOD_NAME](Boolean).foo !== 1; - }); - }; - - var $$2 = _export; - var $filter = arrayIteration.filter; - var arrayMethodHasSpeciesSupport$1 = arrayMethodHasSpeciesSupport$2; - - var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport$1('filter'); - - // `Array.prototype.filter` method - // https://tc39.es/ecma262/#sec-array.prototype.filter - // with adding support of @@species - $$2({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, { - filter: function filter(callbackfn /* , thisArg */) { - return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); - } - }); - - var DESCRIPTORS = descriptors; - var uncurryThis = functionUncurryThis; - var call = functionCall; - var fails$1 = fails$d; - var objectKeys = objectKeys$3; - var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols; - var propertyIsEnumerableModule = objectPropertyIsEnumerable; - var toObject$1 = toObject$4; - var IndexedObject = indexedObject; - - // eslint-disable-next-line es/no-object-assign -- safe - var $assign = Object.assign; - // eslint-disable-next-line es/no-object-defineproperty -- required for testing - var defineProperty = Object.defineProperty; - var concat = uncurryThis([].concat); - - // `Object.assign` method - // https://tc39.es/ecma262/#sec-object.assign - var objectAssign = !$assign || fails$1(function () { - // should have correct order of operations (Edge bug) - if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', { - enumerable: true, - get: function () { - defineProperty(this, 'b', { - value: 3, - enumerable: false - }); - } - }), { b: 2 })).b !== 1) return true; - // should work with symbols and should have deterministic property order (V8 bug) - var A = {}; - var B = {}; - // eslint-disable-next-line es/no-symbol -- safe - var symbol = Symbol(); - var alphabet = 'abcdefghijklmnopqrst'; - A[symbol] = 7; - alphabet.split('').forEach(function (chr) { B[chr] = chr; }); - return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet; - }) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length` - var T = toObject$1(target); - var argumentsLength = arguments.length; - var index = 1; - var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; - var propertyIsEnumerable = propertyIsEnumerableModule.f; - while (argumentsLength > index) { - var S = IndexedObject(arguments[index++]); - var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S); - var length = keys.length; - var j = 0; - var key; - while (length > j) { - key = keys[j++]; - if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key]; - } - } return T; - } : $assign; - - var $$1 = _export; - var assign = objectAssign; - - // `Object.assign` method - // https://tc39.es/ecma262/#sec-object.assign - // eslint-disable-next-line es/no-object-assign -- required for testing - $$1({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, { - assign: assign - }); - - var $TypeError = TypeError; - var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991 - - var doesNotExceedSafeInteger$1 = function (it) { - if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded'); - return it; - }; - - var toPropertyKey = toPropertyKey$3; - var definePropertyModule = objectDefineProperty; - var createPropertyDescriptor = createPropertyDescriptor$3; - - var createProperty$1 = function (object, key, value) { - var propertyKey = toPropertyKey(key); - if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); - else object[propertyKey] = value; - }; - - var $ = _export; - var fails = fails$d; - var isArray = isArray$2; - var isObject = isObject$7; - var toObject = toObject$4; - var lengthOfArrayLike = lengthOfArrayLike$3; - var doesNotExceedSafeInteger = doesNotExceedSafeInteger$1; - var createProperty = createProperty$1; - var arraySpeciesCreate = arraySpeciesCreate$2; - var arrayMethodHasSpeciesSupport = arrayMethodHasSpeciesSupport$2; - var wellKnownSymbol = wellKnownSymbol$7; - var V8_VERSION = engineV8Version; - - var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); - - // We can't use this feature detection in V8 since it causes - // deoptimization and serious performance degradation - // https://github.com/zloirock/core-js/issues/679 - var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () { - var array = []; - array[IS_CONCAT_SPREADABLE] = false; - return array.concat()[0] !== array; - }); - - var isConcatSpreadable = function (O) { - if (!isObject(O)) return false; - var spreadable = O[IS_CONCAT_SPREADABLE]; - return spreadable !== undefined ? !!spreadable : isArray(O); - }; - - var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat'); - - // `Array.prototype.concat` method - // https://tc39.es/ecma262/#sec-array.prototype.concat - // with adding support of @@isConcatSpreadable and @@species - $({ target: 'Array', proto: true, arity: 1, forced: FORCED }, { - // eslint-disable-next-line no-unused-vars -- required for `.length` - concat: function concat(arg) { - var O = toObject(this); - var A = arraySpeciesCreate(O, 0); - var n = 0; - var i, k, length, len, E; - for (i = -1, length = arguments.length; i < length; i++) { - E = i === -1 ? O : arguments[i]; - if (isConcatSpreadable(E)) { - len = lengthOfArrayLike(E); - doesNotExceedSafeInteger(n + len); - for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); - } else { - doesNotExceedSafeInteger(n + 1); - createProperty(A, n++, E); - } - } - A.length = n; - return A; - } - }); - - /** - * @author: Dennis Hernández - * @update: https://github.com/wenzhixin - * @version: v1.2.0 - */ - - $$6.akottr.dragtable.prototype._restoreState = function (persistObj) { - var i = 0; - for (var _i = 0, _Object$entries = Object.entries(persistObj); _i < _Object$entries.length; _i++) { - var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), - field = _Object$entries$_i[0], - value = _Object$entries$_i[1]; - var $th = this.originalTable.el.find("th[data-field=\"".concat(field, "\"]")); - if (!$th.length) { - i++; - continue; - } - this.originalTable.startIndex = $th.prevAll().length + 1; - this.originalTable.endIndex = parseInt(value, 10) + 1 - i; - this._bubbleCols(); - } - }; - - // From MDN site, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter - var filterFn = function filterFn() { - if (!Array.prototype.filter) { - Array.prototype.filter = function (fun /* , thisArg*/) { - if (this === undefined || this === null) { - throw new TypeError(); - } - var t = Object(this); - var len = t.length >>> 0; - if (typeof fun !== 'function') { - throw new TypeError(); - } - var res = []; - var thisArg = arguments.length >= 2 ? arguments[1] : undefined; - for (var i = 0; i < len; i++) { - if (i in t) { - var val = t[i]; - - // NOTE: Technically this should Object.defineProperty at - // the next index, as push can be affected by - // properties on Object.prototype and Array.prototype. - // But this method's new, and collisions should be - // rare, so use the more-compatible alternative. - if (fun.call(thisArg, val, i, t)) { - res.push(val); - } - } - } - return res; - }; - } - }; - Object.assign($$6.fn.bootstrapTable.defaults, { - reorderableColumns: false, - maxMovingRows: 10, - // eslint-disable-next-line no-unused-vars - onReorderColumn: function onReorderColumn(headerFields) { - return false; - }, - dragaccept: null - }); - Object.assign($$6.fn.bootstrapTable.events, { - 'reorder-column.bs.table': 'onReorderColumn' - }); - $$6.fn.bootstrapTable.methods.push('orderColumns'); - $$6.BootstrapTable = /*#__PURE__*/function (_$$BootstrapTable) { - _inherits(_class, _$$BootstrapTable); - var _super = _createSuper(_class); - function _class() { - _classCallCheck(this, _class); - return _super.apply(this, arguments); - } - _createClass(_class, [{ - key: "initHeader", - value: function initHeader() { - var _get2; - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - (_get2 = _get(_getPrototypeOf(_class.prototype), "initHeader", this)).call.apply(_get2, [this].concat(args)); - if (!this.options.reorderableColumns) { - return; - } - this.makeColumnsReorderable(); - } - }, { - key: "_toggleColumn", - value: function _toggleColumn() { - var _get3; - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - (_get3 = _get(_getPrototypeOf(_class.prototype), "_toggleColumn", this)).call.apply(_get3, [this].concat(args)); - if (!this.options.reorderableColumns) { - return; - } - this.makeColumnsReorderable(); - } - }, { - key: "toggleView", - value: function toggleView() { - var _get4; - for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - (_get4 = _get(_getPrototypeOf(_class.prototype), "toggleView", this)).call.apply(_get4, [this].concat(args)); - if (!this.options.reorderableColumns) { - return; - } - if (this.options.cardView) { - return; - } - this.makeColumnsReorderable(); - } - }, { - key: "resetView", - value: function resetView() { - var _get5; - for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } - (_get5 = _get(_getPrototypeOf(_class.prototype), "resetView", this)).call.apply(_get5, [this].concat(args)); - if (!this.options.reorderableColumns) { - return; - } - this.makeColumnsReorderable(); - } - }, { - key: "makeColumnsReorderable", - value: function makeColumnsReorderable() { - var _this = this; - var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - try { - $$6(this.$el).dragtable('destroy'); - } catch (e) { - // do nothing - } - $$6(this.$el).dragtable({ - maxMovingRows: this.options.maxMovingRows, - dragaccept: this.options.dragaccept, - clickDelay: 200, - dragHandle: '.th-inner', - restoreState: order ? order : this.columnsSortOrder, - beforeStop: function beforeStop(table) { - var sortOrder = {}; - table.el.find('th').each(function (i, el) { - sortOrder[$$6(el).data('field')] = i; - }); - _this.columnsSortOrder = sortOrder; - if (_this.options.cookie) { - _this.persistReorderColumnsState(_this); - } - var ths = []; - var formatters = []; - var columns = []; - var columnsHidden = []; - var columnIndex = -1; - var optionsColumns = []; - _this.$header.find('th:not(.detail)').each(function (i, el) { - ths.push($$6(el).data('field')); - formatters.push($$6(el).data('formatter')); - }); - - // Exist columns not shown - if (ths.length < _this.columns.length) { - columnsHidden = _this.columns.filter(function (column) { - return !column.visible; - }); - for (var i = 0; i < columnsHidden.length; i++) { - ths.push(columnsHidden[i].field); - formatters.push(columnsHidden[i].formatter); - } - } - for (var _i2 = 0; _i2 < ths.length; _i2++) { - columnIndex = _this.fieldsColumnsIndex[ths[_i2]]; - if (columnIndex !== -1) { - _this.fieldsColumnsIndex[ths[_i2]] = _i2; - _this.columns[columnIndex].fieldIndex = _i2; - columns.push(_this.columns[columnIndex]); - } - } - _this.columns = columns; - filterFn(); // Support arr.length) len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + var check = function (it) { + return it && it.Math === Math && it; + }; + + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global$g = + // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == 'object' && self) || + check(typeof commonjsGlobal == 'object' && commonjsGlobal) || + check(typeof commonjsGlobal == 'object' && commonjsGlobal) || + // eslint-disable-next-line no-new-func -- fallback + (function () { return this; })() || Function('return this')(); + + var objectGetOwnPropertyDescriptor = {}; + + var fails$l = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + + var fails$k = fails$l; + + // Detect IE8's incomplete defineProperty implementation + var descriptors = !fails$k(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7; + }); + + var fails$j = fails$l; + + var functionBindNative = !fails$j(function () { + // eslint-disable-next-line es/no-function-prototype-bind -- safe + var test = (function () { /* empty */ }).bind(); + // eslint-disable-next-line no-prototype-builtins -- safe + return typeof test != 'function' || test.hasOwnProperty('prototype'); + }); + + var NATIVE_BIND$2 = functionBindNative; + + var call$d = Function.prototype.call; + + var functionCall = NATIVE_BIND$2 ? call$d.bind(call$d) : function () { + return call$d.apply(call$d, arguments); + }; + + var objectPropertyIsEnumerable = {}; + + var $propertyIsEnumerable$1 = {}.propertyIsEnumerable; + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var getOwnPropertyDescriptor$2 = Object.getOwnPropertyDescriptor; + + // Nashorn ~ JDK8 bug + var NASHORN_BUG = getOwnPropertyDescriptor$2 && !$propertyIsEnumerable$1.call({ 1: 2 }, 1); + + // `Object.prototype.propertyIsEnumerable` method implementation + // https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable + objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor$2(this, V); + return !!descriptor && descriptor.enumerable; + } : $propertyIsEnumerable$1; + + var createPropertyDescriptor$5 = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + + var NATIVE_BIND$1 = functionBindNative; + + var FunctionPrototype$1 = Function.prototype; + var call$c = FunctionPrototype$1.call; + var uncurryThisWithBind = NATIVE_BIND$1 && FunctionPrototype$1.bind.bind(call$c, call$c); + + var functionUncurryThis = NATIVE_BIND$1 ? uncurryThisWithBind : function (fn) { + return function () { + return call$c.apply(fn, arguments); + }; + }; + + var uncurryThis$i = functionUncurryThis; + + var toString$7 = uncurryThis$i({}.toString); + var stringSlice$4 = uncurryThis$i(''.slice); + + var classofRaw$2 = function (it) { + return stringSlice$4(toString$7(it), 8, -1); + }; + + var uncurryThis$h = functionUncurryThis; + var fails$i = fails$l; + var classof$8 = classofRaw$2; + + var $Object$4 = Object; + var split$1 = uncurryThis$h(''.split); + + // fallback for non-array-like ES3 and non-enumerable old V8 strings + var indexedObject = fails$i(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !$Object$4('z').propertyIsEnumerable(0); + }) ? function (it) { + return classof$8(it) === 'String' ? split$1(it, '') : $Object$4(it); + } : $Object$4; + + // we can't use just `it == null` since of `document.all` special case + // https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec + var isNullOrUndefined$4 = function (it) { + return it === null || it === undefined; + }; + + var isNullOrUndefined$3 = isNullOrUndefined$4; + + var $TypeError$b = TypeError; + + // `RequireObjectCoercible` abstract operation + // https://tc39.es/ecma262/#sec-requireobjectcoercible + var requireObjectCoercible$4 = function (it) { + if (isNullOrUndefined$3(it)) throw new $TypeError$b("Can't call method on " + it); + return it; + }; + + // toObject with fallback for non-array-like ES3 strings + var IndexedObject$1 = indexedObject; + var requireObjectCoercible$3 = requireObjectCoercible$4; + + var toIndexedObject$6 = function (it) { + return IndexedObject$1(requireObjectCoercible$3(it)); + }; + + // https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot + var documentAll = typeof document == 'object' && document.all; + + // `IsCallable` abstract operation + // https://tc39.es/ecma262/#sec-iscallable + // eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing + var isCallable$h = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) { + return typeof argument == 'function' || argument === documentAll; + } : function (argument) { + return typeof argument == 'function'; + }; + + var isCallable$g = isCallable$h; + + var isObject$a = function (it) { + return typeof it == 'object' ? it !== null : isCallable$g(it); + }; + + var global$f = global$g; + var isCallable$f = isCallable$h; + + var aFunction = function (argument) { + return isCallable$f(argument) ? argument : undefined; + }; + + var getBuiltIn$4 = function (namespace, method) { + return arguments.length < 2 ? aFunction(global$f[namespace]) : global$f[namespace] && global$f[namespace][method]; + }; + + var uncurryThis$g = functionUncurryThis; + + var objectIsPrototypeOf = uncurryThis$g({}.isPrototypeOf); + + var engineUserAgent = typeof navigator != 'undefined' && String(navigator.userAgent) || ''; + + var global$e = global$g; + var userAgent = engineUserAgent; + + var process = global$e.process; + var Deno = global$e.Deno; + var versions = process && process.versions || Deno && Deno.version; + var v8 = versions && versions.v8; + var match, version; + + if (v8) { + match = v8.split('.'); + // in old Chrome, versions of V8 isn't V8 = Chrome / 10 + // but their correct versions are not interesting for us + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); + } + + // BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` + // so check `userAgent` even if `.v8` exists, but 0 + if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = +match[1]; + } + } + + var engineV8Version = version; + + /* eslint-disable es/no-symbol -- required for testing */ + var V8_VERSION$2 = engineV8Version; + var fails$h = fails$l; + var global$d = global$g; + + var $String$5 = global$d.String; + + // eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing + var symbolConstructorDetection = !!Object.getOwnPropertySymbols && !fails$h(function () { + var symbol = Symbol('symbol detection'); + // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will, + // of course, fail. + return !$String$5(symbol) || !(Object(symbol) instanceof Symbol) || + // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION$2 && V8_VERSION$2 < 41; + }); + + /* eslint-disable es/no-symbol -- required for testing */ + var NATIVE_SYMBOL$1 = symbolConstructorDetection; + + var useSymbolAsUid = NATIVE_SYMBOL$1 + && !Symbol.sham + && typeof Symbol.iterator == 'symbol'; + + var getBuiltIn$3 = getBuiltIn$4; + var isCallable$e = isCallable$h; + var isPrototypeOf$2 = objectIsPrototypeOf; + var USE_SYMBOL_AS_UID$1 = useSymbolAsUid; + + var $Object$3 = Object; + + var isSymbol$2 = USE_SYMBOL_AS_UID$1 ? function (it) { + return typeof it == 'symbol'; + } : function (it) { + var $Symbol = getBuiltIn$3('Symbol'); + return isCallable$e($Symbol) && isPrototypeOf$2($Symbol.prototype, $Object$3(it)); + }; + + var $String$4 = String; + + var tryToString$2 = function (argument) { + try { + return $String$4(argument); + } catch (error) { + return 'Object'; + } + }; + + var isCallable$d = isCallable$h; + var tryToString$1 = tryToString$2; + + var $TypeError$a = TypeError; + + // `Assert: IsCallable(argument) is true` + var aCallable$4 = function (argument) { + if (isCallable$d(argument)) return argument; + throw new $TypeError$a(tryToString$1(argument) + ' is not a function'); + }; + + var aCallable$3 = aCallable$4; + var isNullOrUndefined$2 = isNullOrUndefined$4; + + // `GetMethod` abstract operation + // https://tc39.es/ecma262/#sec-getmethod + var getMethod$3 = function (V, P) { + var func = V[P]; + return isNullOrUndefined$2(func) ? undefined : aCallable$3(func); + }; + + var call$b = functionCall; + var isCallable$c = isCallable$h; + var isObject$9 = isObject$a; + + var $TypeError$9 = TypeError; + + // `OrdinaryToPrimitive` abstract operation + // https://tc39.es/ecma262/#sec-ordinarytoprimitive + var ordinaryToPrimitive$1 = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable$c(fn = input.toString) && !isObject$9(val = call$b(fn, input))) return val; + if (isCallable$c(fn = input.valueOf) && !isObject$9(val = call$b(fn, input))) return val; + if (pref !== 'string' && isCallable$c(fn = input.toString) && !isObject$9(val = call$b(fn, input))) return val; + throw new $TypeError$9("Can't convert object to primitive value"); + }; + + var sharedStore = {exports: {}}; + + var isPure = false; + + var global$c = global$g; + + // eslint-disable-next-line es/no-object-defineproperty -- safe + var defineProperty$6 = Object.defineProperty; + + var defineGlobalProperty$3 = function (key, value) { + try { + defineProperty$6(global$c, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global$c[key] = value; + } return value; + }; + + var globalThis$1 = global$g; + var defineGlobalProperty$2 = defineGlobalProperty$3; + + var SHARED = '__core-js_shared__'; + var store$3 = sharedStore.exports = globalThis$1[SHARED] || defineGlobalProperty$2(SHARED, {}); + + (store$3.versions || (store$3.versions = [])).push({ + version: '3.36.0', + mode: 'global', + copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)', + license: 'https://github.com/zloirock/core-js/blob/v3.36.0/LICENSE', + source: 'https://github.com/zloirock/core-js' + }); + + var sharedStoreExports = sharedStore.exports; + + var store$2 = sharedStoreExports; + + var shared$4 = function (key, value) { + return store$2[key] || (store$2[key] = value || {}); + }; + + var requireObjectCoercible$2 = requireObjectCoercible$4; + + var $Object$2 = Object; + + // `ToObject` abstract operation + // https://tc39.es/ecma262/#sec-toobject + var toObject$4 = function (argument) { + return $Object$2(requireObjectCoercible$2(argument)); + }; + + var uncurryThis$f = functionUncurryThis; + var toObject$3 = toObject$4; + + var hasOwnProperty = uncurryThis$f({}.hasOwnProperty); + + // `HasOwnProperty` abstract operation + // https://tc39.es/ecma262/#sec-hasownproperty + // eslint-disable-next-line es/no-object-hasown -- safe + var hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject$3(it), key); + }; + + var uncurryThis$e = functionUncurryThis; + + var id = 0; + var postfix = Math.random(); + var toString$6 = uncurryThis$e(1.0.toString); + + var uid$2 = function (key) { + return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$6(++id + postfix, 36); + }; + + var global$b = global$g; + var shared$3 = shared$4; + var hasOwn$a = hasOwnProperty_1; + var uid$1 = uid$2; + var NATIVE_SYMBOL = symbolConstructorDetection; + var USE_SYMBOL_AS_UID = useSymbolAsUid; + + var Symbol$1 = global$b.Symbol; + var WellKnownSymbolsStore = shared$3('wks'); + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol$1['for'] || Symbol$1 : Symbol$1 && Symbol$1.withoutSetter || uid$1; + + var wellKnownSymbol$f = function (name) { + if (!hasOwn$a(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn$a(Symbol$1, name) + ? Symbol$1[name] + : createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; + }; + + var call$a = functionCall; + var isObject$8 = isObject$a; + var isSymbol$1 = isSymbol$2; + var getMethod$2 = getMethod$3; + var ordinaryToPrimitive = ordinaryToPrimitive$1; + var wellKnownSymbol$e = wellKnownSymbol$f; + + var $TypeError$8 = TypeError; + var TO_PRIMITIVE = wellKnownSymbol$e('toPrimitive'); + + // `ToPrimitive` abstract operation + // https://tc39.es/ecma262/#sec-toprimitive + var toPrimitive$1 = function (input, pref) { + if (!isObject$8(input) || isSymbol$1(input)) return input; + var exoticToPrim = getMethod$2(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = call$a(exoticToPrim, input, pref); + if (!isObject$8(result) || isSymbol$1(result)) return result; + throw new $TypeError$8("Can't convert object to primitive value"); + } + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive(input, pref); + }; + + var toPrimitive = toPrimitive$1; + var isSymbol = isSymbol$2; + + // `ToPropertyKey` abstract operation + // https://tc39.es/ecma262/#sec-topropertykey + var toPropertyKey$2 = function (argument) { + var key = toPrimitive(argument, 'string'); + return isSymbol(key) ? key : key + ''; + }; + + var global$a = global$g; + var isObject$7 = isObject$a; + + var document$1 = global$a.document; + // typeof document.createElement is 'object' in old IE + var EXISTS$1 = isObject$7(document$1) && isObject$7(document$1.createElement); + + var documentCreateElement$2 = function (it) { + return EXISTS$1 ? document$1.createElement(it) : {}; + }; + + var DESCRIPTORS$e = descriptors; + var fails$g = fails$l; + var createElement = documentCreateElement$2; + + // Thanks to IE8 for its funny defineProperty + var ie8DomDefine = !DESCRIPTORS$e && !fails$g(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a !== 7; + }); + + var DESCRIPTORS$d = descriptors; + var call$9 = functionCall; + var propertyIsEnumerableModule$1 = objectPropertyIsEnumerable; + var createPropertyDescriptor$4 = createPropertyDescriptor$5; + var toIndexedObject$5 = toIndexedObject$6; + var toPropertyKey$1 = toPropertyKey$2; + var hasOwn$9 = hasOwnProperty_1; + var IE8_DOM_DEFINE$1 = ie8DomDefine; + + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var $getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor; + + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptor + objectGetOwnPropertyDescriptor.f = DESCRIPTORS$d ? $getOwnPropertyDescriptor$1 : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject$5(O); + P = toPropertyKey$1(P); + if (IE8_DOM_DEFINE$1) try { + return $getOwnPropertyDescriptor$1(O, P); + } catch (error) { /* empty */ } + if (hasOwn$9(O, P)) return createPropertyDescriptor$4(!call$9(propertyIsEnumerableModule$1.f, O, P), O[P]); + }; + + var objectDefineProperty = {}; + + var DESCRIPTORS$c = descriptors; + var fails$f = fails$l; + + // V8 ~ Chrome 36- + // https://bugs.chromium.org/p/v8/issues/detail?id=3334 + var v8PrototypeDefineBug = DESCRIPTORS$c && fails$f(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(function () { /* empty */ }, 'prototype', { + value: 42, + writable: false + }).prototype !== 42; + }); + + var isObject$6 = isObject$a; + + var $String$3 = String; + var $TypeError$7 = TypeError; + + // `Assert: Type(argument) is Object` + var anObject$b = function (argument) { + if (isObject$6(argument)) return argument; + throw new $TypeError$7($String$3(argument) + ' is not an object'); + }; + + var DESCRIPTORS$b = descriptors; + var IE8_DOM_DEFINE = ie8DomDefine; + var V8_PROTOTYPE_DEFINE_BUG$1 = v8PrototypeDefineBug; + var anObject$a = anObject$b; + var toPropertyKey = toPropertyKey$2; + + var $TypeError$6 = TypeError; + // eslint-disable-next-line es/no-object-defineproperty -- safe + var $defineProperty = Object.defineProperty; + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var ENUMERABLE = 'enumerable'; + var CONFIGURABLE$1 = 'configurable'; + var WRITABLE = 'writable'; + + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + objectDefineProperty.f = DESCRIPTORS$b ? V8_PROTOTYPE_DEFINE_BUG$1 ? function defineProperty(O, P, Attributes) { + anObject$a(O); + P = toPropertyKey(P); + anObject$a(Attributes); + if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE$1 in Attributes ? Attributes[CONFIGURABLE$1] : current[CONFIGURABLE$1], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } return $defineProperty(O, P, Attributes); + } : $defineProperty : function defineProperty(O, P, Attributes) { + anObject$a(O); + P = toPropertyKey(P); + anObject$a(Attributes); + if (IE8_DOM_DEFINE) try { + return $defineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw new $TypeError$6('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; + }; + + var DESCRIPTORS$a = descriptors; + var definePropertyModule$4 = objectDefineProperty; + var createPropertyDescriptor$3 = createPropertyDescriptor$5; + + var createNonEnumerableProperty$5 = DESCRIPTORS$a ? function (object, key, value) { + return definePropertyModule$4.f(object, key, createPropertyDescriptor$3(1, value)); + } : function (object, key, value) { + object[key] = value; + return object; + }; + + var makeBuiltIn$3 = {exports: {}}; + + var DESCRIPTORS$9 = descriptors; + var hasOwn$8 = hasOwnProperty_1; + + var FunctionPrototype = Function.prototype; + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var getDescriptor = DESCRIPTORS$9 && Object.getOwnPropertyDescriptor; + + var EXISTS = hasOwn$8(FunctionPrototype, 'name'); + // additional protection from minified / mangled / dropped function names + var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; + var CONFIGURABLE = EXISTS && (!DESCRIPTORS$9 || (DESCRIPTORS$9 && getDescriptor(FunctionPrototype, 'name').configurable)); + + var functionName = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE + }; + + var uncurryThis$d = functionUncurryThis; + var isCallable$b = isCallable$h; + var store$1 = sharedStoreExports; + + var functionToString = uncurryThis$d(Function.toString); + + // this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper + if (!isCallable$b(store$1.inspectSource)) { + store$1.inspectSource = function (it) { + return functionToString(it); + }; + } + + var inspectSource$2 = store$1.inspectSource; + + var global$9 = global$g; + var isCallable$a = isCallable$h; + + var WeakMap$1 = global$9.WeakMap; + + var weakMapBasicDetection = isCallable$a(WeakMap$1) && /native code/.test(String(WeakMap$1)); + + var shared$2 = shared$4; + var uid = uid$2; + + var keys = shared$2('keys'); + + var sharedKey$3 = function (key) { + return keys[key] || (keys[key] = uid(key)); + }; + + var hiddenKeys$4 = {}; + + var NATIVE_WEAK_MAP = weakMapBasicDetection; + var global$8 = global$g; + var isObject$5 = isObject$a; + var createNonEnumerableProperty$4 = createNonEnumerableProperty$5; + var hasOwn$7 = hasOwnProperty_1; + var shared$1 = sharedStoreExports; + var sharedKey$2 = sharedKey$3; + var hiddenKeys$3 = hiddenKeys$4; + + var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; + var TypeError$2 = global$8.TypeError; + var WeakMap = global$8.WeakMap; + var set, get, has; + + var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); + }; + + var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject$5(it) || (state = get(it)).type !== TYPE) { + throw new TypeError$2('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; + }; + + if (NATIVE_WEAK_MAP || shared$1.state) { + var store = shared$1.state || (shared$1.state = new WeakMap()); + /* eslint-disable no-self-assign -- prototype methods protection */ + store.get = store.get; + store.has = store.has; + store.set = store.set; + /* eslint-enable no-self-assign -- prototype methods protection */ + set = function (it, metadata) { + if (store.has(it)) throw new TypeError$2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get = function (it) { + return store.get(it) || {}; + }; + has = function (it) { + return store.has(it); + }; + } else { + var STATE = sharedKey$2('state'); + hiddenKeys$3[STATE] = true; + set = function (it, metadata) { + if (hasOwn$7(it, STATE)) throw new TypeError$2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty$4(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return hasOwn$7(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return hasOwn$7(it, STATE); + }; + } + + var internalState = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor + }; + + var uncurryThis$c = functionUncurryThis; + var fails$e = fails$l; + var isCallable$9 = isCallable$h; + var hasOwn$6 = hasOwnProperty_1; + var DESCRIPTORS$8 = descriptors; + var CONFIGURABLE_FUNCTION_NAME$1 = functionName.CONFIGURABLE; + var inspectSource$1 = inspectSource$2; + var InternalStateModule$3 = internalState; + + var enforceInternalState = InternalStateModule$3.enforce; + var getInternalState$3 = InternalStateModule$3.get; + var $String$2 = String; + // eslint-disable-next-line es/no-object-defineproperty -- safe + var defineProperty$5 = Object.defineProperty; + var stringSlice$3 = uncurryThis$c(''.slice); + var replace$2 = uncurryThis$c(''.replace); + var join$1 = uncurryThis$c([].join); + + var CONFIGURABLE_LENGTH = DESCRIPTORS$8 && !fails$e(function () { + return defineProperty$5(function () { /* empty */ }, 'length', { value: 8 }).length !== 8; + }); + + var TEMPLATE = String(String).split('String'); + + var makeBuiltIn$2 = makeBuiltIn$3.exports = function (value, name, options) { + if (stringSlice$3($String$2(name), 0, 7) === 'Symbol(') { + name = '[' + replace$2($String$2(name), /^Symbol\(([^)]*)\).*$/, '$1') + ']'; + } + if (options && options.getter) name = 'get ' + name; + if (options && options.setter) name = 'set ' + name; + if (!hasOwn$6(value, 'name') || (CONFIGURABLE_FUNCTION_NAME$1 && value.name !== name)) { + if (DESCRIPTORS$8) defineProperty$5(value, 'name', { value: name, configurable: true }); + else value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn$6(options, 'arity') && value.length !== options.arity) { + defineProperty$5(value, 'length', { value: options.arity }); + } + try { + if (options && hasOwn$6(options, 'constructor') && options.constructor) { + if (DESCRIPTORS$8) defineProperty$5(value, 'prototype', { writable: false }); + // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable + } else if (value.prototype) value.prototype = undefined; + } catch (error) { /* empty */ } + var state = enforceInternalState(value); + if (!hasOwn$6(state, 'source')) { + state.source = join$1(TEMPLATE, typeof name == 'string' ? name : ''); + } return value; + }; + + // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + // eslint-disable-next-line no-extend-native -- required + Function.prototype.toString = makeBuiltIn$2(function toString() { + return isCallable$9(this) && getInternalState$3(this).source || inspectSource$1(this); + }, 'toString'); + + var makeBuiltInExports = makeBuiltIn$3.exports; + + var isCallable$8 = isCallable$h; + var definePropertyModule$3 = objectDefineProperty; + var makeBuiltIn$1 = makeBuiltInExports; + var defineGlobalProperty$1 = defineGlobalProperty$3; + + var defineBuiltIn$8 = function (O, key, value, options) { + if (!options) options = {}; + var simple = options.enumerable; + var name = options.name !== undefined ? options.name : key; + if (isCallable$8(value)) makeBuiltIn$1(value, name, options); + if (options.global) { + if (simple) O[key] = value; + else defineGlobalProperty$1(key, value); + } else { + try { + if (!options.unsafe) delete O[key]; + else if (O[key]) simple = true; + } catch (error) { /* empty */ } + if (simple) O[key] = value; + else definePropertyModule$3.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } return O; + }; + + var objectGetOwnPropertyNames = {}; + + var ceil = Math.ceil; + var floor$1 = Math.floor; + + // `Math.trunc` method + // https://tc39.es/ecma262/#sec-math.trunc + // eslint-disable-next-line es/no-math-trunc -- safe + var mathTrunc = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor$1 : ceil)(n); + }; + + var trunc = mathTrunc; + + // `ToIntegerOrInfinity` abstract operation + // https://tc39.es/ecma262/#sec-tointegerorinfinity + var toIntegerOrInfinity$3 = function (argument) { + var number = +argument; + // eslint-disable-next-line no-self-compare -- NaN check + return number !== number || number === 0 ? 0 : trunc(number); + }; + + var toIntegerOrInfinity$2 = toIntegerOrInfinity$3; + + var max = Math.max; + var min$1 = Math.min; + + // Helper for a popular repeating case of the spec: + // Let integer be ? ToInteger(index). + // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). + var toAbsoluteIndex$1 = function (index, length) { + var integer = toIntegerOrInfinity$2(index); + return integer < 0 ? max(integer + length, 0) : min$1(integer, length); + }; + + var toIntegerOrInfinity$1 = toIntegerOrInfinity$3; + + var min = Math.min; + + // `ToLength` abstract operation + // https://tc39.es/ecma262/#sec-tolength + var toLength$1 = function (argument) { + var len = toIntegerOrInfinity$1(argument); + return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 + }; + + var toLength = toLength$1; + + // `LengthOfArrayLike` abstract operation + // https://tc39.es/ecma262/#sec-lengthofarraylike + var lengthOfArrayLike$2 = function (obj) { + return toLength(obj.length); + }; + + var toIndexedObject$4 = toIndexedObject$6; + var toAbsoluteIndex = toAbsoluteIndex$1; + var lengthOfArrayLike$1 = lengthOfArrayLike$2; + + // `Array.prototype.{ indexOf, includes }` methods implementation + var createMethod$2 = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject$4($this); + var length = lengthOfArrayLike$1(O); + if (length === 0) return !IS_INCLUDES && -1; + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + if (IS_INCLUDES && el !== el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare -- NaN check + if (value !== value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; + }; + + var arrayIncludes = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod$2(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod$2(false) + }; + + var uncurryThis$b = functionUncurryThis; + var hasOwn$5 = hasOwnProperty_1; + var toIndexedObject$3 = toIndexedObject$6; + var indexOf$1 = arrayIncludes.indexOf; + var hiddenKeys$2 = hiddenKeys$4; + + var push$2 = uncurryThis$b([].push); + + var objectKeysInternal = function (object, names) { + var O = toIndexedObject$3(object); + var i = 0; + var result = []; + var key; + for (key in O) !hasOwn$5(hiddenKeys$2, key) && hasOwn$5(O, key) && push$2(result, key); + // Don't enum bug & hidden keys + while (names.length > i) if (hasOwn$5(O, key = names[i++])) { + ~indexOf$1(result, key) || push$2(result, key); + } + return result; + }; + + // IE8- don't enum bug keys + var enumBugKeys$3 = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' + ]; + + var internalObjectKeys$1 = objectKeysInternal; + var enumBugKeys$2 = enumBugKeys$3; + + var hiddenKeys$1 = enumBugKeys$2.concat('length', 'prototype'); + + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + // eslint-disable-next-line es/no-object-getownpropertynames -- safe + objectGetOwnPropertyNames.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys$1(O, hiddenKeys$1); + }; + + var objectGetOwnPropertySymbols = {}; + + // eslint-disable-next-line es/no-object-getownpropertysymbols -- safe + objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols; + + var getBuiltIn$2 = getBuiltIn$4; + var uncurryThis$a = functionUncurryThis; + var getOwnPropertyNamesModule = objectGetOwnPropertyNames; + var getOwnPropertySymbolsModule$1 = objectGetOwnPropertySymbols; + var anObject$9 = anObject$b; + + var concat$1 = uncurryThis$a([].concat); + + // all object keys, includes non-enumerable and symbols + var ownKeys$1 = getBuiltIn$2('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject$9(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule$1.f; + return getOwnPropertySymbols ? concat$1(keys, getOwnPropertySymbols(it)) : keys; + }; + + var hasOwn$4 = hasOwnProperty_1; + var ownKeys = ownKeys$1; + var getOwnPropertyDescriptorModule = objectGetOwnPropertyDescriptor; + var definePropertyModule$2 = objectDefineProperty; + + var copyConstructorProperties$1 = function (target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule$2.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn$4(target, key) && !(exceptions && hasOwn$4(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } + }; + + var fails$d = fails$l; + var isCallable$7 = isCallable$h; + + var replacement = /#|\.prototype\./; + + var isForced$1 = function (feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true + : value === NATIVE ? false + : isCallable$7(detection) ? fails$d(detection) + : !!detection; + }; + + var normalize = isForced$1.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); + }; + + var data = isForced$1.data = {}; + var NATIVE = isForced$1.NATIVE = 'N'; + var POLYFILL = isForced$1.POLYFILL = 'P'; + + var isForced_1 = isForced$1; + + var global$7 = global$g; + var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; + var createNonEnumerableProperty$3 = createNonEnumerableProperty$5; + var defineBuiltIn$7 = defineBuiltIn$8; + var defineGlobalProperty = defineGlobalProperty$3; + var copyConstructorProperties = copyConstructorProperties$1; + var isForced = isForced_1; + + /* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.dontCallGetSet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key + */ + var _export = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global$7; + } else if (STATIC) { + target = global$7[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = global$7[TARGET] && global$7[TARGET].prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor$1(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty == typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty$3(sourceProperty, 'sham', true); + } + defineBuiltIn$7(target, key, sourceProperty, options); + } + }; + + var classof$7 = classofRaw$2; + + // `IsArray` abstract operation + // https://tc39.es/ecma262/#sec-isarray + // eslint-disable-next-line es/no-array-isarray -- safe + var isArray$2 = Array.isArray || function isArray(argument) { + return classof$7(argument) === 'Array'; + }; + + var $TypeError$5 = TypeError; + var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991 + + var doesNotExceedSafeInteger$1 = function (it) { + if (it > MAX_SAFE_INTEGER) throw $TypeError$5('Maximum allowed index exceeded'); + return it; + }; + + var DESCRIPTORS$7 = descriptors; + var definePropertyModule$1 = objectDefineProperty; + var createPropertyDescriptor$2 = createPropertyDescriptor$5; + + var createProperty$1 = function (object, key, value) { + if (DESCRIPTORS$7) definePropertyModule$1.f(object, key, createPropertyDescriptor$2(0, value)); + else object[key] = value; + }; + + var wellKnownSymbol$d = wellKnownSymbol$f; + + var TO_STRING_TAG$2 = wellKnownSymbol$d('toStringTag'); + var test = {}; + + test[TO_STRING_TAG$2] = 'z'; + + var toStringTagSupport = String(test) === '[object z]'; + + var TO_STRING_TAG_SUPPORT$2 = toStringTagSupport; + var isCallable$6 = isCallable$h; + var classofRaw$1 = classofRaw$2; + var wellKnownSymbol$c = wellKnownSymbol$f; + + var TO_STRING_TAG$1 = wellKnownSymbol$c('toStringTag'); + var $Object$1 = Object; + + // ES3 wrong here + var CORRECT_ARGUMENTS = classofRaw$1(function () { return arguments; }()) === 'Arguments'; + + // fallback for IE11 Script Access Denied error + var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } + }; + + // getting tag from ES6+ `Object.prototype.toString` + var classof$6 = TO_STRING_TAG_SUPPORT$2 ? classofRaw$1 : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = $Object$1(it), TO_STRING_TAG$1)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw$1(O) + // ES3 arguments fallback + : (result = classofRaw$1(O)) === 'Object' && isCallable$6(O.callee) ? 'Arguments' : result; + }; + + var uncurryThis$9 = functionUncurryThis; + var fails$c = fails$l; + var isCallable$5 = isCallable$h; + var classof$5 = classof$6; + var getBuiltIn$1 = getBuiltIn$4; + var inspectSource = inspectSource$2; + + var noop = function () { /* empty */ }; + var construct = getBuiltIn$1('Reflect', 'construct'); + var constructorRegExp = /^\s*(?:class|function)\b/; + var exec$1 = uncurryThis$9(constructorRegExp.exec); + var INCORRECT_TO_STRING = !constructorRegExp.test(noop); + + var isConstructorModern = function isConstructor(argument) { + if (!isCallable$5(argument)) return false; + try { + construct(noop, [], argument); + return true; + } catch (error) { + return false; + } + }; + + var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable$5(argument)) return false; + switch (classof$5(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': return false; + } + try { + // we can't check .prototype since constructors produced by .bind haven't it + // `Function#toString` throws on some built-it function in some legacy engines + // (for example, `DOMQuad` and similar in FF41-) + return INCORRECT_TO_STRING || !!exec$1(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } + }; + + isConstructorLegacy.sham = true; + + // `IsConstructor` abstract operation + // https://tc39.es/ecma262/#sec-isconstructor + var isConstructor$1 = !construct || fails$c(function () { + var called; + return isConstructorModern(isConstructorModern.call) + || !isConstructorModern(Object) + || !isConstructorModern(function () { called = true; }) + || called; + }) ? isConstructorLegacy : isConstructorModern; + + var isArray$1 = isArray$2; + var isConstructor = isConstructor$1; + var isObject$4 = isObject$a; + var wellKnownSymbol$b = wellKnownSymbol$f; + + var SPECIES$2 = wellKnownSymbol$b('species'); + var $Array = Array; + + // a part of `ArraySpeciesCreate` abstract operation + // https://tc39.es/ecma262/#sec-arrayspeciescreate + var arraySpeciesConstructor$1 = function (originalArray) { + var C; + if (isArray$1(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (isConstructor(C) && (C === $Array || isArray$1(C.prototype))) C = undefined; + else if (isObject$4(C)) { + C = C[SPECIES$2]; + if (C === null) C = undefined; + } + } return C === undefined ? $Array : C; + }; + + var arraySpeciesConstructor = arraySpeciesConstructor$1; + + // `ArraySpeciesCreate` abstract operation + // https://tc39.es/ecma262/#sec-arrayspeciescreate + var arraySpeciesCreate$1 = function (originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); + }; + + var fails$b = fails$l; + var wellKnownSymbol$a = wellKnownSymbol$f; + var V8_VERSION$1 = engineV8Version; + + var SPECIES$1 = wellKnownSymbol$a('species'); + + var arrayMethodHasSpeciesSupport$1 = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return V8_VERSION$1 >= 51 || !fails$b(function () { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES$1] = function () { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + + var $$5 = _export; + var fails$a = fails$l; + var isArray = isArray$2; + var isObject$3 = isObject$a; + var toObject$2 = toObject$4; + var lengthOfArrayLike = lengthOfArrayLike$2; + var doesNotExceedSafeInteger = doesNotExceedSafeInteger$1; + var createProperty = createProperty$1; + var arraySpeciesCreate = arraySpeciesCreate$1; + var arrayMethodHasSpeciesSupport = arrayMethodHasSpeciesSupport$1; + var wellKnownSymbol$9 = wellKnownSymbol$f; + var V8_VERSION = engineV8Version; + + var IS_CONCAT_SPREADABLE = wellKnownSymbol$9('isConcatSpreadable'); + + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/679 + var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails$a(function () { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; + }); + + var isConcatSpreadable = function (O) { + if (!isObject$3(O)) return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== undefined ? !!spreadable : isArray(O); + }; + + var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat'); + + // `Array.prototype.concat` method + // https://tc39.es/ecma262/#sec-array.prototype.concat + // with adding support of @@isConcatSpreadable and @@species + $$5({ target: 'Array', proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + concat: function concat(arg) { + var O = toObject$2(this); + var A = arraySpeciesCreate(O, 0); + var n = 0; + var i, k, length, len, E; + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + if (isConcatSpreadable(E)) { + len = lengthOfArrayLike(E); + doesNotExceedSafeInteger(n + len); + for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); + } else { + doesNotExceedSafeInteger(n + 1); + createProperty(A, n++, E); + } + } + A.length = n; + return A; + } + }); + + var objectDefineProperties = {}; + + var internalObjectKeys = objectKeysInternal; + var enumBugKeys$1 = enumBugKeys$3; + + // `Object.keys` method + // https://tc39.es/ecma262/#sec-object.keys + // eslint-disable-next-line es/no-object-keys -- safe + var objectKeys$3 = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys$1); + }; + + var DESCRIPTORS$6 = descriptors; + var V8_PROTOTYPE_DEFINE_BUG = v8PrototypeDefineBug; + var definePropertyModule = objectDefineProperty; + var anObject$8 = anObject$b; + var toIndexedObject$2 = toIndexedObject$6; + var objectKeys$2 = objectKeys$3; + + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + // eslint-disable-next-line es/no-object-defineproperties -- safe + objectDefineProperties.f = DESCRIPTORS$6 && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject$8(O); + var props = toIndexedObject$2(Properties); + var keys = objectKeys$2(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]); + return O; + }; + + var getBuiltIn = getBuiltIn$4; + + var html$1 = getBuiltIn('document', 'documentElement'); + + /* global ActiveXObject -- old IE, WSH */ + var anObject$7 = anObject$b; + var definePropertiesModule = objectDefineProperties; + var enumBugKeys = enumBugKeys$3; + var hiddenKeys = hiddenKeys$4; + var html = html$1; + var documentCreateElement$1 = documentCreateElement$2; + var sharedKey$1 = sharedKey$3; + + var GT = '>'; + var LT = '<'; + var PROTOTYPE = 'prototype'; + var SCRIPT = 'script'; + var IE_PROTO$1 = sharedKey$1('IE_PROTO'); + + var EmptyConstructor = function () { /* empty */ }; + + var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; + }; + + // Create object with fake `null` prototype: use ActiveX Object with cleared prototype + var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; + }; + + // Create object with fake `null` prototype: use iframe Object with cleared prototype + var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement$1('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; + }; + + // Check for document.domain and active x support + // No need to use active x approach when document.domain is not set + // see https://github.com/es-shims/es5-shim/issues/150 + // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 + // avoid IE GC bug + var activeXDocument; + var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = typeof document != 'undefined' + ? document.domain && activeXDocument + ? NullProtoObjectViaActiveX(activeXDocument) // old IE + : NullProtoObjectViaIFrame() + : NullProtoObjectViaActiveX(activeXDocument); // WSH + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); + }; + + hiddenKeys[IE_PROTO$1] = true; + + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + // eslint-disable-next-line es/no-object-create -- safe + var objectCreate = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject$7(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO$1] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : definePropertiesModule.f(result, Properties); + }; + + var wellKnownSymbol$8 = wellKnownSymbol$f; + var create$3 = objectCreate; + var defineProperty$4 = objectDefineProperty.f; + + var UNSCOPABLES = wellKnownSymbol$8('unscopables'); + var ArrayPrototype = Array.prototype; + + // Array.prototype[@@unscopables] + // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + if (ArrayPrototype[UNSCOPABLES] === undefined) { + defineProperty$4(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create$3(null) + }); + } + + // add a key to Array.prototype[@@unscopables] + var addToUnscopables$1 = function (key) { + ArrayPrototype[UNSCOPABLES][key] = true; + }; + + var iterators = {}; + + var fails$9 = fails$l; + + var correctPrototypeGetter = !fails$9(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + // eslint-disable-next-line es/no-object-getprototypeof -- required for testing + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + + var hasOwn$3 = hasOwnProperty_1; + var isCallable$4 = isCallable$h; + var toObject$1 = toObject$4; + var sharedKey = sharedKey$3; + var CORRECT_PROTOTYPE_GETTER = correctPrototypeGetter; + + var IE_PROTO = sharedKey('IE_PROTO'); + var $Object = Object; + var ObjectPrototype = $Object.prototype; + + // `Object.getPrototypeOf` method + // https://tc39.es/ecma262/#sec-object.getprototypeof + // eslint-disable-next-line es/no-object-getprototypeof -- safe + var objectGetPrototypeOf$1 = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) { + var object = toObject$1(O); + if (hasOwn$3(object, IE_PROTO)) return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable$4(constructor) && object instanceof constructor) { + return constructor.prototype; + } return object instanceof $Object ? ObjectPrototype : null; + }; + + var fails$8 = fails$l; + var isCallable$3 = isCallable$h; + var isObject$2 = isObject$a; + var getPrototypeOf$1 = objectGetPrototypeOf$1; + var defineBuiltIn$6 = defineBuiltIn$8; + var wellKnownSymbol$7 = wellKnownSymbol$f; + + var ITERATOR$5 = wellKnownSymbol$7('iterator'); + var BUGGY_SAFARI_ITERATORS$1 = false; + + // `%IteratorPrototype%` object + // https://tc39.es/ecma262/#sec-%iteratorprototype%-object + var IteratorPrototype$2, PrototypeOfArrayIteratorPrototype, arrayIterator; + + /* eslint-disable es/no-array-prototype-keys -- safe */ + if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS$1 = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf$1(getPrototypeOf$1(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype$2 = PrototypeOfArrayIteratorPrototype; + } + } + + var NEW_ITERATOR_PROTOTYPE = !isObject$2(IteratorPrototype$2) || fails$8(function () { + var test = {}; + // FF44- legacy iterators case + return IteratorPrototype$2[ITERATOR$5].call(test) !== test; + }); + + if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype$2 = {}; + + // `%IteratorPrototype%[@@iterator]()` method + // https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator + if (!isCallable$3(IteratorPrototype$2[ITERATOR$5])) { + defineBuiltIn$6(IteratorPrototype$2, ITERATOR$5, function () { + return this; + }); + } + + var iteratorsCore = { + IteratorPrototype: IteratorPrototype$2, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS$1 + }; + + var defineProperty$3 = objectDefineProperty.f; + var hasOwn$2 = hasOwnProperty_1; + var wellKnownSymbol$6 = wellKnownSymbol$f; + + var TO_STRING_TAG = wellKnownSymbol$6('toStringTag'); + + var setToStringTag$4 = function (target, TAG, STATIC) { + if (target && !STATIC) target = target.prototype; + if (target && !hasOwn$2(target, TO_STRING_TAG)) { + defineProperty$3(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + }; + + var IteratorPrototype$1 = iteratorsCore.IteratorPrototype; + var create$2 = objectCreate; + var createPropertyDescriptor$1 = createPropertyDescriptor$5; + var setToStringTag$3 = setToStringTag$4; + var Iterators$3 = iterators; + + var returnThis$1 = function () { return this; }; + + var iteratorCreateConstructor = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create$2(IteratorPrototype$1, { next: createPropertyDescriptor$1(+!ENUMERABLE_NEXT, next) }); + setToStringTag$3(IteratorConstructor, TO_STRING_TAG, false); + Iterators$3[TO_STRING_TAG] = returnThis$1; + return IteratorConstructor; + }; + + var uncurryThis$8 = functionUncurryThis; + var aCallable$2 = aCallable$4; + + var functionUncurryThisAccessor = function (object, key, method) { + try { + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + return uncurryThis$8(aCallable$2(Object.getOwnPropertyDescriptor(object, key)[method])); + } catch (error) { /* empty */ } + }; + + var isObject$1 = isObject$a; + + var isPossiblePrototype$1 = function (argument) { + return isObject$1(argument) || argument === null; + }; + + var isPossiblePrototype = isPossiblePrototype$1; + + var $String$1 = String; + var $TypeError$4 = TypeError; + + var aPossiblePrototype$1 = function (argument) { + if (isPossiblePrototype(argument)) return argument; + throw new $TypeError$4("Can't set " + $String$1(argument) + ' as a prototype'); + }; + + /* eslint-disable no-proto -- safe */ + var uncurryThisAccessor = functionUncurryThisAccessor; + var anObject$6 = anObject$b; + var aPossiblePrototype = aPossiblePrototype$1; + + // `Object.setPrototypeOf` method + // https://tc39.es/ecma262/#sec-object.setprototypeof + // Works with __proto__ only. Old v8 can't work with null proto objects. + // eslint-disable-next-line es/no-object-setprototypeof -- safe + var objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set'); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + anObject$6(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter(O, proto); + else O.__proto__ = proto; + return O; + }; + }() : undefined); + + var $$4 = _export; + var call$8 = functionCall; + var FunctionName = functionName; + var isCallable$2 = isCallable$h; + var createIteratorConstructor$1 = iteratorCreateConstructor; + var getPrototypeOf = objectGetPrototypeOf$1; + var setPrototypeOf = objectSetPrototypeOf; + var setToStringTag$2 = setToStringTag$4; + var createNonEnumerableProperty$2 = createNonEnumerableProperty$5; + var defineBuiltIn$5 = defineBuiltIn$8; + var wellKnownSymbol$5 = wellKnownSymbol$f; + var Iterators$2 = iterators; + var IteratorsCore = iteratorsCore; + + var PROPER_FUNCTION_NAME$1 = FunctionName.PROPER; + var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; + var IteratorPrototype = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR$4 = wellKnownSymbol$5('iterator'); + var KEYS = 'keys'; + var VALUES = 'values'; + var ENTRIES = 'entries'; + + var returnThis = function () { return this; }; + + var iteratorDefine = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor$1(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND]; + + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } + + return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR$4] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable$2(CurrentIteratorPrototype[ITERATOR$4])) { + defineBuiltIn$5(CurrentIteratorPrototype, ITERATOR$4, returnThis); + } + } + // Set @@toStringTag to native iterators + setToStringTag$2(CurrentIteratorPrototype, TO_STRING_TAG, true); + } + } + + // fix Array.prototype.{ values, @@iterator }.name in V8 / FF + if (PROPER_FUNCTION_NAME$1 && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty$2(IterablePrototype, 'name', VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return call$8(nativeIterator, this); }; + } + } + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + defineBuiltIn$5(IterablePrototype, KEY, methods[KEY]); + } + } else $$4({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + + // define iterator + if (IterablePrototype[ITERATOR$4] !== defaultIterator) { + defineBuiltIn$5(IterablePrototype, ITERATOR$4, defaultIterator, { name: DEFAULT }); + } + Iterators$2[NAME] = defaultIterator; + + return methods; + }; + + // `CreateIterResultObject` abstract operation + // https://tc39.es/ecma262/#sec-createiterresultobject + var createIterResultObject$3 = function (value, done) { + return { value: value, done: done }; + }; + + var toIndexedObject$1 = toIndexedObject$6; + var addToUnscopables = addToUnscopables$1; + var Iterators$1 = iterators; + var InternalStateModule$2 = internalState; + var defineProperty$2 = objectDefineProperty.f; + var defineIterator$1 = iteratorDefine; + var createIterResultObject$2 = createIterResultObject$3; + var DESCRIPTORS$5 = descriptors; + + var ARRAY_ITERATOR = 'Array Iterator'; + var setInternalState$2 = InternalStateModule$2.set; + var getInternalState$2 = InternalStateModule$2.getterFor(ARRAY_ITERATOR); + + // `Array.prototype.entries` method + // https://tc39.es/ecma262/#sec-array.prototype.entries + // `Array.prototype.keys` method + // https://tc39.es/ecma262/#sec-array.prototype.keys + // `Array.prototype.values` method + // https://tc39.es/ecma262/#sec-array.prototype.values + // `Array.prototype[@@iterator]` method + // https://tc39.es/ecma262/#sec-array.prototype-@@iterator + // `CreateArrayIterator` internal method + // https://tc39.es/ecma262/#sec-createarrayiterator + var es_array_iterator = defineIterator$1(Array, 'Array', function (iterated, kind) { + setInternalState$2(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject$1(iterated), // target + index: 0, // next index + kind: kind // kind + }); + // `%ArrayIteratorPrototype%.next` method + // https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next + }, function () { + var state = getInternalState$2(this); + var target = state.target; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return createIterResultObject$2(undefined, true); + } + switch (state.kind) { + case 'keys': return createIterResultObject$2(index, false); + case 'values': return createIterResultObject$2(target[index], false); + } return createIterResultObject$2([index, target[index]], false); + }, 'values'); + + // argumentsList[@@iterator] is %ArrayProto_values% + // https://tc39.es/ecma262/#sec-createunmappedargumentsobject + // https://tc39.es/ecma262/#sec-createmappedargumentsobject + var values = Iterators$1.Arguments = Iterators$1.Array; + + // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables('keys'); + addToUnscopables('values'); + addToUnscopables('entries'); + + // V8 ~ Chrome 45- bug + if (DESCRIPTORS$5 && values.name !== 'values') try { + defineProperty$2(values, 'name', { value: 'values' }); + } catch (error) { /* empty */ } + + var DESCRIPTORS$4 = descriptors; + var uncurryThis$7 = functionUncurryThis; + var call$7 = functionCall; + var fails$7 = fails$l; + var objectKeys$1 = objectKeys$3; + var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols; + var propertyIsEnumerableModule = objectPropertyIsEnumerable; + var toObject = toObject$4; + var IndexedObject = indexedObject; + + // eslint-disable-next-line es/no-object-assign -- safe + var $assign = Object.assign; + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + var defineProperty$1 = Object.defineProperty; + var concat = uncurryThis$7([].concat); + + // `Object.assign` method + // https://tc39.es/ecma262/#sec-object.assign + var objectAssign = !$assign || fails$7(function () { + // should have correct order of operations (Edge bug) + if (DESCRIPTORS$4 && $assign({ b: 1 }, $assign(defineProperty$1({}, 'a', { + enumerable: true, + get: function () { + defineProperty$1(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) + var A = {}; + var B = {}; + // eslint-disable-next-line es/no-symbol -- safe + var symbol = Symbol('assign detection'); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { B[chr] = chr; }); + return $assign({}, A)[symbol] !== 7 || objectKeys$1($assign({}, B)).join('') !== alphabet; + }) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length` + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + var propertyIsEnumerable = propertyIsEnumerableModule.f; + while (argumentsLength > index) { + var S = IndexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? concat(objectKeys$1(S), getOwnPropertySymbols(S)) : objectKeys$1(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!DESCRIPTORS$4 || call$7(propertyIsEnumerable, S, key)) T[key] = S[key]; + } + } return T; + } : $assign; + + var $$3 = _export; + var assign = objectAssign; + + // `Object.assign` method + // https://tc39.es/ecma262/#sec-object.assign + // eslint-disable-next-line es/no-object-assign -- required for testing + $$3({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, { + assign: assign + }); + + var DESCRIPTORS$3 = descriptors; + var fails$6 = fails$l; + var uncurryThis$6 = functionUncurryThis; + var objectGetPrototypeOf = objectGetPrototypeOf$1; + var objectKeys = objectKeys$3; + var toIndexedObject = toIndexedObject$6; + var $propertyIsEnumerable = objectPropertyIsEnumerable.f; + + var propertyIsEnumerable = uncurryThis$6($propertyIsEnumerable); + var push$1 = uncurryThis$6([].push); + + // in some IE versions, `propertyIsEnumerable` returns incorrect result on integer keys + // of `null` prototype objects + var IE_BUG = DESCRIPTORS$3 && fails$6(function () { + // eslint-disable-next-line es/no-object-create -- safe + var O = Object.create(null); + O[2] = 2; + return !propertyIsEnumerable(O, 2); + }); + + // `Object.{ entries, values }` methods implementation + var createMethod$1 = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject(it); + var keys = objectKeys(O); + var IE_WORKAROUND = IE_BUG && objectGetPrototypeOf(O) === null; + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) { + key = keys[i++]; + if (!DESCRIPTORS$3 || (IE_WORKAROUND ? key in O : propertyIsEnumerable(O, key))) { + push$1(result, TO_ENTRIES ? [key, O[key]] : O[key]); + } + } + return result; + }; + }; + + var objectToArray = { + // `Object.entries` method + // https://tc39.es/ecma262/#sec-object.entries + entries: createMethod$1(true), + // `Object.values` method + // https://tc39.es/ecma262/#sec-object.values + values: createMethod$1(false) + }; + + var $$2 = _export; + var $entries = objectToArray.entries; + + // `Object.entries` method + // https://tc39.es/ecma262/#sec-object.entries + $$2({ target: 'Object', stat: true }, { + entries: function entries(O) { + return $entries(O); + } + }); + + var TO_STRING_TAG_SUPPORT$1 = toStringTagSupport; + var classof$4 = classof$6; + + // `Object.prototype.toString` method implementation + // https://tc39.es/ecma262/#sec-object.prototype.tostring + var objectToString = TO_STRING_TAG_SUPPORT$1 ? {}.toString : function toString() { + return '[object ' + classof$4(this) + ']'; + }; + + var TO_STRING_TAG_SUPPORT = toStringTagSupport; + var defineBuiltIn$4 = defineBuiltIn$8; + var toString$5 = objectToString; + + // `Object.prototype.toString` method + // https://tc39.es/ecma262/#sec-object.prototype.tostring + if (!TO_STRING_TAG_SUPPORT) { + defineBuiltIn$4(Object.prototype, 'toString', toString$5, { unsafe: true }); + } + + var classof$3 = classof$6; + + var $String = String; + + var toString$4 = function (argument) { + if (classof$3(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string'); + return $String(argument); + }; + + var anObject$5 = anObject$b; + + // `RegExp.prototype.flags` getter implementation + // https://tc39.es/ecma262/#sec-get-regexp.prototype.flags + var regexpFlags$1 = function () { + var that = anObject$5(this); + var result = ''; + if (that.hasIndices) result += 'd'; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.dotAll) result += 's'; + if (that.unicode) result += 'u'; + if (that.unicodeSets) result += 'v'; + if (that.sticky) result += 'y'; + return result; + }; + + var fails$5 = fails$l; + var global$6 = global$g; + + // babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError + var $RegExp$2 = global$6.RegExp; + + var UNSUPPORTED_Y$1 = fails$5(function () { + var re = $RegExp$2('a', 'y'); + re.lastIndex = 2; + return re.exec('abcd') !== null; + }); + + // UC Browser bug + // https://github.com/zloirock/core-js/issues/1008 + var MISSED_STICKY = UNSUPPORTED_Y$1 || fails$5(function () { + return !$RegExp$2('a', 'y').sticky; + }); + + var BROKEN_CARET = UNSUPPORTED_Y$1 || fails$5(function () { + // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 + var re = $RegExp$2('^r', 'gy'); + re.lastIndex = 2; + return re.exec('str') !== null; + }); + + var regexpStickyHelpers = { + BROKEN_CARET: BROKEN_CARET, + MISSED_STICKY: MISSED_STICKY, + UNSUPPORTED_Y: UNSUPPORTED_Y$1 + }; + + var fails$4 = fails$l; + var global$5 = global$g; + + // babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError + var $RegExp$1 = global$5.RegExp; + + var regexpUnsupportedDotAll = fails$4(function () { + var re = $RegExp$1('.', 's'); + return !(re.dotAll && re.test('\n') && re.flags === 's'); + }); + + var fails$3 = fails$l; + var global$4 = global$g; + + // babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError + var $RegExp = global$4.RegExp; + + var regexpUnsupportedNcg = fails$3(function () { + var re = $RegExp('(?b)', 'g'); + return re.exec('b').groups.a !== 'b' || + 'b'.replace(re, '$c') !== 'bc'; + }); + + /* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */ + /* eslint-disable regexp/no-useless-quantifier -- testing */ + var call$6 = functionCall; + var uncurryThis$5 = functionUncurryThis; + var toString$3 = toString$4; + var regexpFlags = regexpFlags$1; + var stickyHelpers = regexpStickyHelpers; + var shared = shared$4; + var create$1 = objectCreate; + var getInternalState$1 = internalState.get; + var UNSUPPORTED_DOT_ALL = regexpUnsupportedDotAll; + var UNSUPPORTED_NCG = regexpUnsupportedNcg; + + var nativeReplace = shared('native-string-replace', String.prototype.replace); + var nativeExec = RegExp.prototype.exec; + var patchedExec = nativeExec; + var charAt$3 = uncurryThis$5(''.charAt); + var indexOf = uncurryThis$5(''.indexOf); + var replace$1 = uncurryThis$5(''.replace); + var stringSlice$2 = uncurryThis$5(''.slice); + + var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/; + var re2 = /b*/g; + call$6(nativeExec, re1, 'a'); + call$6(nativeExec, re2, 'a'); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; + })(); + + var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET; + + // nonparticipating capturing group, copied from es5-shim's String#split patch. + var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG; + + if (PATCH) { + patchedExec = function exec(string) { + var re = this; + var state = getInternalState$1(re); + var str = toString$3(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + + if (raw) { + raw.lastIndex = re.lastIndex; + result = call$6(patchedExec, raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + + var groups = state.groups; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = call$6(regexpFlags, re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = replace$1(flags, 'y', ''); + if (indexOf(flags, 'g') === -1) { + flags += 'g'; + } + + strCopy = stringSlice$2(str, re.lastIndex); + // Support anchored sticky behavior. + if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt$3(str, re.lastIndex - 1) !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } + // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + reCopy = new RegExp('^(?:' + source + ')', flags); + } + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; + + match = call$6(nativeExec, sticky ? reCopy : re, strCopy); + + if (sticky) { + if (match) { + match.input = stringSlice$2(match.input, charsAdded); + match[0] = stringSlice$2(match[0], charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/ + call$6(nativeReplace, match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + if (match && groups) { + match.groups = object = create$1(null); + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + + return match; + }; + } + + var regexpExec$2 = patchedExec; + + var $$1 = _export; + var exec = regexpExec$2; + + // `RegExp.prototype.exec` method + // https://tc39.es/ecma262/#sec-regexp.prototype.exec + $$1({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { + exec: exec + }); + + var call$5 = functionCall; + var hasOwn$1 = hasOwnProperty_1; + var isPrototypeOf$1 = objectIsPrototypeOf; + var regExpFlags = regexpFlags$1; + + var RegExpPrototype$2 = RegExp.prototype; + + var regexpGetFlags = function (R) { + var flags = R.flags; + return flags === undefined && !('flags' in RegExpPrototype$2) && !hasOwn$1(R, 'flags') && isPrototypeOf$1(RegExpPrototype$2, R) + ? call$5(regExpFlags, R) : flags; + }; + + var PROPER_FUNCTION_NAME = functionName.PROPER; + var defineBuiltIn$3 = defineBuiltIn$8; + var anObject$4 = anObject$b; + var $toString$1 = toString$4; + var fails$2 = fails$l; + var getRegExpFlags = regexpGetFlags; + + var TO_STRING = 'toString'; + var RegExpPrototype$1 = RegExp.prototype; + var nativeToString = RegExpPrototype$1[TO_STRING]; + + var NOT_GENERIC = fails$2(function () { return nativeToString.call({ source: 'a', flags: 'b' }) !== '/a/b'; }); + // FF44- RegExp#toString has a wrong name + var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING; + + // `RegExp.prototype.toString` method + // https://tc39.es/ecma262/#sec-regexp.prototype.tostring + if (NOT_GENERIC || INCORRECT_NAME) { + defineBuiltIn$3(RegExpPrototype$1, TO_STRING, function toString() { + var R = anObject$4(this); + var pattern = $toString$1(R.source); + var flags = $toString$1(getRegExpFlags(R)); + return '/' + pattern + '/' + flags; + }, { unsafe: true }); + } + + var uncurryThis$4 = functionUncurryThis; + var toIntegerOrInfinity = toIntegerOrInfinity$3; + var toString$2 = toString$4; + var requireObjectCoercible$1 = requireObjectCoercible$4; + + var charAt$2 = uncurryThis$4(''.charAt); + var charCodeAt = uncurryThis$4(''.charCodeAt); + var stringSlice$1 = uncurryThis$4(''.slice); + + var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = toString$2(requireObjectCoercible$1($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = charCodeAt(S, position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING + ? charAt$2(S, position) + : first + : CONVERT_TO_STRING + ? stringSlice$1(S, position, position + 2) + : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; + }; + + var stringMultibyte = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) + }; + + var charAt$1 = stringMultibyte.charAt; + var toString$1 = toString$4; + var InternalStateModule$1 = internalState; + var defineIterator = iteratorDefine; + var createIterResultObject$1 = createIterResultObject$3; + + var STRING_ITERATOR = 'String Iterator'; + var setInternalState$1 = InternalStateModule$1.set; + var getInternalState = InternalStateModule$1.getterFor(STRING_ITERATOR); + + // `String.prototype[@@iterator]` method + // https://tc39.es/ecma262/#sec-string.prototype-@@iterator + defineIterator(String, 'String', function (iterated) { + setInternalState$1(this, { + type: STRING_ITERATOR, + string: toString$1(iterated), + index: 0 + }); + // `%StringIteratorPrototype%.next` method + // https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next + }, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return createIterResultObject$1(undefined, true); + point = charAt$1(string, index); + state.index += point.length; + return createIterResultObject$1(point, false); + }); + + // TODO: Remove from `core-js@4` since it's moved to entry points + + var call$4 = functionCall; + var defineBuiltIn$2 = defineBuiltIn$8; + var regexpExec$1 = regexpExec$2; + var fails$1 = fails$l; + var wellKnownSymbol$4 = wellKnownSymbol$f; + var createNonEnumerableProperty$1 = createNonEnumerableProperty$5; + + var SPECIES = wellKnownSymbol$4('species'); + var RegExpPrototype = RegExp.prototype; + + var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) { + var SYMBOL = wellKnownSymbol$4(KEY); + + var DELEGATES_TO_SYMBOL = !fails$1(function () { + // String methods call symbol-named RegExp methods + var O = {}; + O[SYMBOL] = function () { return 7; }; + return ''[KEY](O) !== 7; + }); + + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails$1(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + + if (KEY === 'split') { + // We can't use real regex here since it causes deoptimization + // and serious performance degradation in V8 + // https://github.com/zloirock/core-js/issues/306 + re = {}; + // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + re.constructor = {}; + re.constructor[SPECIES] = function () { return re; }; + re.flags = ''; + re[SYMBOL] = /./[SYMBOL]; + } + + re.exec = function () { + execCalled = true; + return null; + }; + + re[SYMBOL](''); + return !execCalled; + }); + + if ( + !DELEGATES_TO_SYMBOL || + !DELEGATES_TO_EXEC || + FORCED + ) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { + var $exec = regexp.exec; + if ($exec === regexpExec$1 || $exec === RegExpPrototype.exec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { done: true, value: call$4(nativeRegExpMethod, regexp, str, arg2) }; + } + return { done: true, value: call$4(nativeMethod, str, regexp, arg2) }; + } + return { done: false }; + }); + + defineBuiltIn$2(String.prototype, KEY, methods[0]); + defineBuiltIn$2(RegExpPrototype, SYMBOL, methods[1]); + } + + if (SHAM) createNonEnumerableProperty$1(RegExpPrototype[SYMBOL], 'sham', true); + }; + + // `SameValue` abstract operation + // https://tc39.es/ecma262/#sec-samevalue + // eslint-disable-next-line es/no-object-is -- safe + var sameValue$1 = Object.is || function is(x, y) { + // eslint-disable-next-line no-self-compare -- NaN check + return x === y ? x !== 0 || 1 / x === 1 / y : x !== x && y !== y; + }; + + var call$3 = functionCall; + var anObject$3 = anObject$b; + var isCallable$1 = isCallable$h; + var classof$2 = classofRaw$2; + var regexpExec = regexpExec$2; + + var $TypeError$3 = TypeError; + + // `RegExpExec` abstract operation + // https://tc39.es/ecma262/#sec-regexpexec + var regexpExecAbstract = function (R, S) { + var exec = R.exec; + if (isCallable$1(exec)) { + var result = call$3(exec, R, S); + if (result !== null) anObject$3(result); + return result; + } + if (classof$2(R) === 'RegExp') return call$3(regexpExec, R, S); + throw new $TypeError$3('RegExp#exec called on incompatible receiver'); + }; + + var call$2 = functionCall; + var fixRegExpWellKnownSymbolLogic = fixRegexpWellKnownSymbolLogic; + var anObject$2 = anObject$b; + var isNullOrUndefined$1 = isNullOrUndefined$4; + var requireObjectCoercible = requireObjectCoercible$4; + var sameValue = sameValue$1; + var toString = toString$4; + var getMethod$1 = getMethod$3; + var regExpExec = regexpExecAbstract; + + // @@search logic + fixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCallNative) { + return [ + // `String.prototype.search` method + // https://tc39.es/ecma262/#sec-string.prototype.search + function search(regexp) { + var O = requireObjectCoercible(this); + var searcher = isNullOrUndefined$1(regexp) ? undefined : getMethod$1(regexp, SEARCH); + return searcher ? call$2(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString(O)); + }, + // `RegExp.prototype[@@search]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@search + function (string) { + var rx = anObject$2(this); + var S = toString(string); + var res = maybeCallNative(nativeSearch, rx, S); + + if (res.done) return res.value; + + var previousLastIndex = rx.lastIndex; + if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0; + var result = regExpExec(rx, S); + if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex; + return result === null ? -1 : result.index; + } + ]; + }); + + // iterable DOM collections + // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods + var domIterables = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 + }; + + // in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList` + var documentCreateElement = documentCreateElement$2; + + var classList = documentCreateElement('span').classList; + var DOMTokenListPrototype$1 = classList && classList.constructor && classList.constructor.prototype; + + var domTokenListPrototype = DOMTokenListPrototype$1 === Object.prototype ? undefined : DOMTokenListPrototype$1; + + var global$3 = global$g; + var DOMIterables = domIterables; + var DOMTokenListPrototype = domTokenListPrototype; + var ArrayIteratorMethods = es_array_iterator; + var createNonEnumerableProperty = createNonEnumerableProperty$5; + var setToStringTag$1 = setToStringTag$4; + var wellKnownSymbol$3 = wellKnownSymbol$f; + + var ITERATOR$3 = wellKnownSymbol$3('iterator'); + var ArrayValues = ArrayIteratorMethods.values; + + var handlePrototype = function (CollectionPrototype, COLLECTION_NAME) { + if (CollectionPrototype) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype[ITERATOR$3] !== ArrayValues) try { + createNonEnumerableProperty(CollectionPrototype, ITERATOR$3, ArrayValues); + } catch (error) { + CollectionPrototype[ITERATOR$3] = ArrayValues; + } + setToStringTag$1(CollectionPrototype, COLLECTION_NAME, true); + if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try { + createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]); + } catch (error) { + CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME]; + } + } + } + }; + + for (var COLLECTION_NAME in DOMIterables) { + handlePrototype(global$3[COLLECTION_NAME] && global$3[COLLECTION_NAME].prototype, COLLECTION_NAME); + } + + handlePrototype(DOMTokenListPrototype, 'DOMTokenList'); + + var global$2 = global$g; + var DESCRIPTORS$2 = descriptors; + + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + + // Avoid NodeJS experimental warning + var safeGetBuiltIn$1 = function (name) { + if (!DESCRIPTORS$2) return global$2[name]; + var descriptor = getOwnPropertyDescriptor(global$2, name); + return descriptor && descriptor.value; + }; + + var fails = fails$l; + var wellKnownSymbol$2 = wellKnownSymbol$f; + var DESCRIPTORS$1 = descriptors; + var IS_PURE = isPure; + + var ITERATOR$2 = wellKnownSymbol$2('iterator'); + + var urlConstructorDetection = !fails(function () { + // eslint-disable-next-line unicorn/relative-url-style -- required for testing + var url = new URL('b?a=1&b=2&c=3', 'http://a'); + var params = url.searchParams; + var params2 = new URLSearchParams('a=1&a=2&b=3'); + var result = ''; + url.pathname = 'c%20d'; + params.forEach(function (value, key) { + params['delete']('b'); + result += key + value; + }); + params2['delete']('a', 2); + // `undefined` case is a Chromium 117 bug + // https://bugs.chromium.org/p/v8/issues/detail?id=14222 + params2['delete']('b', undefined); + return (IS_PURE && (!url.toJSON || !params2.has('a', 1) || params2.has('a', 2) || !params2.has('a', undefined) || params2.has('b'))) + || (!params.size && (IS_PURE || !DESCRIPTORS$1)) + || !params.sort + || url.href !== 'http://a/c%20d?a=1&c=3' + || params.get('c') !== '3' + || String(new URLSearchParams('?a=1')) !== 'a=1' + || !params[ITERATOR$2] + // throws in Edge + || new URL('https://a@b').username !== 'a' + || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b' + // not punycoded in Edge + || new URL('http://тест').host !== 'xn--e1aybc' + // not escaped in Chrome 62- + || new URL('http://a#б').hash !== '#%D0%B1' + // fails in Chrome 66- + || result !== 'a1c3' + // throws in Safari + || new URL('http://x', undefined).host !== 'x'; + }); + + var makeBuiltIn = makeBuiltInExports; + var defineProperty = objectDefineProperty; + + var defineBuiltInAccessor$1 = function (target, name, descriptor) { + if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true }); + if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true }); + return defineProperty.f(target, name, descriptor); + }; + + var defineBuiltIn$1 = defineBuiltIn$8; + + var defineBuiltIns$1 = function (target, src, options) { + for (var key in src) defineBuiltIn$1(target, key, src[key], options); + return target; + }; + + var isPrototypeOf = objectIsPrototypeOf; + + var $TypeError$2 = TypeError; + + var anInstance$1 = function (it, Prototype) { + if (isPrototypeOf(Prototype, it)) return it; + throw new $TypeError$2('Incorrect invocation'); + }; + + var classofRaw = classofRaw$2; + var uncurryThis$3 = functionUncurryThis; + + var functionUncurryThisClause = function (fn) { + // Nashorn bug: + // https://github.com/zloirock/core-js/issues/1128 + // https://github.com/zloirock/core-js/issues/1130 + if (classofRaw(fn) === 'Function') return uncurryThis$3(fn); + }; + + var uncurryThis$2 = functionUncurryThisClause; + var aCallable$1 = aCallable$4; + var NATIVE_BIND = functionBindNative; + + var bind$1 = uncurryThis$2(uncurryThis$2.bind); + + // optional / simple context binding + var functionBindContext = function (fn, that) { + aCallable$1(fn); + return that === undefined ? fn : NATIVE_BIND ? bind$1(fn, that) : function (/* ...args */) { + return fn.apply(that, arguments); + }; + }; + + var classof$1 = classof$6; + var getMethod = getMethod$3; + var isNullOrUndefined = isNullOrUndefined$4; + var Iterators = iterators; + var wellKnownSymbol$1 = wellKnownSymbol$f; + + var ITERATOR$1 = wellKnownSymbol$1('iterator'); + + var getIteratorMethod$2 = function (it) { + if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR$1) + || getMethod(it, '@@iterator') + || Iterators[classof$1(it)]; + }; + + var call$1 = functionCall; + var aCallable = aCallable$4; + var anObject$1 = anObject$b; + var tryToString = tryToString$2; + var getIteratorMethod$1 = getIteratorMethod$2; + + var $TypeError$1 = TypeError; + + var getIterator$1 = function (argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod$1(argument) : usingIterator; + if (aCallable(iteratorMethod)) return anObject$1(call$1(iteratorMethod, argument)); + throw new $TypeError$1(tryToString(argument) + ' is not iterable'); + }; + + var $TypeError = TypeError; + + var validateArgumentsLength$1 = function (passed, required) { + if (passed < required) throw new $TypeError('Not enough arguments'); + return passed; + }; + + var uncurryThis$1 = functionUncurryThis; + + var arraySlice$1 = uncurryThis$1([].slice); + + var arraySlice = arraySlice$1; + + var floor = Math.floor; + + var sort = function (array, comparefn) { + var length = array.length; + + if (length < 8) { + // insertion sort + var i = 1; + var element, j; + + while (i < length) { + j = i; + element = array[i]; + while (j && comparefn(array[j - 1], element) > 0) { + array[j] = array[--j]; + } + if (j !== i++) array[j] = element; + } + } else { + // merge sort + var middle = floor(length / 2); + var left = sort(arraySlice(array, 0, middle), comparefn); + var right = sort(arraySlice(array, middle), comparefn); + var llength = left.length; + var rlength = right.length; + var lindex = 0; + var rindex = 0; + + while (lindex < llength || rindex < rlength) { + array[lindex + rindex] = (lindex < llength && rindex < rlength) + ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++] + : lindex < llength ? left[lindex++] : right[rindex++]; + } + } + + return array; + }; + + var arraySort$1 = sort; + + // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` + + var $ = _export; + var global$1 = global$g; + var safeGetBuiltIn = safeGetBuiltIn$1; + var call = functionCall; + var uncurryThis = functionUncurryThis; + var DESCRIPTORS = descriptors; + var USE_NATIVE_URL = urlConstructorDetection; + var defineBuiltIn = defineBuiltIn$8; + var defineBuiltInAccessor = defineBuiltInAccessor$1; + var defineBuiltIns = defineBuiltIns$1; + var setToStringTag = setToStringTag$4; + var createIteratorConstructor = iteratorCreateConstructor; + var InternalStateModule = internalState; + var anInstance = anInstance$1; + var isCallable = isCallable$h; + var hasOwn = hasOwnProperty_1; + var bind = functionBindContext; + var classof = classof$6; + var anObject = anObject$b; + var isObject = isObject$a; + var $toString = toString$4; + var create = objectCreate; + var createPropertyDescriptor = createPropertyDescriptor$5; + var getIterator = getIterator$1; + var getIteratorMethod = getIteratorMethod$2; + var createIterResultObject = createIterResultObject$3; + var validateArgumentsLength = validateArgumentsLength$1; + var wellKnownSymbol = wellKnownSymbol$f; + var arraySort = arraySort$1; + + var ITERATOR = wellKnownSymbol('iterator'); + var URL_SEARCH_PARAMS = 'URLSearchParams'; + var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator'; + var setInternalState = InternalStateModule.set; + var getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS); + var getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR); + + var nativeFetch = safeGetBuiltIn('fetch'); + var NativeRequest = safeGetBuiltIn('Request'); + var Headers = safeGetBuiltIn('Headers'); + var RequestPrototype = NativeRequest && NativeRequest.prototype; + var HeadersPrototype = Headers && Headers.prototype; + var RegExp$1 = global$1.RegExp; + var TypeError$1 = global$1.TypeError; + var decodeURIComponent = global$1.decodeURIComponent; + var encodeURIComponent = global$1.encodeURIComponent; + var charAt = uncurryThis(''.charAt); + var join = uncurryThis([].join); + var push = uncurryThis([].push); + var replace = uncurryThis(''.replace); + var shift = uncurryThis([].shift); + var splice = uncurryThis([].splice); + var split = uncurryThis(''.split); + var stringSlice = uncurryThis(''.slice); + + var plus = /\+/g; + var sequences = Array(4); + + var percentSequence = function (bytes) { + return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp$1('((?:%[\\da-f]{2}){' + bytes + '})', 'gi')); + }; + + var percentDecode = function (sequence) { + try { + return decodeURIComponent(sequence); + } catch (error) { + return sequence; + } + }; + + var deserialize = function (it) { + var result = replace(it, plus, ' '); + var bytes = 4; + try { + return decodeURIComponent(result); + } catch (error) { + while (bytes) { + result = replace(result, percentSequence(bytes--), percentDecode); + } + return result; + } + }; + + var find = /[!'()~]|%20/g; + + var replacements = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+' + }; + + var replacer = function (match) { + return replacements[match]; + }; + + var serialize = function (it) { + return replace(encodeURIComponent(it), find, replacer); + }; + + var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) { + setInternalState(this, { + type: URL_SEARCH_PARAMS_ITERATOR, + target: getInternalParamsState(params).entries, + index: 0, + kind: kind + }); + }, URL_SEARCH_PARAMS, function next() { + var state = getInternalIteratorState(this); + var target = state.target; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return createIterResultObject(undefined, true); + } + var entry = target[index]; + switch (state.kind) { + case 'keys': return createIterResultObject(entry.key, false); + case 'values': return createIterResultObject(entry.value, false); + } return createIterResultObject([entry.key, entry.value], false); + }, true); + + var URLSearchParamsState = function (init) { + this.entries = []; + this.url = null; + + if (init !== undefined) { + if (isObject(init)) this.parseObject(init); + else this.parseQuery(typeof init == 'string' ? charAt(init, 0) === '?' ? stringSlice(init, 1) : init : $toString(init)); + } + }; + + URLSearchParamsState.prototype = { + type: URL_SEARCH_PARAMS, + bindURL: function (url) { + this.url = url; + this.update(); + }, + parseObject: function (object) { + var entries = this.entries; + var iteratorMethod = getIteratorMethod(object); + var iterator, next, step, entryIterator, entryNext, first, second; + + if (iteratorMethod) { + iterator = getIterator(object, iteratorMethod); + next = iterator.next; + while (!(step = call(next, iterator)).done) { + entryIterator = getIterator(anObject(step.value)); + entryNext = entryIterator.next; + if ( + (first = call(entryNext, entryIterator)).done || + (second = call(entryNext, entryIterator)).done || + !call(entryNext, entryIterator).done + ) throw new TypeError$1('Expected sequence with length 2'); + push(entries, { key: $toString(first.value), value: $toString(second.value) }); + } + } else for (var key in object) if (hasOwn(object, key)) { + push(entries, { key: key, value: $toString(object[key]) }); + } + }, + parseQuery: function (query) { + if (query) { + var entries = this.entries; + var attributes = split(query, '&'); + var index = 0; + var attribute, entry; + while (index < attributes.length) { + attribute = attributes[index++]; + if (attribute.length) { + entry = split(attribute, '='); + push(entries, { + key: deserialize(shift(entry)), + value: deserialize(join(entry, '=')) + }); + } + } + } + }, + serialize: function () { + var entries = this.entries; + var result = []; + var index = 0; + var entry; + while (index < entries.length) { + entry = entries[index++]; + push(result, serialize(entry.key) + '=' + serialize(entry.value)); + } return join(result, '&'); + }, + update: function () { + this.entries.length = 0; + this.parseQuery(this.url.query); + }, + updateURL: function () { + if (this.url) this.url.update(); + } + }; + + // `URLSearchParams` constructor + // https://url.spec.whatwg.org/#interface-urlsearchparams + var URLSearchParamsConstructor = function URLSearchParams(/* init */) { + anInstance(this, URLSearchParamsPrototype); + var init = arguments.length > 0 ? arguments[0] : undefined; + var state = setInternalState(this, new URLSearchParamsState(init)); + if (!DESCRIPTORS) this.size = state.entries.length; + }; + + var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype; + + defineBuiltIns(URLSearchParamsPrototype, { + // `URLSearchParams.prototype.append` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-append + append: function append(name, value) { + var state = getInternalParamsState(this); + validateArgumentsLength(arguments.length, 2); + push(state.entries, { key: $toString(name), value: $toString(value) }); + if (!DESCRIPTORS) this.length++; + state.updateURL(); + }, + // `URLSearchParams.prototype.delete` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-delete + 'delete': function (name /* , value */) { + var state = getInternalParamsState(this); + var length = validateArgumentsLength(arguments.length, 1); + var entries = state.entries; + var key = $toString(name); + var $value = length < 2 ? undefined : arguments[1]; + var value = $value === undefined ? $value : $toString($value); + var index = 0; + while (index < entries.length) { + var entry = entries[index]; + if (entry.key === key && (value === undefined || entry.value === value)) { + splice(entries, index, 1); + if (value !== undefined) break; + } else index++; + } + if (!DESCRIPTORS) this.size = entries.length; + state.updateURL(); + }, + // `URLSearchParams.prototype.get` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-get + get: function get(name) { + var entries = getInternalParamsState(this).entries; + validateArgumentsLength(arguments.length, 1); + var key = $toString(name); + var index = 0; + for (; index < entries.length; index++) { + if (entries[index].key === key) return entries[index].value; + } + return null; + }, + // `URLSearchParams.prototype.getAll` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-getall + getAll: function getAll(name) { + var entries = getInternalParamsState(this).entries; + validateArgumentsLength(arguments.length, 1); + var key = $toString(name); + var result = []; + var index = 0; + for (; index < entries.length; index++) { + if (entries[index].key === key) push(result, entries[index].value); + } + return result; + }, + // `URLSearchParams.prototype.has` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-has + has: function has(name /* , value */) { + var entries = getInternalParamsState(this).entries; + var length = validateArgumentsLength(arguments.length, 1); + var key = $toString(name); + var $value = length < 2 ? undefined : arguments[1]; + var value = $value === undefined ? $value : $toString($value); + var index = 0; + while (index < entries.length) { + var entry = entries[index++]; + if (entry.key === key && (value === undefined || entry.value === value)) return true; + } + return false; + }, + // `URLSearchParams.prototype.set` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-set + set: function set(name, value) { + var state = getInternalParamsState(this); + validateArgumentsLength(arguments.length, 1); + var entries = state.entries; + var found = false; + var key = $toString(name); + var val = $toString(value); + var index = 0; + var entry; + for (; index < entries.length; index++) { + entry = entries[index]; + if (entry.key === key) { + if (found) splice(entries, index--, 1); + else { + found = true; + entry.value = val; + } + } + } + if (!found) push(entries, { key: key, value: val }); + if (!DESCRIPTORS) this.size = entries.length; + state.updateURL(); + }, + // `URLSearchParams.prototype.sort` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-sort + sort: function sort() { + var state = getInternalParamsState(this); + arraySort(state.entries, function (a, b) { + return a.key > b.key ? 1 : -1; + }); + state.updateURL(); + }, + // `URLSearchParams.prototype.forEach` method + forEach: function forEach(callback /* , thisArg */) { + var entries = getInternalParamsState(this).entries; + var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined); + var index = 0; + var entry; + while (index < entries.length) { + entry = entries[index++]; + boundFunction(entry.value, entry.key, this); + } + }, + // `URLSearchParams.prototype.keys` method + keys: function keys() { + return new URLSearchParamsIterator(this, 'keys'); + }, + // `URLSearchParams.prototype.values` method + values: function values() { + return new URLSearchParamsIterator(this, 'values'); + }, + // `URLSearchParams.prototype.entries` method + entries: function entries() { + return new URLSearchParamsIterator(this, 'entries'); + } + }, { enumerable: true }); + + // `URLSearchParams.prototype[@@iterator]` method + defineBuiltIn(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: 'entries' }); + + // `URLSearchParams.prototype.toString` method + // https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior + defineBuiltIn(URLSearchParamsPrototype, 'toString', function toString() { + return getInternalParamsState(this).serialize(); + }, { enumerable: true }); + + // `URLSearchParams.prototype.size` getter + // https://github.com/whatwg/url/pull/734 + if (DESCRIPTORS) defineBuiltInAccessor(URLSearchParamsPrototype, 'size', { + get: function size() { + return getInternalParamsState(this).entries.length; + }, + configurable: true, + enumerable: true + }); + + setToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS); + + $({ global: true, constructor: true, forced: !USE_NATIVE_URL }, { + URLSearchParams: URLSearchParamsConstructor + }); + + // Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams` + if (!USE_NATIVE_URL && isCallable(Headers)) { + var headersHas = uncurryThis(HeadersPrototype.has); + var headersSet = uncurryThis(HeadersPrototype.set); + + var wrapRequestOptions = function (init) { + if (isObject(init)) { + var body = init.body; + var headers; + if (classof(body) === URL_SEARCH_PARAMS) { + headers = init.headers ? new Headers(init.headers) : new Headers(); + if (!headersHas(headers, 'content-type')) { + headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); + } + return create(init, { + body: createPropertyDescriptor(0, $toString(body)), + headers: createPropertyDescriptor(0, headers) + }); + } + } return init; + }; + + if (isCallable(nativeFetch)) { + $({ global: true, enumerable: true, dontCallGetSet: true, forced: true }, { + fetch: function fetch(input /* , init */) { + return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {}); + } + }); + } + + if (isCallable(NativeRequest)) { + var RequestConstructor = function Request(input /* , init */) { + anInstance(this, RequestPrototype); + return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {}); + }; + + RequestPrototype.constructor = RequestConstructor; + RequestConstructor.prototype = RequestPrototype; + + $({ global: true, constructor: true, dontCallGetSet: true, forced: true }, { + Request: RequestConstructor + }); + } + } + + /** + * @author: general + * @website: note.generals.space + * @email: generals.space@gmail.com + * @github: https://github.com/generals-space/bootstrap-table-addrbar + * @update: zhixin wen + */ + + Object.assign($$6.fn.bootstrapTable.defaults, { + addrbar: false, + addrPrefix: '' + }); + $$6.BootstrapTable = /*#__PURE__*/function (_$$BootstrapTable) { + _inherits(_class, _$$BootstrapTable); + function _class() { + _classCallCheck(this, _class); + return _callSuper(this, _class, arguments); + } + _createClass(_class, [{ + key: "init", + value: function init() { + var _get2; + if (this.options.pagination && this.options.addrbar) { + this.initAddrbar(); + } + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + (_get2 = _get(_getPrototypeOf(_class.prototype), "init", this)).call.apply(_get2, [this].concat(args)); + } + + /* + * Priority order: + * The value specified by the user has the highest priority. + * If it is not specified, it will be obtained from the address bar. + * If it is not obtained, the default value will be used. + */ + }, { + key: "getDefaultOptionValue", + value: function getDefaultOptionValue(optionName, prefixName) { + if (this.options[optionName] !== $$6.BootstrapTable.DEFAULTS[optionName]) { + return this.options[optionName]; + } + return this.searchParams.get("".concat(this.options.addrPrefix || '').concat(prefixName)) || $$6.BootstrapTable.DEFAULTS[optionName]; + } + }, { + key: "initAddrbar", + value: function initAddrbar() { + var _this = this; + // 标志位, 初始加载后关闭 + this.addrbarInit = true; + this.searchParams = new URLSearchParams(window.location.search.substring(1)); + this.options.pageNumber = +this.getDefaultOptionValue('pageNumber', 'page'); + this.options.pageSize = +this.getDefaultOptionValue('pageSize', 'size'); + this.options.sortOrder = this.getDefaultOptionValue('sortOrder', 'order'); + this.options.sortName = this.getDefaultOptionValue('sortName', 'sort'); + this.options.searchText = this.getDefaultOptionValue('searchText', 'search'); + var prefix = this.options.addrPrefix || ''; + var onLoadSuccess = this.options.onLoadSuccess; + var onPageChange = this.options.onPageChange; + this.options.onLoadSuccess = function (data) { + if (_this.addrbarInit) { + _this.addrbarInit = false; + } else { + _this.updateHistoryState(prefix); + } + if (onLoadSuccess) { + onLoadSuccess.call(_this, data); + } + }; + this.options.onPageChange = function (number, size) { + _this.updateHistoryState(prefix); + if (onPageChange) { + onPageChange.call(_this, number, size); + } + }; + } + }, { + key: "updateHistoryState", + value: function updateHistoryState(prefix) { + var params = {}; + params["".concat(prefix, "page")] = this.options.pageNumber; + params["".concat(prefix, "size")] = this.options.pageSize; + params["".concat(prefix, "order")] = this.options.sortOrder; + params["".concat(prefix, "sort")] = this.options.sortName; + params["".concat(prefix, "search")] = this.options.searchText; + for (var _i = 0, _Object$entries = Object.entries(params); _i < _Object$entries.length; _i++) { + var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), + key = _Object$entries$_i[0], + value = _Object$entries$_i[1]; + if (value === undefined) { + this.searchParams.delete(key); + } else { + this.searchParams.set(key, value); + } + } + var url = "?".concat(this.searchParams.toString()); + if (location.hash) { + url += location.hash; + } + window.history.pushState({}, '', url); + } + }, { + key: "resetSearch", + value: function resetSearch(text) { + _get(_getPrototypeOf(_class.prototype), "resetSearch", this).call(this, text); + this.options.searchText = text || ''; + } + }]); + return _class; + }($$6.BootstrapTable); + +})); + jQuery.base64 = (function($) { // private property @@ -21013,118 +22141,120 @@ jQuery.base64 = (function($) { /* tableExport.jquery.plugin - Version 1.28.0 + Version 1.30.0 - Copyright (c) 2015-2023 hhurz, + Copyright (c) 2015-2024 hhurz, https://github.com/hhurz/tableExport.jquery.plugin Based on https://github.com/kayalshri/tableExport.jquery.plugin Licensed under the MIT License */ -var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(d,I,w){d instanceof String&&(d=String(d));for(var J=d.length,K=0;Ke&&"undefined"!==typeof fa[e]&&-1!==d.inArray(fa[e],b.ignoreColumn))&&(h=!0):h=!0;return h}function G(a,c,e,h,f){if("function"===typeof f){var x=!1;"function"===typeof b.onIgnoreRow&&(x=b.onIgnoreRow(d(a),e));if(!1===x&&(0===b.ignoreRow.length||-1===d.inArray(e,b.ignoreRow)&&-1===d.inArray(e-h,b.ignoreRow))&&O(d(a))){a= -P(d(a),c);var m=a.length,g=0,p=0;a.each(function(){var a=d(this),c=Q(this),b=ha(this),h;d.each(N,function(){if(e>this.s.r&&e<=this.e.r&&g>=this.s.c&&g<=this.e.c)for(h=0;h<=this.e.c-this.s.c;++h)m++,p++,f(null,e,g++)});if(b||c)c=c||1,N.push({s:{r:e,c:g},e:{r:e+(b||1)-1,c:g+c-1}});!1===Va(a,m,p++)&&f(this,e,g++);if(1=this.s.r&&e<=this.e.r&&g>=this.s.c&&g<=this.e.c)for(var a=0;a<=this.e.c-this.s.c;++a)f(null,e,g++)})}}}function Wa(a,c, -b,h){if("undefined"!==typeof h.images&&(b=h.images[b],"undefined"!==typeof b)){c=c.getBoundingClientRect();var e=a.width/a.height,d=c.width/c.height,m=a.width,g=a.height,p=19.049976/25.4,B=0;d<=e?(g=Math.min(a.height,c.height),m=c.width*g/c.height):d>e&&(m=Math.min(a.width,c.width),g=c.height*m/c.width);m*=p;g*=p;ga.textPos.x&&h+B>a.textPos.x+a.width&&(0<=".,!%*;:=-".indexOf(p.charAt(0))&&(z=p.charAt(0),B=e.doc.getStringUnitWidth(z)*e.doc.internal.getFontSize(),h+B<=a.textPos.x+a.width&&(za(z,h,f,x),p=p.substring(1,p.length)),B=e.doc.getStringUnitWidth(p)*e.doc.internal.getFontSize()),h=a.textPos.x,f+=e.doc.internal.getFontSize()); -if("visible"!==a.styles.overflow)for(;p.length&&h+B>a.textPos.x+a.width;)p=p.substring(0,p.length-1),B=e.doc.getStringUnitWidth(p)*e.doc.internal.getFontSize();za(p,h,f,x);h+=B}if(m||g)d(c).is("b")?m=!1:d(c).is("i")&&(g=!1),e.doc.setFont("undefined ",m||g?m?"bold":"italic":"normal");c=c.nextSibling}a.textPos.x=h;a.textPos.y=f}else za(a.text,a.textPos.x,a.textPos.y,x)}}function la(a,c,b){return null==a?"":a.toString().replace(new RegExp(null==c?"":c.toString().replace(/([.*+?^=!:${}()|\[\]\/\\])/g, -"\\$1"),"g"),b)}function Ha(a){return null==a?"":a.toString().replace(/^\s+/,"")}function Ia(a){return null==a?"":a.toString().replace(/\s+$/,"")}function ob(a){if(0===b.date.html.length)return!1;b.date.pattern.lastIndex=0;var c=b.date.pattern.exec(a);if(null==c)return!1;a=+c[b.date.match_y];if(0>a||8099e&&"undefined"!==typeof fa[e]&&-1!==d.inArray(fa[e],b.ignoreColumn))&&(h=!0):h=!0;return h}function I(a,c,e,h,f){if("function"===typeof f){var w=!1;"function"===typeof b.onIgnoreRow&&(w=b.onIgnoreRow(d(a),e));if(!1===w&&(0===b.ignoreRow.length||-1===d.inArray(e,b.ignoreRow)&&-1===d.inArray(e-h,b.ignoreRow))&&O(d(a))){a= +P(d(a),c);var m=a.length,g=0,p=0;a.each(function(){var a=d(this),c=Y(this),b=ka(this),h;d.each(N,function(){if(e>this.s.r&&e<=this.e.r&&g>=this.s.c&&g<=this.e.c)for(h=0;h<=this.e.c-this.s.c;++h)m++,p++,f(null,e,g++)});if(b||c)c=c||1,N.push({s:{r:e,c:g},e:{r:e+(b||1)-1,c:g+c-1}});!1===Wa(a,m,p++)&&f(this,e,g++);if(1=this.s.r&&e<=this.e.r&&g>=this.s.c&&g<=this.e.c)for(var a=0;a<=this.e.c-this.s.c;++a)f(null,e,g++)})}}}function Xa(a,c, +b,h){if("undefined"!==typeof h.images&&(b=h.images[b],"undefined"!==typeof b)){c=c.getBoundingClientRect();var e=a.width/a.height,d=c.width/c.height,m=a.width,g=a.height,p=19.049976/25.4,B=0;d<=e?(g=Math.min(a.height,c.height),m=c.width*g/c.height):d>e&&(m=Math.min(a.width,c.width),g=c.height*m/c.width);m*=p;g*=p;ga.textPos.x&&h+B>a.textPos.x+a.width&&(0<=".,!%*;:=-".indexOf(p.charAt(0))&&(A=p.charAt(0),B=e.doc.getStringUnitWidth(A)*e.doc.internal.getFontSize(),h+B<=a.textPos.x+a.width&&(za(A,h,f,w),p=p.substring(1,p.length)),B=e.doc.getStringUnitWidth(p)*e.doc.internal.getFontSize()),h=a.textPos.x,f+=e.doc.internal.getFontSize()); +if("visible"!==a.styles.overflow)for(;p.length&&h+B>a.textPos.x+a.width;)p=p.substring(0,p.length-1),B=e.doc.getStringUnitWidth(p)*e.doc.internal.getFontSize();za(p,h,f,w);h+=B}if(m||g)d(c).is("b")?m=!1:d(c).is("i")&&(g=!1),e.doc.setFont("undefined ",m||g?m?"bold":"italic":"normal");c=c.nextSibling}a.textPos.x=h;a.textPos.y=f}else za(a.text,a.textPos.x,a.textPos.y,w)}}function la(a,c,b){return null==a?"":a.toString().replace(new RegExp(null==c?"":c.toString().replace(/([.*+?^=!:${}()|\[\]\/\\])/g, +"\\$1"),"g"),b)}function Ha(a){return null==a?"":a.toString().replace(/^\s+/,"")}function Ia(a){return null==a?"":a.toString().replace(/\s+$/,"")}function ob(a){if(0===b.date.html.length)return!1;b.date.pattern.lastIndex=0;var c=b.date.pattern.exec(a);if(null==c)return!1;a=+c[b.date.match_y];if(0>a||8099"+g+"",null,!1);var p=0,B=0;g="";d.each(a,function(){if(d(this).is("input"))g+=m.find("input").eq(p++).val();else if(d(this).is("select"))g+=m.find("select option:selected").eq(B++).text();else if(d(this).is("br"))g+="
";else{if("undefined"===typeof d(this).html())g+=d(this).text(); -else if(void 0===jQuery().bootstrapTable||!1===d(this).hasClass("fht-cell")&&!1===d(this).hasClass("filterControl")&&0===m.parents(".detail-view").length)g+=d(this).html();if(d(this).is("a")){var a=m.find("a").attr("href")||"";f="function"===typeof b.onCellHtmlHyperlink?f+b.onCellHtmlHyperlink(m,c,e,a,g):"href"===b.htmlHyperlink?f+a:f+g;g=""}}})}if(g&&""!==g&&!0===b.htmlContent)f=d.trim(g);else if(g&&""!==g)if(""!==m.attr("data-tableexport-cellformat")){var z=g.replace(/\n/g,"\u2028").replace(/(<\s*br([^>]*)>)/gi, -"\u2060"),k=d("
").html(z).contents();a=!1;z="";d.each(k.text().split("\u2028"),function(a,c){0a?1:0)).split(".");1===k.length&&(k[1]="");var l=3a?"-":"")+(b.numbers.output.thousandsSeparator?(l?k[0].substr(0,l)+b.numbers.output.thousandsSeparator:"")+k[0].substr(l).replace(/(\d{3})(?=\d)/g,"$1"+b.numbers.output.thousandsSeparator):k[0])+(k[1].length?b.numbers.output.decimalMark+ -k[1]:"")}}else f=g;!0===b.escape&&(f=escape(f));"function"===typeof b.onCellData&&(f=b.onCellData(m,c,e,f,x),m.data("teUserDefText",1))}void 0!==h&&(h.type=x);return f}function db(a){return 0x?f+=String.fromCharCode(x):(127x?f+=String.fromCharCode(x>>6|192):(f+=String.fromCharCode(x>>12|224),f+=String.fromCharCode(x>>6&63|128)),f+=String.fromCharCode(x&63|128))}a=f}for(;d>2;m=(m&3)<<4|f>>4;var g=(f&15)<<2|c>>6;var p=c&63;isNaN(f)?g=p=64:isNaN(c)&&(p=64);b=b+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(x)+ +else if(void 0===jQuery().bootstrapTable||!1===d(this).hasClass("fht-cell")&&!1===d(this).hasClass("filterControl")&&0===m.parents(".detail-view").length)g+=d(this).html();if(d(this).is("a")){var a=m.find("a").attr("href")||"";f="function"===typeof b.onCellHtmlHyperlink?f+b.onCellHtmlHyperlink(m,c,e,a,g):"href"===b.htmlHyperlink?f+a:f+g;g=""}}})}if(g&&""!==g&&!0===b.htmlContent)f=d.trim(g);else if(g&&""!==g)if(""!==m.attr("data-tableexport-cellformat")){var A=g.replace(/\n/g,"\u2028").replace(/(<\s*br([^>]*)>)/gi, +"\u2060"),k=d("
").html(A).contents();a=!1;A="";d.each(k.text().split("\u2028"),function(a,c){0a?1:0)).split(".");1===k.length&&(k[1]="");var l=3a?"-":"")+(b.numbers.output.thousandsSeparator?(l?k[0].substr(0,l)+b.numbers.output.thousandsSeparator:"")+k[0].substr(l).replace(/(\d{3})(?=\d)/g,"$1"+b.numbers.output.thousandsSeparator):k[0])+(k[1].length?b.numbers.output.decimalMark+ +k[1]:"")}}else f=g;!0===b.escape&&(f=escape(f));"function"===typeof b.onCellData&&(f=b.onCellData(m,c,e,f,w),m.data("teUserDefText",1))}void 0!==h&&(h.type=w);return f}function eb(a){return 0w?f+=String.fromCharCode(w):(127w?f+=String.fromCharCode(w>>6|192):(f+=String.fromCharCode(w>>12|224),f+=String.fromCharCode(w>>6&63|128)),f+=String.fromCharCode(w&63|128))}a=f}for(;d>2;m=(m&3)<<4|f>>4;var g=(f&15)<<2|c>>6;var p=c&63;isNaN(f)?g=p=64:isNaN(c)&&(p=64);b=b+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(w)+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(m)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(g)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(p)}return b}function sb(a,c,b,d){c&&"object"===typeof c||console.error("The headers should be an object or array, is: "+typeof c);b&&"object"===typeof b||console.error("The data should be an object or array, is: "+typeof b);d&&"object"!==typeof d&&console.error("The data should be an object or array, is: "+ -typeof b);Array.prototype.forEach||console.error("The current browser does not support Array.prototype.forEach which is required for jsPDF-AutoTable");y=a;l=tb(d||{});Ma=1;F={y:!1===l.startY?l.margin.top:l.startY};a={textColor:30,fontSize:y.internal.getFontSize(),fontStyle:y.internal.getFont().fontStyle,fontName:y.internal.getFont().fontName};ub(c,b);vb();c=l.startY+l.margin.bottom+q.headerRow.height+(q.rows[0]&&"auto"===l.pageBreak?q.rows[0].height:0);"avoid"===l.pageBreak&&(c+=q.height);if("always"=== -l.pageBreak&&!1!==l.startY||!1!==l.startY&&c>y.internal.pageSize.height)y.addPage(),F.y=l.margin.top;ma(a);l.beforePageContent(U());!1!==l.drawHeaderRow(q.headerRow,U({row:q.headerRow}))&&Na(q.headerRow,l.drawHeaderCell);ma(a);wb();l.afterPageContent(U());ma(a);return y}function za(a,c,b,d){"number"===typeof c&&"number"===typeof b||console.error("The x and y parameters are required. Missing for the text: ",a);var e=y.internal.getFontSize()/y.internal.scaleFactor,h=/\r\n|\r|\n/g,m=null,g=1;if("middle"=== -d.valign||"bottom"===d.valign||"center"===d.halign||"right"===d.halign)m="string"===typeof a?a.split(h):a,g=m.length||1;b+=e*(2-1.15);"middle"===d.valign?b-=g/2*e:"bottom"===d.valign&&(b-=g*e);if("center"===d.halign||"right"===d.halign){h=e;"center"===d.halign&&(h*=.5);if(m&&1<=g){for(a=0;ax.internal.pageSize.height)x.addPage(),H.y=l.margin.top;ma(a);l.beforePageContent(T());!1!==l.drawHeaderRow(q.headerRow,T({row:q.headerRow}))&&Oa(q.headerRow,l.drawHeaderCell);ma(a);wb();l.afterPageContent(T());ma(a);return x}function za(a,c,b,d){"number"===typeof c&&"number"===typeof b||console.error("The x and y parameters are required. Missing for the text: ",a);var e=x.internal.getFontSize()/x.internal.scaleFactor,h=/\r\n|\r|\n/g,m=null,g=1;if("middle"=== +d.valign||"bottom"===d.valign||"center"===d.halign||"right"===d.halign)m="string"===typeof a?a.split(h):a,g=m.length||1;b+=e*(2-1.15);"middle"===d.valign?b-=g/2*e:"bottom"===d.valign&&(b-=g*e);if("center"===d.halign||"right"===d.halign){h=e;"center"===d.halign&&(h*=.5);if(m&&1<=g){for(a=0;ab.contentWidth&&(b.contentWidth=a)});b.width=b.contentWidth;a+=b.contentWidth});q.contentWidth=a;var b=y.internal.pageSize.width-l.margin.left-l.margin.right,d=b;"number"===typeof l.tableWidth?d=l.tableWidth:"wrap"===l.tableWidth&&(d=q.contentWidth);q.width=db.contentWidth&&(b.contentWidth=a)});b.width=b.contentWidth;a+=b.contentWidth});q.contentWidth=a;var b=x.internal.pageSize.width-l.margin.left-l.margin.right,d=b;"number"===typeof l.tableWidth?d=l.tableWidth:"wrap"===l.tableWidth&&(d=q.contentWidth);q.width=dq.width?a.width=a.contentWidth:(h.push(a),f+=a.contentWidth,a.width=0);m+=a.width});hb(h,m,f,k);q.height=0;q.rows.concat(q.headerRow).forEach(function(a,b){var c=0,d=q.x;q.columns.forEach(function(b){var e=a.cells[b.dataKey];b.x=d;ma(e.styles);var g=b.width- -2*e.styles.cellPadding;"linebreak"===e.styles.overflow?e.text=y.splitTextToSize(e.text,g+1,{fontSize:e.styles.fontSize}):"ellipsize"===e.styles.overflow?e.text=Oa(e.text,g,e.styles):"visible"!==e.styles.overflow&&("hidden"===e.styles.overflow?e.text=Oa(e.text,g,e.styles,""):"function"===typeof e.styles.overflow?e.text=e.styles.overflow(e.text,g):console.error("Unrecognized overflow type: "+e.styles.overflow));e=Array.isArray(e.text)?e.text.length-1:0;e>c&&(c=e);d+=b.width});a.heightStyle=a.styles.rowHeight; -a.height=a.heightStyle+c*a.styles.fontSize*1.15+(2-1.15)/2*a.styles.fontSize;q.height+=a.height})}function hb(a,b,d,h){for(var c=q.width-b-d,e=0;ec&&p){a.splice(e,1);d-=m.contentWidth;m.width=h;b+=m.width;hb(a,b,d,h);break}else m.width=m.contentWidth+c*g}}function wb(){q.rows.forEach(function(a,b){F.y+a.height+l.margin.bottom>=y.internal.pageSize.height&&(l.afterPageContent(U()),y.addPage(),Ma++,F={x:l.margin.left,y:l.margin.top}, -l.beforePageContent(U()),!1!==l.drawHeaderRow(q.headerRow,U({row:q.headerRow}))&&Na(q.headerRow,l.drawHeaderCell));a.y=F.y;!1!==l.drawRow(a,U({row:a}))&&Na(a,l.drawCell)})}function Na(a,b){for(var c=0;c= -Ca(a,d))return a;for(;ba.length);)a=a.substring(0,a.length-1);return a.trim()+h}function Ca(a,b){ma(b);return y.getStringUnitWidth(a)*b.fontSize}function Z(a){var b={},d;for(d in a)a.hasOwnProperty(d)&&(b[d]=a[d]);for(var h=1;hc&&(c=e);d+=b.width});a.heightStyle=a.styles.rowHeight; +a.height=a.heightStyle+c*a.styles.fontSize*1.15+(2-1.15)/2*a.styles.fontSize;q.height+=a.height})}function hb(a,b,d,h){for(var c=q.width-b-d,e=0;ec&&p){a.splice(e,1);d-=m.contentWidth;m.width=h;b+=m.width;hb(a,b,d,h);break}else m.width=m.contentWidth+c*g}}function wb(){q.rows.forEach(function(a,b){H.y+a.height+l.margin.bottom>=x.internal.pageSize.height&&(l.afterPageContent(T()),x.addPage(),Na++,H={x:l.margin.left,y:l.margin.top}, +l.beforePageContent(T()),!1!==l.drawHeaderRow(q.headerRow,T({row:q.headerRow}))&&Oa(q.headerRow,l.drawHeaderCell));a.y=H.y;!1!==l.drawRow(a,T({row:a}))&&Oa(a,l.drawCell)})}function Oa(a,b){for(var c=0;c= +Ca(a,d))return a;for(;ba.length);)a=a.substring(0,a.length-1);return a.trim()+h}function Ca(a,b){ma(b);return x.getStringUnitWidth(a)*b.fontSize}function Z(a){var b={},d;for(d in a)a.hasOwnProperty(d)&&(b[d]=a[d]);for(var h=1;h"+E(a,b,d)+""});r++});da+="";var ib=1;A=Y(d(u));d(A).each(function(){var a=1;t="";G(this,"td,th",r,v.length+A.length,function(b,d,h){t+=""+E(b,d,h)+"";a++});0"!==t&&(da+=''+t+"",ib++);r++});da+="";if("string"=== -b.outputMode)return da;if("base64"===b.outputMode)return S(da);T(da,b.fileName+".xml","application/xml","utf-8","base64",!1)}else if("excel"===b.type&&"xmlss"===b.mso.fileFormat){var Sa=[],M=[];d(u).filter(function(){return O(d(this))}).each(function(){function a(a,b,c){var e=[];d(a).each(function(){var b=0,f=0;t="";G(this,"td,th",r,c+a.length,function(a,c,g){if(null!==a){var m="";c=E(a,c,g);g="String";if(!1!==jQuery.isNumeric(c))g="Number";else{var h=pb(c);!1!==h&&(c=h,g="Number",m+=' ss:StyleID="pct1"')}"Number"!== -g&&(c=c.replace(/\n/g,"
"));h=Q(a);a=ha(a);d.each(e,function(){if(r>=this.s.r&&r<=this.e.r&&f>=this.s.c&&f<=this.e.c)for(var a=0;a<=this.e.c-this.s.c;++a)f++,b++});if(a||h)a=a||1,h=h||1,e.push({s:{r:r,c:f},e:{r:r+a-1,c:f+h-1}});1'+d("
").text(c).html()+"\r";f++}});0\r'+ -t+"\r");r++});return a.length}var c=d(this),e="";"string"===typeof b.mso.worksheetName&&b.mso.worksheetName.length?e=b.mso.worksheetName+" "+(M.length+1):"undefined"!==typeof b.mso.worksheetName[M.length]&&(e=b.mso.worksheetName[M.length]);e.length||(e=c.find("caption").text()||"");e.length||(e="Table "+(M.length+1));e=d.trim(e.replace(/[\\\/[\]*:?'"]/g,"").substring(0,31));M.push(d("
").text(e).html());!1===b.exportHiddenCells&&(R=c.find("tr, th, td").filter(":hidden"),ka=0\r";e=a(X(c),"th,td",0);a(Y(c),"td,th",e);L+="\r";Sa.push(L)});for(var Da={},Ta={},ea,ra,oa=0,yb=M.length;oa"+G(a,b,d)+""});r++});da+="";var ib=1;y=X(d(v));d(y).each(function(){var a=1;u="";I(this,"td,th",r,z.length+y.length,function(b,d,h){u+=""+G(b,d,h)+"";a++});0"!==u&&(da+=''+u+"",ib++);r++});da+="";if("string"=== +b.outputMode)return da;if("base64"===b.outputMode)return R(da);S(da,b.fileName+".xml","application/xml","utf-8","base64",!1)}else if("excel"===b.type&&"xmlss"===b.mso.fileFormat){var Ta=[],M=[];d(v).filter(function(){return O(d(this))}).each(function(){function a(a,b,c){var e=[];d(a).each(function(){var b=0,f=0;u="";I(this,"td,th",r,c+a.length,function(a,c,g){if(null!==a){var m="";c=G(a,c,g);g="String";if(!1!==jQuery.isNumeric(c))g="Number";else{var h=pb(c);!1!==h&&(c=h,g="Number",m+=' ss:StyleID="pct1"')}"Number"!== +g&&(c=c.replace(/\n/g,"
"));h=Y(a);a=ka(a);d.each(e,function(){if(r>=this.s.r&&r<=this.e.r&&f>=this.s.c&&f<=this.e.c)for(var a=0;a<=this.e.c-this.s.c;++a)f++,b++});if(a||h)a=a||1,h=h||1,e.push({s:{r:r,c:f},e:{r:r+a-1,c:f+h-1}});1'+d("
").text(c).html()+"\r";f++}});0\r'+ +u+"\r");r++});return a.length}var c=d(this),e="";"string"===typeof b.mso.worksheetName&&b.mso.worksheetName.length?e=b.mso.worksheetName+" "+(M.length+1):"undefined"!==typeof b.mso.worksheetName[M.length]&&(e=b.mso.worksheetName[M.length]);e.length||(e=c.find("caption").text()||"");e.length||(e="Table "+(M.length+1));e=d.trim(e.replace(/[\\\/[\]*:?'"]/g,"").substring(0,31));M.push(d("
").text(e).html());!1===b.exportHiddenCells&&(Q=c.find("tr, th, td").filter(":hidden"),ja=0\r";e=a(W(c),"th,td",0);a(X(c),"td,th",e);L+="\r";Ta.push(L)});for(var Da={},Ua={},ea,ra,oa=0,yb=M.length;oa\r\r\r \r\r\r 9000\r 13860\r 0\r 0\r False\r False\r\r\r \r \r \r\r', -Ea=0;Ea\r'+Sa[Ea],W=b.mso.rtl?W+'\r\r\r':W+'\r',W+="\r";W+="\r";if("string"===b.outputMode)return W;if("base64"===b.outputMode)return S(W);T(W,b.fileName+".xml","application/xml","utf-8","base64",!1)}else if("excel"=== -b.type&&"xlsx"===b.mso.fileFormat){var sa=[],jb=XLSX.utils.book_new();d(u).filter(function(){return O(d(this))}).each(function(){for(var a=d(this),c,e={},h=this.getElementsByTagName("tr"),f=Math.min(1E7,h.length),k={s:{r:0,c:0},e:{r:0,c:0}},m=[],g,p=0,B=0,z,l,r,q,n,t=XLSX.SSF.get_table();pc||36c||48===c)u="n";else{if("date"===w.type||13c||44c||56===c)u="d"}else u="s";if(null!=C){if(0===C.length)g.t="z";else if(0!==C.trim().length&&"s"!==u)if("function"===w.type)g={f:C};else if("TRUE"===C)g={t:"b",v:!0};else if("FALSE"===C)g={t:"b",v:!1};else if("n"===u||isFinite(fb(C,b.numbers.output))){if(u= -fb(C,b.numbers.output),0===c&&"function"!==typeof b.mso.xlsx.formatId.numbers&&(c=b.mso.xlsx.formatId.numbers),isFinite(u)||isFinite(C))g={t:"n",v:isFinite(u)?u:C,z:"string"===typeof c?c:c in t?t[c]:c===b.mso.xlsx.formatId.currency?b.mso.xlsx.format.currency:"0.00"}}else if(!1!==(w=ob(C))||"d"===u)0===c&&"function"!==typeof b.mso.xlsx.formatId.date&&(c=b.mso.xlsx.formatId.date),g={t:"d",v:!1!==w?w:C,z:"string"===typeof c?c:c in t?t[c]:"m/d/yy"};(u=d(n).find("a"))&&u.length&&(u=u[0].hasAttribute("href")? -u.attr("href"):"",C="href"!==b.htmlHyperlink||""===u?C:"",w=""!==u?'=HYPERLINK("'+u+(C.length?'","'+C:"")+'")':"",""!==w&&("function"===typeof b.mso.xlsx.onHyperlink?(C=b.mso.xlsx.onHyperlink(d(n),p,z,u,C,w),g=0!==C.indexOf("=HYPERLINK")?{t:"s",v:C}:{f:C}):g={f:w}))}e[Ka({c:l,r:B})]=g;k.e.c=f&&(e["!fullref"]=La((k.e.r=h.length-p+B-1,k)));c="";"string"===typeof b.mso.worksheetName&& -b.mso.worksheetName.length?c=b.mso.worksheetName+" "+(sa.length+1):"undefined"!==typeof b.mso.worksheetName[sa.length]&&(c=b.mso.worksheetName[sa.length]);c.length||(c=a.find("caption").text()||"");c.length||(c="Table "+(sa.length+1));c=d.trim(c.replace(/[\\\/[\]*:?'"]/g,"").substring(0,31));sa.push(c);XLSX.utils.book_append_sheet(jb,e,c)});var zb=XLSX.write(jb,{type:"binary",bookType:b.mso.fileFormat,bookSST:!1});T(rb(zb),b.fileName+"."+b.mso.fileFormat,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", -"UTF-8","",!1)}else if("excel"===b.type||"xls"===b.type||"word"===b.type||"doc"===b.type){var ta="excel"===b.type||"xls"===b.type?"excel":"word",Ab="excel"===ta?"xls":"doc",Bb='xmlns:x="urn:schemas-microsoft-com:office:'+ta+'"',ua=L="";d(u).filter(function(){return O(d(this))}).each(function(){var a=d(this);""===ua&&(ua=b.mso.worksheetName||a.find("caption").text()||"Table",ua=d.trim(ua.replace(/[\\\/[\]*:?'"]/g,"").substring(0,31)));!1===b.exportHiddenCells&&(R=a.find("tr, th, td").filter(":hidden"), -ka=0";v=X(a);d(v).each(function(){var a=d(this),e=document.defaultView.getComputedStyle(a[0],null);t="";G(this,"th,td",r,v.length,function(a,c,d){if(null!==a){var f="";t+=""}});0"+t+"");r++});L+="";A=Y(a);d(A).each(function(){var a=d(this),e=null,h=null;t="";G(this,"td,th",r,v.length+A.length,function(c,k,m){if(null!==c){var g=E(c,k,m),f="",l=d(c).attr("data-tableexport-msonumberformat");"undefined"===typeof l&&"function"===typeof b.mso.onMsoNumberFormat&&(l=b.mso.onMsoNumberFormat(c,k,m));"undefined"!==typeof l&&""!==l&&(f="style=\"mso-number-format:'"+ -l+"'");if(b.mso.styles.length){e=document.defaultView.getComputedStyle(c,null);h=null;for(var n in b.mso.styles)k=b.mso.styles[n],l=H(e,k),""===l&&(null===h&&(h=document.defaultView.getComputedStyle(a[0],null)),l=H(h,k)),""!==l&&"0px none rgb(0, 0, 0)"!==l&&"rgba(0, 0, 0, 0)"!==l&&(f+=""===f?'style="':";",f+=k+":"+l)}t+=""));t+=">"+g+""}}); -0"+t+"");r++});b.displayTableName&&(L+=""+E(d("

"+b.tableName+"

"))+"");L+=""});var n='';n+="";n+='';"excel"===ta&&(n+="\x3c!--[if gte mso 9]>",n+="",n+="",n+="",n+="", -n+="",n+=ua,n+="",n+="",n+="",b.mso.rtl&&(n+=""),n+="",n+="",n+="",n+="",n+="",n+="";n+="@page { size:"+b.mso.pageOrientation+"; mso-page-orientation:"+b.mso.pageOrientation+"; }";n+="@page Section1 {size:"+V[b.mso.pageFormat][0]+"pt "+V[b.mso.pageFormat][1]+"pt";n+="; margin:1.0in 1.25in 1.0in 1.25in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-paper-source:0;}"; -n+="div.Section1 {page:Section1;}";n+="@page Section2 {size:"+V[b.mso.pageFormat][1]+"pt "+V[b.mso.pageFormat][0]+"pt";n+=";mso-page-orientation:"+b.mso.pageOrientation+";margin:1.25in 1.0in 1.25in 1.0in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-paper-source:0;}";n+="div.Section2 {page:Section2;}";n+="br {mso-data-placement:same-cell;}";n+="";n+="";n+="";n+='
';n+=L;n+="
";n+="";n+=""; -if("string"===b.outputMode)return n;if("base64"===b.outputMode)return S(n);T(n,b.fileName+"."+Ab,"application/vnd.ms-"+ta,"","base64",!1)}else if("png"===b.type)html2canvas(d(u)[0]).then(function(a){a=a.toDataURL();for(var c=atob(a.substring(22)),d=new ArrayBuffer(c.length),h=new Uint8Array(d),f=0;fkb){a>V.a0[0]&&(Fa="a0",va="l");for(var b in V)V.hasOwnProperty(b)&&V[b][1]>a&&(Fa=b,va="l",V[b][0]>a&&(va="p"));kb=a}}});b.jspdf.format=""===Fa?"a4":Fa;b.jspdf.orientation=""===va?"w":va}if(null== -k.doc&&(k.doc=new jspdf.jsPDF(b.jspdf.orientation,b.jspdf.unit,b.jspdf.format),k.wScaleFactor=1,k.hScaleFactor=1,"function"===typeof b.jspdf.onDocCreated))b.jspdf.onDocCreated(k.doc);Ba.fontName=k.doc.getFont().fontName;!0===k.outputImages&&(k.images={});"undefined"!==typeof k.images&&(d(u).filter(function(){return O(d(this))}).each(function(){var a=0;N=[];!1===b.exportHiddenCells&&(R=d(this).find("tr, th, td").filter(":hidden"),ka=0a.styles.rowHeight&&(a.styles.rowHeight=e)}a.styles.halign="inherit"===c.headerStyles.halign?"center":c.headerStyles.halign;a.styles.valign=c.headerStyles.valign;"undefined"!==typeof d.style&&!0!==d.style.hidden&&("inherit"===c.headerStyles.halign&&(a.styles.halign=d.style.align),"inherit"===c.styles.fillColor&&(a.styles.fillColor=d.style.bcolor),"inherit"===c.styles.textColor&&(a.styles.textColor=d.style.color),"inherit"=== -c.styles.fontStyle&&(a.styles.fontStyle=d.style.fstyle))}});"function"!==typeof c.createdCell&&(c.createdCell=function(a,b){b=k.teCells[b.row.index+":"+b.column.dataKey];a.styles.halign="inherit"===c.styles.halign?"center":c.styles.halign;a.styles.valign=c.styles.valign;"undefined"!==typeof b&&"undefined"!==typeof b.style&&!0!==b.style.hidden&&("inherit"===c.styles.halign&&(a.styles.halign=b.style.align),"inherit"===c.styles.fillColor&&(a.styles.fillColor=b.style.bcolor),"inherit"===c.styles.textColor&& -(a.styles.textColor=b.style.color),"inherit"===c.styles.fontStyle&&(a.styles.fontStyle=b.style.fstyle))});"function"!==typeof c.drawHeaderCell&&(c.drawHeaderCell=function(a,b){var c=k.columns[b.column.dataKey];return(!0!==c.style.hasOwnProperty("hidden")||!0!==c.style.hidden)&&0<=c.rowIndex?Ya(a,b,c):!1});"function"!==typeof c.drawCell&&(c.drawCell=function(a,b){var c=k.teCells[b.row.index+":"+b.column.dataKey];if(!0!==("undefined"!==typeof c&&c.isCanvas))Ya(a,b,c)&&(k.doc.rect(a.x,a.y,a.width,a.height, -a.styles.fillStyle),"undefined"===typeof c||"undefined"!==typeof c.hasUserDefText&&!0===c.hasUserDefText||"undefined"===typeof c.elements||!c.elements.length?cb(a,{},k):(b=a.height/c.rect.height,b>k.hScaleFactor&&(k.hScaleFactor=b),k.wScaleFactor=a.width/c.rect.width,b=a.textPos.y,ab(a,c.elements,k),a.textPos.y=b,cb(a,c.elements,k)));else{c=c.elements[0];var e=d(c).attr("data-tableexport-canvas"),f=c.getBoundingClientRect();a.width=f.width*k.wScaleFactor;a.height=f.height*k.hScaleFactor;b.row.height= -a.height;Wa(a,c,e,k)}return!1});k.headerrows=[];v=X(d(this));d(v).each(function(){a=0;k.headerrows[r]=[];G(this,"th,td",r,v.length,function(b,c,d){var e=eb(b);e.title=E(b,c,d);e.key=a++;e.rowIndex=r;k.headerrows[r].push(e)});r++});if(0\r'+Ta[Ea],V=b.mso.rtl?V+'\r\r\r':V+'\r',V+="\r";V+="\r";if("string"===b.outputMode)return V;if("base64"===b.outputMode)return R(V);S(V,b.fileName+".xml","application/xml","utf-8","base64",!1)}else if("excel"=== +b.type&&"xlsx"===b.mso.fileFormat){var sa=[],jb=XLSX.utils.book_new();d(v).filter(function(){return O(d(this))}).each(function(){for(var a=d(this),c,e={},h=this.getElementsByTagName("tr"),f=Math.min(1E7,h.length),k={s:{r:0,c:0},e:{r:0,c:0}},m=[],g,p=0,B=0,A,l,r,q,n,t=XLSX.SSF.get_table();pc||36c||48===c)v="n";else{if("date"===y.type||13c||44c||56===c)v="d"}else v="s";if(null!=C){if(0===C.length)g.t="z";else if(0!==C.trim().length&&"s"!==v)if("function"===y.type)g={f:C};else if("TRUE"===C)g={t:"b",v:!0};else if("FALSE"===C)g={t:"b",v:!1};else if("n"===v||isFinite(fb(C,b.numbers.output))){if(v= +fb(C,b.numbers.output),0===c&&"function"!==typeof b.mso.xlsx.formatId.numbers&&(c=b.mso.xlsx.formatId.numbers),isFinite(v)||isFinite(C))g={t:"n",v:isFinite(v)?v:C,z:"string"===typeof c?c:c in t?t[c]:c===b.mso.xlsx.formatId.currency?b.mso.xlsx.format.currency:"0.00"}}else if(!1!==(y=ob(C))||"d"===v)0===c&&"function"!==typeof b.mso.xlsx.formatId.date&&(c=b.mso.xlsx.formatId.date),g={t:"d",v:!1!==y?y:C,z:"string"===typeof c?c:c in t?t[c]:"m/d/yy"};(v=d(n).find("a"))&&v.length&&(v=v[0].hasAttribute("href")? +v.attr("href"):"",C="href"!==b.htmlHyperlink||""===v?C:"",y=""!==v?'=HYPERLINK("'+v+(C.length?'","'+C:"")+'")':"",""!==y&&("function"===typeof b.mso.xlsx.onHyperlink?(C=b.mso.xlsx.onHyperlink(d(n),p,A,v,C,y),g=0!==C.indexOf("=HYPERLINK")?{t:"s",v:C}:{f:C}):g={f:y}))}e[La({c:l,r:B})]=g;k.e.c=f&&(e["!fullref"]=Ma((k.e.r=h.length-p+B-1,k)));c="";"string"===typeof b.mso.worksheetName&& +b.mso.worksheetName.length?c=b.mso.worksheetName+" "+(sa.length+1):"undefined"!==typeof b.mso.worksheetName[sa.length]&&(c=b.mso.worksheetName[sa.length]);c.length||(c=a.find("caption").text()||"");c.length||(c="Table "+(sa.length+1));c=d.trim(c.replace(/[\\\/[\]*:?'"]/g,"").substring(0,31));sa.push(c);XLSX.utils.book_append_sheet(jb,e,c)});var zb=XLSX.write(jb,{type:"binary",bookType:b.mso.fileFormat,bookSST:!1});S(rb(zb),b.fileName+"."+b.mso.fileFormat,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", +"UTF-8","",!1)}else if("excel"===b.type||"xls"===b.type||"word"===b.type||"doc"===b.type){var ta="excel"===b.type||"xls"===b.type?"excel":"word",Ab="excel"===ta?"xls":"doc",Bb='xmlns:x="urn:schemas-microsoft-com:office:'+ta+'"',ua=L="";d(v).filter(function(){return O(d(this))}).each(function(){var a=d(this);""===ua&&(ua=b.mso.worksheetName||a.find("caption").text()||"Table",ua=d.trim(ua.replace(/[\\\/[\]*:?'"]/g,"").substring(0,31)));!1===b.exportHiddenCells&&(Q=a.find("tr, th, td").filter(":hidden"), +ja=0";z=W(a);d(z).each(function(){var a=d(this),e=document.defaultView.getComputedStyle(a[0],null);u="";I(this,"th,td",r,z.length,function(a,c,d){if(null!==a){var f="";u+=""}});0"+u+"");r++});L+="";y=X(a);d(y).each(function(){var a=d(this),e=null,h=null;u="";I(this,"td,th",r,z.length+y.length,function(c,k,m){if(null!==c){var g=G(c,k,m),f="",l=d(c).attr("data-tableexport-msonumberformat");"undefined"===typeof l&&"function"===typeof b.mso.onMsoNumberFormat&&(l=b.mso.onMsoNumberFormat(c,k,m));"undefined"!==typeof l&&""!==l&&(f="style=\"mso-number-format:'"+ +l+"'");if(b.mso.styles.length){e=document.defaultView.getComputedStyle(c,null);h=null;for(var n in b.mso.styles)k=b.mso.styles[n],l=J(e,k),""===l&&(null===h&&(h=document.defaultView.getComputedStyle(a[0],null)),l=J(h,k)),""!==l&&"0px none rgb(0, 0, 0)"!==l&&"rgba(0, 0, 0, 0)"!==l&&(f+=""===f?'style="':";",f+=k+":"+l)}u+=""));u+=">"+g+""}}); +0"+u+"");r++});b.displayTableName&&(L+=""+G(d("

"+b.tableName+"

"))+"");L+=""});var n='';n+="";n+='';"excel"===ta&&(n+="\x3c!--[if gte mso 9]>",n+="",n+="",n+="",n+="", +n+="",n+=ua,n+="",n+="",n+="",b.mso.rtl&&(n+=""),n+="",n+="",n+="",n+="",n+="",n+="";n+="@page { size:"+b.mso.pageOrientation+"; mso-page-orientation:"+b.mso.pageOrientation+"; }";n+="@page Section1 {size:"+U[b.mso.pageFormat][0]+"pt "+U[b.mso.pageFormat][1]+"pt";n+="; margin:1.0in 1.25in 1.0in 1.25in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-paper-source:0;}"; +n+="div.Section1 {page:Section1;}";n+="@page Section2 {size:"+U[b.mso.pageFormat][1]+"pt "+U[b.mso.pageFormat][0]+"pt";n+=";mso-page-orientation:"+b.mso.pageOrientation+";margin:1.25in 1.0in 1.25in 1.0in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-paper-source:0;}";n+="div.Section2 {page:Section2;}";n+="br {mso-data-placement:same-cell;}";n+="";n+="";n+="";n+='
';n+=L;n+="
";n+="";n+=""; +if("string"===b.outputMode)return n;if("base64"===b.outputMode)return R(n);S(n,b.fileName+"."+Ab,"application/vnd.ms-"+ta,"","base64",!1)}else if("png"===b.type)html2canvas(d(v)[0]).then(function(a){a=a.toDataURL();for(var c=atob(a.substring(22)),d=new ArrayBuffer(c.length),h=new Uint8Array(d),f=0;fa?k:a;for(a=c.length;akb){a>U.a0[0]&&(Fa="a0",va="l");for(var b in U)U.hasOwnProperty(b)&&U[b][1]>a&&(Fa=b,va="l",U[b][0]>a&&(va="p"));kb=a}}});b.jspdf.format=""=== +Fa?"a4":Fa;b.jspdf.orientation=""===va?"w":va}if(null==k.doc&&(k.doc=new jspdf.jsPDF(b.jspdf.orientation,b.jspdf.unit,b.jspdf.format),k.wScaleFactor=1,k.hScaleFactor=1,"function"===typeof b.jspdf.onDocCreated))b.jspdf.onDocCreated(k.doc);Ba.fontName=k.doc.getFont().fontName;!0===k.outputImages&&(k.images={});"undefined"!==typeof k.images&&(d(v).filter(function(){return O(d(this))}).each(function(){var a=0;N=[];!1===b.exportHiddenCells&&(Q=d(this).find("tr, th, td").filter(":hidden"),ja=0a.styles.rowHeight&&(a.styles.rowHeight=e)}a.styles.halign="inherit"===c.headerStyles.halign?"center":c.headerStyles.halign;a.styles.valign=c.headerStyles.valign;"undefined"!==typeof d.style&&!0!==d.style.hidden&&("inherit"===c.headerStyles.halign&&(a.styles.halign=d.style.align),"inherit"===c.styles.fillColor&&(a.styles.fillColor=d.style.bcolor),"inherit"===c.styles.textColor&&(a.styles.textColor=d.style.color), +"inherit"===c.styles.fontStyle&&(a.styles.fontStyle=d.style.fstyle))}});"function"!==typeof c.createdCell&&(c.createdCell=function(a,b){b=k.teCells[b.row.index+":"+b.column.dataKey];a.styles.halign="inherit"===c.styles.halign?"center":c.styles.halign;a.styles.valign=c.styles.valign;"undefined"!==typeof b&&"undefined"!==typeof b.style&&!0!==b.style.hidden&&("inherit"===c.styles.halign&&(a.styles.halign=b.style.align),"inherit"===c.styles.fillColor&&(a.styles.fillColor=b.style.bcolor),"inherit"===c.styles.textColor&& +(a.styles.textColor=b.style.color),"inherit"===c.styles.fontStyle&&(a.styles.fontStyle=b.style.fstyle))});"function"!==typeof c.drawHeaderCell&&(c.drawHeaderCell=function(a,b){var c=k.columns[b.column.dataKey];return(!0!==c.style.hasOwnProperty("hidden")||!0!==c.style.hidden)&&0<=c.rowIndex?Za(a,b,c):!1});"function"!==typeof c.drawCell&&(c.drawCell=function(a,b){var c=k.teCells[b.row.index+":"+b.column.dataKey];if(!0!==("undefined"!==typeof c&&c.isCanvas))Za(a,b,c)&&(k.doc.rect(a.x,a.y,a.width,a.height, +a.styles.fillStyle),"undefined"===typeof c||"undefined"!==typeof c.hasUserDefText&&!0===c.hasUserDefText||"undefined"===typeof c.elements||!c.elements.length?db(a,{},k):(b=a.height/c.rect.height,b>k.hScaleFactor&&(k.hScaleFactor=b),k.wScaleFactor=a.width/c.rect.width,b=a.textPos.y,bb(a,c.elements,k),a.textPos.y=b,db(a,c.elements,k)));else{c=c.elements[0];var e=d(c).attr("data-tableexport-canvas"),f=c.getBoundingClientRect();a.width=f.width*k.wScaleFactor;a.height=f.height*k.hScaleFactor;b.row.height= +a.height;Xa(a,c,e,k)}return!1});k.headerrows=[];z=W(d(this));d(z).each(function(){a=0;k.headerrows[r]=[];I(this,"th,td",r,z.length,function(b,c,d){var e=Ka(b);e.title=G(b,c,d);e.key=a++;e.rowIndex=r;k.headerrows[r].push(e)});r++});if(0 .th-inner, th.css-license > .th-inner, th.css-consumable > .th-inner, th.css-envelope > .th-inner, +th.css-users > .th-inner, +th.css-location > .th-inner, th.css-accessory > .th-inner { font-size: 0px; @@ -598,6 +604,8 @@ th.css-barcode > .th-inner::before, th.css-license > .th-inner::before, th.css-consumable > .th-inner::before, th.css-envelope > .th-inner::before, +th.css-users > .th-inner::before, +th.css-location > .th-inner::before, th.css-accessory > .th-inner::before { @@ -617,6 +625,7 @@ th.css-padlock > .th-inner::before } /** +BEGIN ICON TABLE HEADERS Set the font-weight css property as 900 (For Solid), 400 (Regular or Brands), 300 (Light for pro icons). **/ th.css-barcode > .th-inner::before @@ -639,12 +648,20 @@ th.css-envelope > .th-inner::before content: "\f0e0"; font-family: "Font Awesome 5 Free"; font-weight: 400; } - th.css-accessory > .th-inner::before { content: "\f11c"; font-family: "Font Awesome 5 Free"; font-weight: 400; } +th.css-users > .th-inner::before { + content: "\f0c0"; font-family: "Font Awesome 5 Free"; font-size: 15px; +} + +th.css-location > .th-inner::before { + content: "\f3c5"; font-family: "Font Awesome 5 Free"; font-size: 19px; margin-bottom: 0px; +} + + .small-box .inner { padding-left: 15px; padding-right: 15px; @@ -684,6 +701,12 @@ th.css-accessory > .th-inner::before .sidebar-menu { margin-top:100px } + .navbar-custom-menu > .navbar-nav > li.dropdown.user.user-menu { + float:right; + } + .navbar-custom-menu > .navbar-nav > li > .dropdown-menu { + margin-right:-39px; + } } @media screen and (max-width: 1268px) and (min-width: 912px){ @@ -890,4 +913,10 @@ input[type="radio"]:checked::before { } .datepicker.dropdown-menu { z-index: 1030 !important; -} \ No newline at end of file +} + +.sidebar-menu > li .badge { + margin-top: 0px; + filter: brightness(70%); + font-size: 70%; +} diff --git a/resources/assets/less/skins/skin-black-dark.less b/resources/assets/less/skins/skin-black-dark.less index 6f0a2204b2..417258702b 100644 --- a/resources/assets/less/skins/skin-black-dark.less +++ b/resources/assets/less/skins/skin-black-dark.less @@ -70,7 +70,7 @@ &.btn-primary, .btn-primary:link { background-color: darken(@black, 10%); - border-color: darken(@black, 20%); + border-color: #FFF; color: #fff; } @@ -375,7 +375,10 @@ input[type=text], input[type=search] { color: var(--text-main); } .skin-black-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-black-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #000000; } .fixed-table-body thead th .th-inner, .skin-black-dark .sidebar-menu>li.active>a, .skin-black .sidebar-menu>li:hover>a, .sidebar-toggle:hover { background-color: var(--header)!important; diff --git a/resources/assets/less/skins/skin-blue-dark.less b/resources/assets/less/skins/skin-blue-dark.less index 6c502b1781..8fedf7b82e 100644 --- a/resources/assets/less/skins/skin-blue-dark.less +++ b/resources/assets/less/skins/skin-blue-dark.less @@ -245,7 +245,6 @@ body { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link)!important; } #componentsTable>tbody>tr>td>nobr>a>i.fa { color: var(--text-main); @@ -361,7 +360,10 @@ input[type=text], input[type=search] { color: var(--text-main); } .skin-blue-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-blue-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #3c8dbc; } .fixed-table-body thead th .th-inner, .skin-blue-dark .sidebar-menu>li.active>a, .skin-blue .sidebar-menu>li:hover>a, .sidebar-toggle:hover { background-color: var(--header)!important; diff --git a/resources/assets/less/skins/skin-green-dark.less b/resources/assets/less/skins/skin-green-dark.less index 5267803656..48616b324b 100644 --- a/resources/assets/less/skins/skin-green-dark.less +++ b/resources/assets/less/skins/skin-green-dark.less @@ -236,7 +236,6 @@ body { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link)!important; } #componentsTable>tbody>tr>td>nobr>a>i.fa { color: var(--text-main); @@ -348,7 +347,10 @@ input[type=text], input[type=search] { color: var(--text-main); } .skin-green-dark .main-header .navbar .dropdown-menu li a { - color: var(--link); + color: #FFFFFF; +} +.skin-green-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #006300; } .fixed-table-body thead th .th-inner, .skin-green-dark .sidebar-menu>li.active>a, .skin-green .sidebar-menu>li:hover>a, .sidebar-toggle:hover { background-color: var(--header)!important; diff --git a/resources/assets/less/skins/skin-orange-dark.less b/resources/assets/less/skins/skin-orange-dark.less index 98925b475e..edb35282d8 100644 --- a/resources/assets/less/skins/skin-orange-dark.less +++ b/resources/assets/less/skins/skin-orange-dark.less @@ -243,7 +243,6 @@ a:link.btn-default{ } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link)!important; } #componentsTable>tbody>tr>td>nobr>a>i.fa { color: var(--text-main); @@ -359,7 +358,10 @@ input[type=text], input[type=search] { color: var(--text-main); } .skin-orange-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-orange-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #ff8c00; } .fixed-table-body thead th .th-inner, .skin-orange-dark .sidebar-menu>li.active>a, .skin-orange .sidebar-menu>li:hover>a, .sidebar-toggle:hover { background-color: var(--header)!important; diff --git a/resources/assets/less/skins/skin-purple-dark.less b/resources/assets/less/skins/skin-purple-dark.less index 10868045af..355d6c6204 100644 --- a/resources/assets/less/skins/skin-purple-dark.less +++ b/resources/assets/less/skins/skin-purple-dark.less @@ -246,7 +246,6 @@ body { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link)!important; } #componentsTable>tbody>tr>td>nobr>a>i.fa { color: var(--text-main); @@ -362,7 +361,10 @@ input[type=text], input[type=search] { color: var(--text-main); } .skin-purple-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-purple-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #5f5ca8; } .fixed-table-body thead th .th-inner, .skin-purple-dark .sidebar-menu>li.active>a, .skin-purple .sidebar-menu>li:hover>a, .sidebar-toggle:hover { background-color: var(--header)!important; diff --git a/resources/assets/less/skins/skin-red-dark.less b/resources/assets/less/skins/skin-red-dark.less index 3fded5f067..1bb7a91e60 100644 --- a/resources/assets/less/skins/skin-red-dark.less +++ b/resources/assets/less/skins/skin-red-dark.less @@ -247,7 +247,6 @@ body { } .btn-primary:hover { background-color: var(--button-primary); - color: var(--link)!important; } #componentsTable>tbody>tr>td>nobr>a>i.fa { color: var(--text-main); @@ -363,7 +362,10 @@ input[type=text], input[type=search] { color: var(--text-main); } .skin-red-dark .main-header .navbar .dropdown-menu li a { - color: var(--header); + color: #FFFFFF; +} +.skin-red-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #c23320; } .fixed-table-body thead th .th-inner, .skin-red-dark .sidebar-menu>li.active>a, .skin-red .sidebar-menu>li:hover>a, .sidebar-toggle:hover { background-color: var(--header)!important; diff --git a/resources/assets/less/skins/skin-yellow-dark.less b/resources/assets/less/skins/skin-yellow-dark.less index c111cb122c..7ac83a451f 100644 --- a/resources/assets/less/skins/skin-yellow-dark.less +++ b/resources/assets/less/skins/skin-yellow-dark.less @@ -55,7 +55,7 @@ &.btn-primary, .btn-primary:link { background-color: var(--button-default); - border-color: var(--button-default); + border-color: #000000; color: #545454; } @@ -355,8 +355,11 @@ input[type=text], input[type=search] { .skin-yellow-dark .main-header .navbar .dropdown-menu li a { color: var(--header); } +.skin-yellow-dark .main-header .navbar .dropdown-menu li a:hover { + background-color: #000000; +} tr th div.th-inner { - color:var(--text-main); + color: #FFFFFF; } .tab-content, .tab-pane { background-color: var(--back-main); diff --git a/resources/lang/aa-ER/admin/settings/general.php b/resources/lang/aa-ER/admin/settings/general.php index 6997c6ba83..cd858068bc 100644 --- a/resources/lang/aa-ER/admin/settings/general.php +++ b/resources/lang/aa-ER/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'crwdns1778:0crwdne1778:0', 'two_factor_enabled_text' => 'crwdns1779:0crwdne1779:0', 'two_factor_reset' => 'crwdns1780:0crwdne1780:0', - 'two_factor_reset_help' => 'crwdns1781:0crwdne1781:0', + 'two_factor_reset_help' => 'crwdns12150:0crwdne12150:0', 'two_factor_reset_success' => 'crwdns1782:0crwdne1782:0', 'two_factor_reset_error' => 'crwdns1783:0crwdne1783:0', 'two_factor_enabled_warning' => 'crwdns1784:0crwdne1784:0', diff --git a/resources/lang/aa-ER/general.php b/resources/lang/aa-ER/general.php index e6ff3fcf1f..ec3f1a9968 100644 --- a/resources/lang/aa-ER/general.php +++ b/resources/lang/aa-ER/general.php @@ -1,6 +1,7 @@ 'crwdns12148:0crwdne12148:0', 'accessories' => 'crwdns1200:0crwdne1200:0', 'activated' => 'crwdns1540:0crwdne1540:0', 'accepted_date' => 'crwdns11295:0crwdne11295:0', @@ -518,4 +519,13 @@ return [ ], 'no_requestable' => 'crwdns12128:0crwdne12128:0', + 'countable' => [ + 'accessories' => 'crwdns12136:0crwdne12136:0', + 'assets' => 'crwdns12138:0crwdne12138:0', + 'licenses' => 'crwdns12140:0crwdne12140:0', + 'license_seats' => 'crwdns12142:0crwdne12142:0', + 'consumables' => 'crwdns12144:0crwdne12144:0', + 'components' => 'crwdns12146:0crwdne12146:0', + ] + ]; diff --git a/resources/lang/aa-ER/localizations.php b/resources/lang/aa-ER/localizations.php index 7da17ae8aa..0e695f7a75 100644 --- a/resources/lang/aa-ER/localizations.php +++ b/resources/lang/aa-ER/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'crwdns10642:0crwdne10642:0', 'sk-SK'=> 'crwdns12002:0crwdne12002:0', 'sl-SI'=> 'crwdns12004:0crwdne12004:0', + 'so-SO'=> 'crwdns12134:0crwdne12134:0', 'es-ES'=> 'crwdns10646:0crwdne10646:0', 'es-CO'=> 'crwdns10648:0crwdne10648:0', 'es-MX'=> 'crwdns10650:0crwdne10650:0', diff --git a/resources/lang/aa-ER/validation.php b/resources/lang/aa-ER/validation.php index 3fd034cbcd..a932f8e92a 100644 --- a/resources/lang/aa-ER/validation.php +++ b/resources/lang/aa-ER/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'crwdns6796:0crwdne6796:0' ], + 'checkboxes' => 'crwdns12152:0crwdne12152:0', + 'radio_buttons' => 'crwdns12154:0crwdne12154:0', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'crwdns12156:0crwdne12156:0', ]; diff --git a/resources/lang/af-ZA/admin/settings/general.php b/resources/lang/af-ZA/admin/settings/general.php index 2fbddc5055..1f22421c2c 100644 --- a/resources/lang/af-ZA/admin/settings/general.php +++ b/resources/lang/af-ZA/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Twee-faktorinskrywing', 'two_factor_enabled_text' => 'Aktiveer twee faktore', 'two_factor_reset' => 'Herstel twee-faktor geheim', - 'two_factor_reset_help' => 'Dit sal die gebruiker dwing om hul toestel weer met Google Authenticator in te skryf. Dit kan handig wees as hul toestel wat tans ingeskryf is, verlore of gesteel is.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Twee faktor toestel suksesvol herstel', 'two_factor_reset_error' => 'Twee faktor toestel herstel het misluk', 'two_factor_enabled_warning' => 'As jy twee faktore aktiveer as dit nie tans geaktiveer is nie, sal dit jou dadelik dwing om te verifieer met \'n Google Auth-ingeskrewe toestel. Jy sal die vermoë hê om jou toestel in te skryf as een nie tans ingeskryf is nie.', diff --git a/resources/lang/af-ZA/general.php b/resources/lang/af-ZA/general.php index af8d192a8e..e168381d4d 100644 --- a/resources/lang/af-ZA/general.php +++ b/resources/lang/af-ZA/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'bykomstighede', 'activated' => 'geaktiveer', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/af-ZA/localizations.php b/resources/lang/af-ZA/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/af-ZA/localizations.php +++ b/resources/lang/af-ZA/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/af-ZA/validation.php b/resources/lang/af-ZA/validation.php index fadb10c6ed..2a12ea3ae8 100644 --- a/resources/lang/af-ZA/validation.php +++ b/resources/lang/af-ZA/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/am-ET/admin/settings/general.php b/resources/lang/am-ET/admin/settings/general.php index 33cfd7b416..71fb8eb2c6 100644 --- a/resources/lang/am-ET/admin/settings/general.php +++ b/resources/lang/am-ET/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/am-ET/general.php b/resources/lang/am-ET/general.php index 52cf654344..c793b84ccb 100644 --- a/resources/lang/am-ET/general.php +++ b/resources/lang/am-ET/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'መለዋወጫዎች', 'activated' => 'Activated', 'accepted_date' => 'የተቀበለበት ቀን', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/am-ET/localizations.php b/resources/lang/am-ET/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/am-ET/localizations.php +++ b/resources/lang/am-ET/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/am-ET/validation.php b/resources/lang/am-ET/validation.php index 1c6ad8a148..05374e23af 100644 --- a/resources/lang/am-ET/validation.php +++ b/resources/lang/am-ET/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/ar-SA/admin/settings/general.php b/resources/lang/ar-SA/admin/settings/general.php index 671469ee12..6f551b2c4f 100644 --- a/resources/lang/ar-SA/admin/settings/general.php +++ b/resources/lang/ar-SA/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'اثنان عامل التسجيل', 'two_factor_enabled_text' => 'تمكين عاملين', 'two_factor_reset' => 'إعادة تعيين سر عاملين', - 'two_factor_reset_help' => 'سيؤدي هذا إلى إجبار المستخدم على تسجيل أجهزته باستخدام أداة مصادقة غوغل مرة أخرى. ويمكن أن يكون ذلك مفيدا إذا فقدت أو سرقت الجهاز المسجل حاليا.', + 'two_factor_reset_help' => 'سيؤدي هذا إلى إجبار المستخدم على تسجيل جهازه مع تطبيق المصادقة الخاص به مرة أخرى. ويمكن أن يكون هذا مفيداً إذا فقدت أو سرقت جهازهم المسجل حالياً. ', 'two_factor_reset_success' => 'جهاز عاملين إعادة تعيين بنجاح', 'two_factor_reset_error' => 'أخفق إعادة تعيين عامل عامل اثنين', 'two_factor_enabled_warning' => 'سيؤدي تمكين عاملين إذا لم يتم تمكينه حاليا إلى إجبارك فورا على المصادقة باستخدام جهاز مسجل في غوغل أوث. سيكون لديك القدرة على تسجيل جهازك إذا كان أحد غير مسجل حاليا.', diff --git a/resources/lang/ar-SA/general.php b/resources/lang/ar-SA/general.php index 4ca0c85be0..21098a2c4d 100644 --- a/resources/lang/ar-SA/general.php +++ b/resources/lang/ar-SA/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'ملحقات', 'activated' => 'مفعل', 'accepted_date' => 'تم تخزين التاريخ', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'لا توجد أصول أو نماذج للأصول التي يمكن طلبها.', + 'countable' => [ + 'accessories' => ':count ملحقات :count ملحقات', + 'assets' => ':count أصول :count أصول', + 'licenses' => ':count ترخيص :count تراخيص', + 'license_seats' => ':count مقاعد الرخصة :count مقاعد الرخص', + 'consumables' => ':count مستهلكة :count مستهلك', + 'components' => ':count مكون :count مكونات', + ] + ]; diff --git a/resources/lang/ar-SA/localizations.php b/resources/lang/ar-SA/localizations.php index 20cc8a04f5..288f0bdd09 100644 --- a/resources/lang/ar-SA/localizations.php +++ b/resources/lang/ar-SA/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'السلوفاكية', 'sl-SI'=> 'السلوفينية', + 'so-SO'=> 'Somali', 'es-ES'=> 'الإسبانية', 'es-CO'=> 'الإسبانية، كولومبيا', 'es-MX'=> 'الإسبانية، المكسيك', diff --git a/resources/lang/ar-SA/validation.php b/resources/lang/ar-SA/validation.php index 0356237392..00bd955a10 100644 --- a/resources/lang/ar-SA/validation.php +++ b/resources/lang/ar-SA/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'لا يمكن أن تكون القيمة سالبة' ], + 'checkboxes' => ':attribute يحتوي على خيارات غير صالحة.', + 'radio_buttons' => ':attribute غير صالح.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'القيمة غير صالحة المدرجة في هذا الحقل', ]; diff --git a/resources/lang/bg-BG/admin/hardware/general.php b/resources/lang/bg-BG/admin/hardware/general.php index fcbeb5d60d..94ce94f837 100644 --- a/resources/lang/bg-BG/admin/hardware/general.php +++ b/resources/lang/bg-BG/admin/hardware/general.php @@ -27,13 +27,12 @@ return [ 'undeployable_tooltip' => 'Този актив е забранен за изписване и не може да се изпише в момента.', 'view' => 'Преглед на актив', 'csv_error' => 'Имате грешка във вашият CSV файл:', - 'import_text' => '

Upload a CSV that contains asset history. The assets and users MUST already exist in the system, or they will be skipped. Matching assets for history import happens against the asset tag. We will try to find a matching user based on the user\'s name you provide, and the criteria you select below. If you do not select any criteria below, it will simply try to match on the username format you configured in the Admin > General Settings.

Fields included in the CSV must match the headers: Asset Tag, Name, Checkout Date, Checkin Date. Any additional fields will be ignored.

Checkin Date: blank or future checkin dates will checkout items to associated user. Excluding the Checkin Date column will create a checkin date with todays date.

- ', - 'csv_import_match_f-l' => 'Try to match users by firstname.lastname (jane.smith) format', - 'csv_import_match_initial_last' => 'Try to match users by first initial last name (jsmith) format', - 'csv_import_match_first' => 'Try to match users by first name (jane) format', - 'csv_import_match_email' => 'Try to match users by email as username', - 'csv_import_match_username' => 'Try to match users by username', + 'import_text' => '

Качи CSV файл, който съдържа историята на активите. Активите и потребителите ТРЯБВА да ги има създадени в системата в противен слуай няма да се импортират. При импортиране на историята на активите, съвпадението се прави по техния инвентарен номер. Ще се опитаме да намерим потребителя на база неговото потребителско име и критерия който сте избрали по-долу. Ще се опита да намери съвпадение по формата на потребителско име избран в Admin > General Settings.

Полетата включени в CSV файла, трябва да съвпадат с Инвентарен номер, Име, Дата на изписване, Дата на вписване. Всякакви допълнителни полета ще бъдат игнорирани.

Празна дата на вписване или дата в бъдещето ще изпише актива към асоцийрания потребител. Ако не се включи колона с дата на вписване, същата ще бъде създадена със текущата дата.

', + 'csv_import_match_f-l' => 'Опитай да намериш съвпадение на потребителите по Име.Фамилия (Иван.Иванов)', + 'csv_import_match_initial_last' => 'Опитай да намериш съвпадение на потребителите по Първа буква, Фамилия (ииванов)', + 'csv_import_match_first' => 'Опитай да намериш съвпадение на потребителите по Име (Иван)', + 'csv_import_match_email' => 'Опитай да намериш съвпадение на потребителите по email, като потребителско име', + 'csv_import_match_username' => 'Опитай да намериш съвпадение на потребителите по потребителско име', 'error_messages' => 'Съобщение за грешка:', 'success_messages' => 'Успешно:', 'alert_details' => 'Детайли.', diff --git a/resources/lang/bg-BG/admin/hardware/message.php b/resources/lang/bg-BG/admin/hardware/message.php index ac2b4871e4..63af63ba88 100644 --- a/resources/lang/bg-BG/admin/hardware/message.php +++ b/resources/lang/bg-BG/admin/hardware/message.php @@ -18,7 +18,7 @@ return [ 'success' => 'Активът обновен успешно.', 'nothing_updated' => 'Няма избрани полета, съответно нищо не беше обновено.', 'no_assets_selected' => 'Няма избрани активи, така че нищо не бе обновено.', - 'assets_do_not_exist_or_are_invalid' => 'Selected assets cannot be updated.', + 'assets_do_not_exist_or_are_invalid' => 'Избраните активи не могат да се обновят.', ], 'restore' => [ diff --git a/resources/lang/bg-BG/admin/licenses/general.php b/resources/lang/bg-BG/admin/licenses/general.php index 2cd4cc645e..126220342d 100644 --- a/resources/lang/bg-BG/admin/licenses/general.php +++ b/resources/lang/bg-BG/admin/licenses/general.php @@ -46,6 +46,6 @@ return array( ], ], - 'below_threshold' => 'There are only :remaining_count seats left for this license with a minimum quantity of :min_amt. You may want to consider purchasing more seats.', - 'below_threshold_short' => 'This item is below the minimum required quantity.', + 'below_threshold' => 'Има само :remaining_count лиценз(а) останали от този лиценз с минимално количество от :min_amt. Може да желаете да поръчате допълнително.', + 'below_threshold_short' => 'Този артикул е под минималното необходимо количество.', ); diff --git a/resources/lang/bg-BG/admin/settings/general.php b/resources/lang/bg-BG/admin/settings/general.php index 008322676d..ec071c9398 100644 --- a/resources/lang/bg-BG/admin/settings/general.php +++ b/resources/lang/bg-BG/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Двуфакторово записване', 'two_factor_enabled_text' => 'Разреши два фактор', 'two_factor_reset' => 'Нулиране на двуфакторова тайна', - 'two_factor_reset_help' => 'Това ще принуди потребителя да запише своето устройство с Google Authenticator отново. Това може да бъде полезно ако записаните понастоящем устройства са изгубени или откраднати.', + 'two_factor_reset_help' => 'Това ще принуди потребителя да запише своето устройство с Authenticator отново. Това може да бъде полезно, ако записаните понастоящем устройства са изгубени или откраднати. ', 'two_factor_reset_success' => 'Двуфакторово устройство нулирано успешно', 'two_factor_reset_error' => 'Нулирането на двуфакторово устройство беше неуспешно', 'two_factor_enabled_warning' => 'Разрешаване на два-фактора ако не са разрешени в момента, ще ви принуди незабавно да се удостоверите с устройство записано в Google Auth. Ще имате възможността да запишете устройството си ако нямате такова.', diff --git a/resources/lang/bg-BG/general.php b/resources/lang/bg-BG/general.php index 676b1729e7..c68a356d18 100644 --- a/resources/lang/bg-BG/general.php +++ b/resources/lang/bg-BG/general.php @@ -1,6 +1,7 @@ '2FA нулиране', 'accessories' => 'Аксесоари', 'activated' => 'Активирано', 'accepted_date' => 'Дата на приемане', @@ -201,7 +202,7 @@ return [ 'new_password' => 'Нова парола', 'next' => 'Следващ', 'next_audit_date' => 'Следваща дата на одита', - 'no_email' => 'No email address associated with this user', + 'no_email' => 'Няма е-майл адрес към този потребител', 'last_audit' => 'Последният одит', 'new' => 'new!', 'no_depreciation' => 'Без амортизация', @@ -517,6 +518,15 @@ return [ 'partial' => 'Изтрити :success_count :object_type, но :error_count :object_type не можаха да се изтрият', ], ], - 'no_requestable' => 'There are no requestable assets or asset models.', + 'no_requestable' => 'Няма активи или модели, които могат да бъдат изисквани.', + + 'countable' => [ + 'accessories' => ':count Аксесоар|:count Аксесоари', + 'assets' => ':count Актив|:count Активи', + 'licenses' => ':count Лиценз|:count Лицензи', + 'license_seats' => ':count Лицензно място|:count Лицензни места', + 'consumables' => ':count Консуматив|:count Консумативи', + 'components' => ':count Компонент|:count Компоненти', + ] ]; diff --git a/resources/lang/bg-BG/localizations.php b/resources/lang/bg-BG/localizations.php index c7496f5f97..359139bd87 100644 --- a/resources/lang/bg-BG/localizations.php +++ b/resources/lang/bg-BG/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/bg-BG/validation.php b/resources/lang/bg-BG/validation.php index 9a0a389e5d..6004b5dd0e 100644 --- a/resources/lang/bg-BG/validation.php +++ b/resources/lang/bg-BG/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Стойността не може да бъде отрицателна' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/ca-ES/admin/settings/general.php b/resources/lang/ca-ES/admin/settings/general.php index 33cfd7b416..71fb8eb2c6 100644 --- a/resources/lang/ca-ES/admin/settings/general.php +++ b/resources/lang/ca-ES/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/ca-ES/general.php b/resources/lang/ca-ES/general.php index da75286b74..f9511fa92c 100644 --- a/resources/lang/ca-ES/general.php +++ b/resources/lang/ca-ES/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessoris', 'activated' => 'Activat', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/ca-ES/localizations.php b/resources/lang/ca-ES/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/ca-ES/localizations.php +++ b/resources/lang/ca-ES/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/ca-ES/validation.php b/resources/lang/ca-ES/validation.php index 1c6ad8a148..05374e23af 100644 --- a/resources/lang/ca-ES/validation.php +++ b/resources/lang/ca-ES/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/cs-CZ/admin/settings/general.php b/resources/lang/cs-CZ/admin/settings/general.php index 7c87c2be79..72d7dec9cb 100644 --- a/resources/lang/cs-CZ/admin/settings/general.php +++ b/resources/lang/cs-CZ/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Dvojfaktorový zápis', 'two_factor_enabled_text' => 'Povolit Dvoufaktorové ověření', 'two_factor_reset' => 'Resetovat dvou faktorové tajemství', - 'two_factor_reset_help' => 'Tímto bude uživatel přinucen, aby znovu zaregistroval své zařízení pomocí aplikace Google Authenticator. To může být užitečné, pokud ztratil nebo mu bylo odcizeno jeho aktuálně zapsané zařízení. ', + 'two_factor_reset_help' => 'To uživatele donutí znovu zapsat své zařízení do svého autentizátoru aplikací. To může být užitečné, pokud je jejich aktuálně zapsané zařízení ztraceno nebo odcizeno. ', 'two_factor_reset_success' => 'Resetování dvoufaktorového zařízení bylo úspěšné', 'two_factor_reset_error' => 'Resetování dvoufaktorového zařízení selhalo', 'two_factor_enabled_warning' => 'Povolení dvoufaktorového zabezpečení, pokud již není v současné době povoleno vás okamžitě donutí k ověření pomocí zařízení zapsaného v Google Auth. Pokud není v současné době žádné registrován. Budete mít možnost zapsat svoje zařízení.', diff --git a/resources/lang/cs-CZ/general.php b/resources/lang/cs-CZ/general.php index 0e7d2f8119..0c42a014e8 100644 --- a/resources/lang/cs-CZ/general.php +++ b/resources/lang/cs-CZ/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Příslušenství', 'activated' => 'Aktivováno', 'accepted_date' => 'Datum přijetí', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Neexistují žádné požadované položky nebo modely aktiv.', + 'countable' => [ + 'accessories' => ':count Příslušenství |:count Příslušenství', + 'assets' => ':count majetek|:count majetku', + 'licenses' => ':count licence|:count licence', + 'license_seats' => ':count sídlo licence|:count licenční místa', + 'consumables' => ':count Spotřební materiál|:count Spotřební materiál', + 'components' => ':count komponenta|:count komponenty', + ] + ]; diff --git a/resources/lang/cs-CZ/localizations.php b/resources/lang/cs-CZ/localizations.php index 879ebf8c67..87e9750980 100644 --- a/resources/lang/cs-CZ/localizations.php +++ b/resources/lang/cs-CZ/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovenština', 'sl-SI'=> 'Slovinština', + 'so-SO'=> 'Somali', 'es-ES'=> 'Španělština', 'es-CO'=> 'Španělština, Kolumbie', 'es-MX'=> 'Španělština, Mexiko', diff --git a/resources/lang/cs-CZ/validation.php b/resources/lang/cs-CZ/validation.php index 6b4f0a6a8f..92c41a0c07 100644 --- a/resources/lang/cs-CZ/validation.php +++ b/resources/lang/cs-CZ/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Hodnota nemůže být záporná' ], + 'checkboxes' => ':attribute obsahuje neplatné možnosti.', + 'radio_buttons' => ':attribute je neplatný.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Neplatná hodnota zahrnutá v tomto poli', ]; diff --git a/resources/lang/cy-GB/admin/settings/general.php b/resources/lang/cy-GB/admin/settings/general.php index 883b3e88de..ec432ed118 100644 --- a/resources/lang/cy-GB/admin/settings/general.php +++ b/resources/lang/cy-GB/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Ymrestru dau factor', 'two_factor_enabled_text' => 'Alluogi dwy factor', 'two_factor_reset' => 'Ailosod cyfrinair dwy factor', - 'two_factor_reset_help' => 'Wneith hyn gorfodi defnyddiwr i ail ymrestru eu dyfais hefo Google Authenticator. Ellith hyn fod yn fuddiol os ydi\'r dyfais sydd wedi ymrestru yn cael ei ddwyn neu golli. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Dyfais dwy factor wedi\'i ail osod yn llwyddiannus', 'two_factor_reset_error' => 'Wedi methu ailosod dyfais dilysaint dau-factor', 'two_factor_enabled_warning' => 'Bydd galluogi dau ffactor os nad yw wedi\'i alluogi ar hyn o bryd yn eich gorfodi ar unwaith i ddilysu gyda dyfais sydd wedi\'i chofrestru gan Google Auth. Bydd gennych y gallu i gofrestru\'ch dyfais os nad yw un wedi\'i gofrestru ar hyn o bryd.', diff --git a/resources/lang/cy-GB/general.php b/resources/lang/cy-GB/general.php index a191056188..cf2b8a06cc 100644 --- a/resources/lang/cy-GB/general.php +++ b/resources/lang/cy-GB/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Ategolion', 'activated' => 'Actifadu', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/cy-GB/localizations.php b/resources/lang/cy-GB/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/cy-GB/localizations.php +++ b/resources/lang/cy-GB/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/cy-GB/validation.php b/resources/lang/cy-GB/validation.php index 6b74e67802..14ee3535de 100644 --- a/resources/lang/cy-GB/validation.php +++ b/resources/lang/cy-GB/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/da-DK/admin/settings/general.php b/resources/lang/da-DK/admin/settings/general.php index a0fe717ac8..03373bfd13 100644 --- a/resources/lang/da-DK/admin/settings/general.php +++ b/resources/lang/da-DK/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Aktivér to faktorer', 'two_factor_reset' => 'Reset 2-Factor Secret', - 'two_factor_reset_help' => 'Dette vil tvinge brugeren til at tilmelde deres enhed med Google Authenticator igen. Dette kan være nyttigt, hvis deres tilmeldte enhed er tabt eller stjålet.', + 'two_factor_reset_help' => 'Dette vil tvinge brugeren til at tilmelde deres enhed med deres autentificerings-app igen. Dette kan være nyttigt, hvis deres aktuelt tilmeldte enhed er tabt eller stjålet. ', 'two_factor_reset_success' => 'To faktor enhed nulstilles', 'two_factor_reset_error' => 'To-faktor enhed reset mislykkedes', 'two_factor_enabled_warning' => 'Aktivering af to-faktor, hvis den ikke er aktiveret, vil straks tvinge dig til at godkende med en Google Auth-indskrevet enhed. Du vil have mulighed for at tilmelde din enhed, hvis en ikke er indskrevet på nuværende tidspunkt.', diff --git a/resources/lang/da-DK/general.php b/resources/lang/da-DK/general.php index ca8eff4160..2a000db42f 100644 --- a/resources/lang/da-DK/general.php +++ b/resources/lang/da-DK/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Tilbehør', 'activated' => 'Aktiveret', 'accepted_date' => 'Dato accepteret', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Der er ingen requestable aktiver eller asset-modeller.', + 'countable' => [ + 'accessories' => ':count Tilbehør:count Tilbehør', + 'assets' => ':count Aktiver:count Aktiver', + 'licenses' => ':count Licens :count Licenser', + 'license_seats' => ':count Licenssæde:count Licenssæder', + 'consumables' => ':count Forbrugsparti:count Forbrugsvarer', + 'components' => ':count Komponent:count Komponenter', + ] + ]; diff --git a/resources/lang/da-DK/localizations.php b/resources/lang/da-DK/localizations.php index e0adeab985..755faba880 100644 --- a/resources/lang/da-DK/localizations.php +++ b/resources/lang/da-DK/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbisk (latin)', 'sk-SK'=> 'Slovakisk', 'sl-SI'=> 'Slovensk', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spansk', 'es-CO'=> 'Spansk (Colombia)', 'es-MX'=> 'Spansk (Mexico)', diff --git a/resources/lang/da-DK/validation.php b/resources/lang/da-DK/validation.php index 8dedf30405..f1b5a5cf99 100644 --- a/resources/lang/da-DK/validation.php +++ b/resources/lang/da-DK/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Værdien må ikke være negativ' ], + 'checkboxes' => ':attribute indeholder ugyldige indstillinger.', + 'radio_buttons' => ':attribute er ugyldig.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Ugyldig værdi inkluderet i dette felt', ]; diff --git a/resources/lang/de-DE/admin/settings/general.php b/resources/lang/de-DE/admin/settings/general.php index 1dbb856d01..58f8970049 100644 --- a/resources/lang/de-DE/admin/settings/general.php +++ b/resources/lang/de-DE/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Zwei-Faktor Registrierung', 'two_factor_enabled_text' => 'Zwei-Faktor-Authentifizierung aktivieren', 'two_factor_reset' => 'Zwei-Faktor-Geheimnis zurücksetzen', - 'two_factor_reset_help' => 'Dies zwingt den Benutzer sein Gerät mit der Google Authenticator App erneut zu registrieren. Dies kann nützlich sein, wenn das aktuell registrierte Gerät verloren ging oder gestohlen wurde. ', + 'two_factor_reset_help' => 'Dies zwingt den Nutzer dazu, sein Gerät erneut mit seiner Authentifizierungs-App zu registrieren. Dies kann nützlich sein, falls das derzeit registrierte Gerät verloren gegangen oder gestohlen wurde. ', 'two_factor_reset_success' => 'Zwei-Faktor-Gerät erfolgreich zurückgesetzt', 'two_factor_reset_error' => 'Zwei-Faktor-Gerät zurücksetzen fehlgeschlagen', 'two_factor_enabled_warning' => 'Die Aktivierung der Zwei-Faktor-Authentifizierung bewirkt, dass Sie sich sofort mit einem bei der Google Authenticator App registrierten Gerät authentifizieren müssen. Sie haben die Möglichkeit ihr Gerät hinzuzufügen falls derzeit keines registriert ist.', diff --git a/resources/lang/de-DE/general.php b/resources/lang/de-DE/general.php index 5cfc2c7037..400fcef4ff 100644 --- a/resources/lang/de-DE/general.php +++ b/resources/lang/de-DE/general.php @@ -1,6 +1,7 @@ 'Zurücksetzen der Zwei-Faktor-Authentifizierung', 'accessories' => 'Zubehör', 'activated' => 'Aktiviert', 'accepted_date' => 'Datum akzeptiert', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Es gibt keine anforderbaren Assets oder Asset-Modelle.', + 'countable' => [ + 'accessories' => ':count Zubehör|:count Zubehöre', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count Lizenz|:count Lizenzen', + 'license_seats' => ':count Lizenzplatz|:count Lizenzplätze', + 'consumables' => ':count Verbrauchsmaterial|:count Verbrauchsmaterialien', + 'components' => ':count Komponente|:count Komponenten', + ] + ]; diff --git a/resources/lang/de-DE/localizations.php b/resources/lang/de-DE/localizations.php index 1ce5ce24c9..e261e982f2 100644 --- a/resources/lang/de-DE/localizations.php +++ b/resources/lang/de-DE/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbisch (Lateinisch)', 'sk-SK'=> 'Slowakisch', 'sl-SI'=> 'Slowenisch', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanisch, Kolumbien', 'es-MX'=> 'Spanisch, Mexiko', diff --git a/resources/lang/de-DE/validation.php b/resources/lang/de-DE/validation.php index 247d3c5d15..11c7a92347 100644 --- a/resources/lang/de-DE/validation.php +++ b/resources/lang/de-DE/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Wert darf nicht negativ sein' ], + 'checkboxes' => ':attribute enthält ungültige Optionen.', + 'radio_buttons' => ':attribute ist ungültig.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Ungültiger Wert in diesem Feld enthalten', ]; diff --git a/resources/lang/de-if/admin/settings/general.php b/resources/lang/de-if/admin/settings/general.php index ebd1286175..85da3988f0 100644 --- a/resources/lang/de-if/admin/settings/general.php +++ b/resources/lang/de-if/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Zwei-Faktor-Anmeldung', 'two_factor_enabled_text' => 'Zwei-Faktor-Authentifizierung aktivieren', 'two_factor_reset' => 'Zwei-Faktor-Geheimnis zurücksetzen', - 'two_factor_reset_help' => 'Dies zwingt den Benutzer, sein Gerät erneut mit Google Authenticator zu registrieren. Dies kann nützlich sein, wenn das derzeit registrierte Gerät verloren geht oder gestohlen wurde. ', + 'two_factor_reset_help' => 'Dies zwingt den Benutzer, sein Gerät erneut mit seiner Authentifizierungs-App zu registrieren. Dies kann nützlich sein, wenn ihr derzeit angemeldetes Gerät verloren geht oder gestohlen wird. ', 'two_factor_reset_success' => 'Zwei-Faktor-Gerät erfolgreich zurückgesetzt', 'two_factor_reset_error' => 'Zwei-Faktor-Gerät zurücksetzen ist fehlgeschlagen', 'two_factor_enabled_warning' => 'Die Aktivierung der Zwei-Faktor-Authentifizierung bewirkt, dass Du Dich sofort mit einem bei Google Authenticator registrierten Gerät authentifizieren musst. Du hast die Möglichkeit, Dein Gerät hinzuzufügen, falls derzeit keines registriert ist.', diff --git a/resources/lang/de-if/general.php b/resources/lang/de-if/general.php index 0ca4cd915f..ab5377fefc 100644 --- a/resources/lang/de-if/general.php +++ b/resources/lang/de-if/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Zubehör', 'activated' => 'Aktiviert', 'accepted_date' => 'Datum akzeptiert', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Es gibt keine anforderbaren Assets oder Asset-Modelle.', + 'countable' => [ + 'accessories' => ':count Zubehör|:count Zubehör', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count Lizenz|:count Lizenzen', + 'license_seats' => ':count Lizenzsitze|:count Lizenzsitze', + 'consumables' => ':count Verbrauchsmaterialien|:count Verbrauchsmaterialien', + 'components' => ':count Komponente|:count Komponenten', + ] + ]; diff --git a/resources/lang/de-if/localizations.php b/resources/lang/de-if/localizations.php index ed3acd5ece..b351a2e499 100644 --- a/resources/lang/de-if/localizations.php +++ b/resources/lang/de-if/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbisch (Lateinisch)', 'sk-SK'=> 'Slowakisch', 'sl-SI'=> 'Slowenisch', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanisch, Kolumbien', 'es-MX'=> 'Spanisch, Mexiko', diff --git a/resources/lang/de-if/validation.php b/resources/lang/de-if/validation.php index bbfc009669..d96cd772f0 100644 --- a/resources/lang/de-if/validation.php +++ b/resources/lang/de-if/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Wert darf nicht negativ sein' ], + 'checkboxes' => ':attribute enthält ungültige Optionen.', + 'radio_buttons' => ':attribute ist ungültig.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Ungültiger Wert in diesem Feld enthalten', ]; diff --git a/resources/lang/el-GR/admin/settings/general.php b/resources/lang/el-GR/admin/settings/general.php index 4cb7a16c4a..03ce8459ed 100644 --- a/resources/lang/el-GR/admin/settings/general.php +++ b/resources/lang/el-GR/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Εγγραφή δύο συντελεστών', 'two_factor_enabled_text' => 'Ενεργοποίηση ελέγχου ταυτότητας δύο παραγόντων', 'two_factor_reset' => 'Επαναφορά του μυστικού δύο παραγόντων', - 'two_factor_reset_help' => 'Αυτό θα υποχρεώσει τον χρήστη να εγγραφεί ξανά στη συσκευή του με τον Επαληθευτή Google. Αυτό μπορεί να είναι χρήσιμο εάν η τρέχουσα εγγεγραμμένη συσκευή τους χάσει ή κλαπεί.', + 'two_factor_reset_help' => 'Αυτό θα αναγκάσει τον χρήστη να εγγράψει τη συσκευή του με την εφαρμογή ελέγχου ταυτότητας και πάλι. Αυτό μπορεί να είναι χρήσιμο εάν χαθεί ή κλαπεί η συσκευή που έχει εγγραφεί. ', 'two_factor_reset_success' => 'Επαναφορά της συσκευής δύο παραγόντων', 'two_factor_reset_error' => 'Επαναφορά συσκευής δύο παραγόντων απέτυχε', 'two_factor_enabled_warning' => 'Εάν ενεργοποιήσετε τον παράγοντα δύο παραγόντων, εάν δεν είναι ενεργοποιημένος, θα σας αναγκάσει αμέσως να επαληθεύσετε την ταυτότητά σας με μια συσκευή εγγραφής στο Google Auth. Θα έχετε τη δυνατότητα να εγγραφείτε στη συσκευή σας εάν δεν είστε εγγεγραμμένος.', diff --git a/resources/lang/el-GR/general.php b/resources/lang/el-GR/general.php index 8fc81f62a8..3714effef7 100644 --- a/resources/lang/el-GR/general.php +++ b/resources/lang/el-GR/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Αξεσουάρ', 'activated' => 'Ενεργοποιήθηκε', 'accepted_date' => 'Ημερομηνία Αποδεκτής', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Δεν υπάρχουν απαιτούμενα στοιχεία ενεργητικού ή μοντέλα στοιχείων ενεργητικού.', + 'countable' => [ + 'accessories' => ':count Αξεσουάρ: Μετρήστε Αξεσουάρ', + 'assets' => ':count Ενεργητικό:count Περιουσιακών Στοιχείων', + 'licenses' => ':count Άδεια Χρήσης:count Άδειες', + 'license_seats' => ':count Άδεια Θέση:count Καθίσματα Άδειας', + 'consumables' => ':count Αναλώσιμα :count Αναλώσιμα', + 'components' => ':count Εξαρτήματα :count', + ] + ]; diff --git a/resources/lang/el-GR/localizations.php b/resources/lang/el-GR/localizations.php index 067dba5b67..739d55b193 100644 --- a/resources/lang/el-GR/localizations.php +++ b/resources/lang/el-GR/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Σλοβακικά', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Ισπανικά', 'es-CO'=> 'Ισπανικά, Κολομβία', 'es-MX'=> 'Ισπανικά, Μεξικό', diff --git a/resources/lang/el-GR/validation.php b/resources/lang/el-GR/validation.php index 9473a4d3c3..6f631a58f7 100644 --- a/resources/lang/el-GR/validation.php +++ b/resources/lang/el-GR/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Η τιμή δεν μπορεί να είναι αρνητική' ], + 'checkboxes' => ':attribute περιέχει μη έγκυρες επιλογές.', + 'radio_buttons' => ':attribute δεν είναι έγκυρο.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Μη έγκυρη τιμή που περιλαμβάνεται σε αυτό το πεδίο', ]; diff --git a/resources/lang/en-GB/admin/settings/general.php b/resources/lang/en-GB/admin/settings/general.php index b41f22f404..d95fb575fa 100644 --- a/resources/lang/en-GB/admin/settings/general.php +++ b/resources/lang/en-GB/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/en-GB/general.php b/resources/lang/en-GB/general.php index 1b2ce78aae..c8a6f90cb9 100644 --- a/resources/lang/en-GB/general.php +++ b/resources/lang/en-GB/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessories', 'activated' => 'Activated', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/en-GB/localizations.php b/resources/lang/en-GB/localizations.php index 104421a0b0..2dfb05a2ac 100644 --- a/resources/lang/en-GB/localizations.php +++ b/resources/lang/en-GB/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/en-GB/validation.php b/resources/lang/en-GB/validation.php index 1c6ad8a148..05374e23af 100644 --- a/resources/lang/en-GB/validation.php +++ b/resources/lang/en-GB/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/en-ID/admin/settings/general.php b/resources/lang/en-ID/admin/settings/general.php index 6573f500d3..19e655d579 100644 --- a/resources/lang/en-ID/admin/settings/general.php +++ b/resources/lang/en-ID/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Pendaftaran Dua Faktor', 'two_factor_enabled_text' => 'Aktifkan Dua Faktor', 'two_factor_reset' => 'Atur Ulang Dua Faktor Rahasia', - 'two_factor_reset_help' => 'Ini akan memaksa pengguna untuk mendaftarkan perangkat mereka dengan Google Authenticator lagi. Ini bisa berguna jika perangkat mereka saat ini terdaftar hilang atau dicuri. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Dua perangkat faktor berhasil di-reset', 'two_factor_reset_error' => 'Dua faktor perangkat gagal direset', 'two_factor_enabled_warning' => 'Mengaktifkan dua faktor jika saat ini tidak diaktifkan dan akan segera memaksa anda untuk melakukan otentikasi dengan perangkat yang terdaftar di Google Auth. Anda juga akan memiliki kemampuan untuk mendaftarkan perangkat anda jika seseorang belum terdaftar.', diff --git a/resources/lang/en-ID/general.php b/resources/lang/en-ID/general.php index 059a30dc4e..ea6a6a168a 100644 --- a/resources/lang/en-ID/general.php +++ b/resources/lang/en-ID/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Aksesoris', 'activated' => 'Diaktifkan', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/en-ID/localizations.php b/resources/lang/en-ID/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/en-ID/localizations.php +++ b/resources/lang/en-ID/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/en-ID/validation.php b/resources/lang/en-ID/validation.php index 6807e15dc2..8f562281a1 100644 --- a/resources/lang/en-ID/validation.php +++ b/resources/lang/en-ID/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/en-US/admin/hardware/message.php b/resources/lang/en-US/admin/hardware/message.php index bf050ef974..96b4b6c949 100644 --- a/resources/lang/en-US/admin/hardware/message.php +++ b/resources/lang/en-US/admin/hardware/message.php @@ -17,6 +17,7 @@ return [ 'update' => [ 'error' => 'Asset was not updated, please try again', 'success' => 'Asset updated successfully.', + 'encrypted_warning' => 'Asset updated successfully, but encrypted custom fields were not due to permissions', 'nothing_updated' => 'No fields were selected, so nothing was updated.', 'no_assets_selected' => 'No assets were selected, so nothing was updated.', 'assets_do_not_exist_or_are_invalid' => 'Selected assets cannot be updated.', diff --git a/resources/lang/en-US/admin/licenses/message.php b/resources/lang/en-US/admin/licenses/message.php index c79f631680..27fbfe38a9 100644 --- a/resources/lang/en-US/admin/licenses/message.php +++ b/resources/lang/en-US/admin/licenses/message.php @@ -3,7 +3,7 @@ return array( 'does_not_exist' => 'License does not exist or you do not have permission to view it.', - 'user_does_not_exist' => 'User does not exist.', + 'user_does_not_exist' => 'User does not exist or you do not have permission to view them.', 'asset_does_not_exist' => 'The asset you are trying to associate with this license does not exist.', 'owner_doesnt_match_asset' => 'The asset you are trying to associate with this license is owned by somene other than the person selected in the assigned to dropdown.', 'assoc_users' => 'This license is currently checked out to a user and cannot be deleted. Please check the license in first, and then try deleting again. ', diff --git a/resources/lang/en-US/admin/licenses/table.php b/resources/lang/en-US/admin/licenses/table.php index dfce4136cb..9cabf9c883 100644 --- a/resources/lang/en-US/admin/licenses/table.php +++ b/resources/lang/en-US/admin/licenses/table.php @@ -4,6 +4,7 @@ return array( 'assigned_to' => 'Assigned To', 'checkout' => 'In/Out', + 'deleted_at' => 'Deleted at', 'id' => 'ID', 'license_email' => 'License Email', 'license_name' => 'Licensed To', diff --git a/resources/lang/en-US/admin/users/table.php b/resources/lang/en-US/admin/users/table.php index b8b919bf28..7c5fb2cad5 100644 --- a/resources/lang/en-US/admin/users/table.php +++ b/resources/lang/en-US/admin/users/table.php @@ -20,6 +20,7 @@ return array( 'lock_passwords' => 'Login details cannot be changed on this installation.', 'manager' => 'Manager', 'managed_locations' => 'Managed Locations', + 'managed_users' => 'Managed Users', 'name' => 'Name', 'nogroup' => 'No groups have been created yet. To add one, visit: ', 'notes' => 'Notes', diff --git a/resources/lang/en-US/general.php b/resources/lang/en-US/general.php index 9f9a0e08c7..0b6f613399 100644 --- a/resources/lang/en-US/general.php +++ b/resources/lang/en-US/general.php @@ -176,7 +176,7 @@ return [ 'last_name' => 'Last Name', 'license' => 'License', 'license_report' => 'License Report', - 'licenses_available' => 'licenses available', + 'licenses_available' => 'Licenses available', 'licenses' => 'Licenses', 'list_all' => 'List All', 'loading' => 'Loading... please wait....', @@ -245,6 +245,7 @@ return [ 'select_all' => 'Select All', 'search' => 'Search', 'select_category' => 'Select a Category', + 'select_datasource' => 'Select a Datasource', 'select_department' => 'Select a Department', 'select_depreciation' => 'Select a Depreciation Type', 'select_location' => 'Select a Location', @@ -312,6 +313,10 @@ return [ 'token_expired' => 'Your form session has expired. Please try again.', 'login_enabled' => 'Login Enabled', 'audit_due' => 'Due for Audit', + 'audit_due_days' => 'Assets Due for Audit Within :days Day|Assets Due for Audit Within :days Days', + 'checkin_due' => 'Due for Checkin', + 'checkin_overdue' => 'Overdue for Checkin', + 'checkin_due_days' => 'Assets Due for Checkin Within :days Day|Assets Due for Checkin Within :days Days', 'audit_overdue' => 'Overdue for Audit', 'accept' => 'Accept :asset', 'i_accept' => 'I accept', @@ -507,6 +512,9 @@ return [ 'or' => 'or', 'url' => 'URL', 'edit_fieldset' => 'Edit fieldset fields and options', + 'permission_denied_superuser_demo' => 'Permission denied. You cannot update user information for superadmins on the demo.', + 'pwd_reset_not_sent' => 'User is not activated, is LDAP synced, or does not have an email address', + 'error_sending_email' => 'Error sending email', 'bulk' => [ 'delete' => [ diff --git a/resources/lang/en-US/validation.php b/resources/lang/en-US/validation.php index 1c6ad8a148..05374e23af 100644 --- a/resources/lang/en-US/validation.php +++ b/resources/lang/en-US/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/es-CO/admin/settings/general.php b/resources/lang/es-CO/admin/settings/general.php index e04fb528bd..408de4e159 100644 --- a/resources/lang/es-CO/admin/settings/general.php +++ b/resources/lang/es-CO/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Inscripción en dos factores', 'two_factor_enabled_text' => 'Habilitar dos factores', 'two_factor_reset' => 'Restablecer secreto de dos factores', - 'two_factor_reset_help' => 'Esto obligará al usuario a inscribir su dispositivo con Google Authenticator de nuevo. Esto puede ser útil si su dispositivo actualmente inscrito es perdido o robado. ', + 'two_factor_reset_help' => 'Esto obligará al usuario a volver a inscribir su dispositivo en su aplicación de autenticación. Esto puede ser útil si su dispositivo actualmente inscrito es perdido o robado. ', 'two_factor_reset_success' => 'Dispositivo de doble factor restablecido con éxito', 'two_factor_reset_error' => 'Error al restablecer el dispositivo de doble factor', 'two_factor_enabled_warning' => 'Habilitar doble factor si no está habilitado inmediatamente le obligará a autenticarse con un dispositivo inscrito en Google Auth. Tendrás la posibilidad de inscribir tu dispositivo si uno no está actualmente inscrito.', diff --git a/resources/lang/es-CO/general.php b/resources/lang/es-CO/general.php index 2aa80fc3d8..e19bdc9603 100644 --- a/resources/lang/es-CO/general.php +++ b/resources/lang/es-CO/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accesorios', 'activated' => 'Activado', 'accepted_date' => 'Fecha aceptada', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'No hay activos o modelos de activos solicitables.', + 'countable' => [ + 'accessories' => ':count Accesorio|:count Accesorios', + 'assets' => ':count Activos|:count Activos', + 'licenses' => ':count Licencia|:count Licencias', + 'license_seats' => ':count Asiento de licencia|:count Asientos de licencia', + 'consumables' => ':count Consumible|:count Consumibles', + 'components' => ':count component|:count componentes', + ] + ]; diff --git a/resources/lang/es-CO/localizations.php b/resources/lang/es-CO/localizations.php index 23778098ff..be0ac5f74d 100644 --- a/resources/lang/es-CO/localizations.php +++ b/resources/lang/es-CO/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Eslovaco', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Español', 'es-CO'=> 'Español, Colombia', 'es-MX'=> 'Español, México', diff --git a/resources/lang/es-CO/validation.php b/resources/lang/es-CO/validation.php index 7bf55ce1db..95ec8816e1 100644 --- a/resources/lang/es-CO/validation.php +++ b/resources/lang/es-CO/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'El valor no puede ser negativo' ], + 'checkboxes' => ':attribute contiene opciones no válidas.', + 'radio_buttons' => ':attribute no es válido.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Valor no válido incluido en este campo', ]; diff --git a/resources/lang/es-ES/admin/settings/general.php b/resources/lang/es-ES/admin/settings/general.php index 2f5f607bcf..67926f4c38 100644 --- a/resources/lang/es-ES/admin/settings/general.php +++ b/resources/lang/es-ES/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Enrolamiento en verificación en dos pasos', 'two_factor_enabled_text' => 'Activar la verificación en dos pasos', 'two_factor_reset' => 'Reiniciar Secreto de verificación en dos pasos', - 'two_factor_reset_help' => 'Esto forzará al usuario a inscribirse otra vez su dispositivo con Google Authenticator. Esto puede ser útil si la pérdida o robo de su dispositivo actualmente inscrito. ', + 'two_factor_reset_help' => 'Esto obligará al usuario a volver a inscribir su dispositivo en su aplicación de autenticación. Esto puede ser útil si su dispositivo actualmente inscrito es perdido o robado. ', 'two_factor_reset_success' => 'Verificación en dos pasos de dispositivo reiniciado exitosamente', 'two_factor_reset_error' => 'Falló la Verificación en dos pasos del dispositivo', 'two_factor_enabled_warning' => 'Permitiendo dos factores si no está activado inmediatamente obliga a autenticar con un dispositivo de autenticación de Google inscritos. Usted tendrá la posibilidad de inscribirse el dispositivo si uno no está inscrito actualmente.', diff --git a/resources/lang/es-ES/general.php b/resources/lang/es-ES/general.php index 85a879dbbd..302000742e 100644 --- a/resources/lang/es-ES/general.php +++ b/resources/lang/es-ES/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accesorios', 'activated' => 'Activado', 'accepted_date' => 'Fecha aceptada', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'No hay activos o modelos de activos solicitables.', + 'countable' => [ + 'accessories' => ':count Accesorio|:count Accesorios', + 'assets' => ':count Activos|:count Activos', + 'licenses' => ':count Licencia|:count Licencias', + 'license_seats' => ':count Asiento de licencia|:count Asientos de licencia', + 'consumables' => ':count Consumible|:count Consumibles', + 'components' => ':count component|:count componentes', + ] + ]; diff --git a/resources/lang/es-ES/localizations.php b/resources/lang/es-ES/localizations.php index 71e19bb33e..7a9161e375 100644 --- a/resources/lang/es-ES/localizations.php +++ b/resources/lang/es-ES/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbio (Latino)', 'sk-SK'=> 'Eslovaco', 'sl-SI'=> 'Esloveno', + 'so-SO'=> 'Somali', 'es-ES'=> 'Español', 'es-CO'=> 'Español, Colombia', 'es-MX'=> 'Español, México', diff --git a/resources/lang/es-ES/validation.php b/resources/lang/es-ES/validation.php index 572a5f37e0..cf408dd329 100644 --- a/resources/lang/es-ES/validation.php +++ b/resources/lang/es-ES/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'El valor no puede ser negativo' ], + 'checkboxes' => ':attribute contiene opciones no válidas.', + 'radio_buttons' => ':attribute no es válido.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Valor no válido incluido en este campo', ]; diff --git a/resources/lang/es-MX/admin/settings/general.php b/resources/lang/es-MX/admin/settings/general.php index d6e146285a..f01b22a883 100644 --- a/resources/lang/es-MX/admin/settings/general.php +++ b/resources/lang/es-MX/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Enrolamiento en verificación en dos pasos', 'two_factor_enabled_text' => 'Activar la verificación en dos pasos', 'two_factor_reset' => 'Reiniciar Secreto de verificación en dos pasos', - 'two_factor_reset_help' => 'Esto forzará al usuario a inscribirse otra vez su dispositivo con Google Authenticator. Esto puede ser útil si la pérdida o robo de su dispositivo actualmente inscrito. ', + 'two_factor_reset_help' => 'Esto obligará al usuario a volver a inscribir su dispositivo en su aplicación de autenticación. Esto puede ser útil si su dispositivo actualmente inscrito es perdido o robado. ', 'two_factor_reset_success' => 'Verificación en dos pasos de dispositivo reiniciado exitosamente', 'two_factor_reset_error' => 'Falló la Verificación en dos pasos del dispositivo', 'two_factor_enabled_warning' => 'Permitiendo dos factores si no está activado inmediatamente obliga a autenticar con un dispositivo de autenticación de Google inscritos. Usted tendrá la posibilidad de inscribirse el dispositivo si uno no está inscrito actualmente.', diff --git a/resources/lang/es-MX/general.php b/resources/lang/es-MX/general.php index 7077577c11..5992a28a6d 100644 --- a/resources/lang/es-MX/general.php +++ b/resources/lang/es-MX/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accesorios', 'activated' => 'Activado', 'accepted_date' => 'Fecha de aceptación', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'No hay activos o modelos de activos solicitables.', + 'countable' => [ + 'accessories' => ':count Accesorio|:count Accesorios', + 'assets' => ':count Activos|:count Activos', + 'licenses' => ':count Licencia|:count Licencias', + 'license_seats' => ':count Asiento de licencia|:count Asientos de licencia', + 'consumables' => ':count Consumible|:count Consumibles', + 'components' => ':count component|:count componentes', + ] + ]; diff --git a/resources/lang/es-MX/localizations.php b/resources/lang/es-MX/localizations.php index 21ddca2ee2..35c44db06d 100644 --- a/resources/lang/es-MX/localizations.php +++ b/resources/lang/es-MX/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Eslovaco', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Español', 'es-CO'=> 'Español, Colombia', 'es-MX'=> 'Español, México', diff --git a/resources/lang/es-MX/validation.php b/resources/lang/es-MX/validation.php index e48082a07c..c3866a72d5 100644 --- a/resources/lang/es-MX/validation.php +++ b/resources/lang/es-MX/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'El valor no puede ser negativo' ], + 'checkboxes' => ':attribute contiene opciones no válidas.', + 'radio_buttons' => ':attribute no es válido.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Valor no válido incluido en este campo', ]; diff --git a/resources/lang/es-VE/admin/settings/general.php b/resources/lang/es-VE/admin/settings/general.php index b2339631d8..87e7a98cd5 100644 --- a/resources/lang/es-VE/admin/settings/general.php +++ b/resources/lang/es-VE/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Inscripción de verificación en dos pasos', 'two_factor_enabled_text' => 'Activar la verificación en dos pasos', 'two_factor_reset' => 'Reiniciar Secreto de Verificación en dos Pasos', - 'two_factor_reset_help' => 'Esto forzará al usuario a inscribir sus dispositivos con el Autenticador de Google nuevamente. Esto puede ser útil si su dispositivo inscrito actualmente se pierde o es robado. ', + 'two_factor_reset_help' => 'Esto obligará al usuario a volver a inscribir su dispositivo en su aplicación de autenticación. Esto puede ser útil si su dispositivo actualmente inscrito es perdido o robado. ', 'two_factor_reset_success' => 'Verificación de dos pasos del dispositivo reiniciado exitosamente', 'two_factor_reset_error' => 'La verificación de dos pasos del dispositivo ha fallado', 'two_factor_enabled_warning' => 'Habilitar la verificación de dos factores si no está activado actualmente de inmediato te forzará a autenticarte con un dispositivo inscrito en Autenticación de Google. Tendrás la habilidad de inscribir tu dispositivo si uno no está actualmente inscrito.', diff --git a/resources/lang/es-VE/general.php b/resources/lang/es-VE/general.php index 12399c5e68..2c8f6b3f53 100644 --- a/resources/lang/es-VE/general.php +++ b/resources/lang/es-VE/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accesorios', 'activated' => 'Activado', 'accepted_date' => 'Fecha aceptada', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'No hay activos o modelos de activos solicitables.', + 'countable' => [ + 'accessories' => ':count Accesorio|:count Accesorios', + 'assets' => ':count Activos|:count Activos', + 'licenses' => ':count Licencia|:count Licencias', + 'license_seats' => ':count Asiento de licencia|:count Asientos de licencia', + 'consumables' => ':count Consumible|:count Consumibles', + 'components' => ':count component|:count componentes', + ] + ]; diff --git a/resources/lang/es-VE/localizations.php b/resources/lang/es-VE/localizations.php index 23778098ff..be0ac5f74d 100644 --- a/resources/lang/es-VE/localizations.php +++ b/resources/lang/es-VE/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Eslovaco', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Español', 'es-CO'=> 'Español, Colombia', 'es-MX'=> 'Español, México', diff --git a/resources/lang/es-VE/validation.php b/resources/lang/es-VE/validation.php index da892cd4b1..2dd7274202 100644 --- a/resources/lang/es-VE/validation.php +++ b/resources/lang/es-VE/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'El valor no puede ser negativo' ], + 'checkboxes' => ':attribute contiene opciones no válidas.', + 'radio_buttons' => ':attribute no es válido.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Valor no válido incluido en este campo', ]; diff --git a/resources/lang/et-EE/admin/settings/general.php b/resources/lang/et-EE/admin/settings/general.php index 89a7488967..1eb8693315 100644 --- a/resources/lang/et-EE/admin/settings/general.php +++ b/resources/lang/et-EE/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Kahe faktori registreerimine', 'two_factor_enabled_text' => 'Luba kaks tegurit', 'two_factor_reset' => 'Lähtesta kahefaktori saladus', - 'two_factor_reset_help' => 'See sunnib kasutajat uuesti oma seadet Google Authenticatoriga registreerima. See võib olla kasulik, kui nende praegu registreeritav seade on kadunud või varastatud.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Kahe faktori seade on edukalt lähtestatud', 'two_factor_reset_error' => 'Kaks tegurit seadete lähtestamine nurjus', 'two_factor_enabled_warning' => 'Kaheteguri lubamine, kui see pole praegu lubatud, viib teid otsekohe Google Auth-seadmesse autentimiseks. Teil on võimalus oma seadet registreeruda, kui seda praegu ei ole.', diff --git a/resources/lang/et-EE/general.php b/resources/lang/et-EE/general.php index 3332839c5f..f411c13329 100644 --- a/resources/lang/et-EE/general.php +++ b/resources/lang/et-EE/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Tarvikud', 'activated' => 'Aktiveeritud', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/et-EE/localizations.php b/resources/lang/et-EE/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/et-EE/localizations.php +++ b/resources/lang/et-EE/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/et-EE/validation.php b/resources/lang/et-EE/validation.php index 48146bd504..37f292a3ce 100644 --- a/resources/lang/et-EE/validation.php +++ b/resources/lang/et-EE/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/fa-IR/admin/settings/general.php b/resources/lang/fa-IR/admin/settings/general.php index a263070002..3b087ec16b 100644 --- a/resources/lang/fa-IR/admin/settings/general.php +++ b/resources/lang/fa-IR/admin/settings/general.php @@ -363,7 +363,7 @@ return [ 'two_factor_enrollment' => 'ثبت نام دو عامل', 'two_factor_enabled_text' => 'فعال کردن دو عامل', 'two_factor_reset' => 'تنظیم مجدد دو راز فاکتور', - 'two_factor_reset_help' => 'این باعث می شود کاربر دوباره دستگاه خود را با Google Authenticator ثبت کند. این می تواند مفید باشد اگر دستگاه ثبت شده فعلی شما گم شده یا دزدیده شود.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'دستگاه دو عامل با موفقیت تنظیم مجدد', 'two_factor_reset_error' => 'تنظیم مجدد دستگاه دو عامل انجام نشد', 'two_factor_enabled_warning' => 'فعال کردن دو عامل اگر آن را در حال حاضر فعال نیست، بلافاصله شما را مجبور به تایید با یک دستگاه ثبت نام Google Auth. اگر کسی در حال حاضر ثبت نام نکند، می توانید دستگاه خود را ثبت نام کنید.', diff --git a/resources/lang/fa-IR/general.php b/resources/lang/fa-IR/general.php index 817b6ea72f..fd9ad64bac 100644 --- a/resources/lang/fa-IR/general.php +++ b/resources/lang/fa-IR/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'تجهیزات جانبی', 'activated' => 'فعال شد', 'accepted_date' => 'Date Accepted', @@ -610,4 +611,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/fa-IR/localizations.php b/resources/lang/fa-IR/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/fa-IR/localizations.php +++ b/resources/lang/fa-IR/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/fa-IR/validation.php b/resources/lang/fa-IR/validation.php index c642a43b87..3c5b9bf6fd 100644 --- a/resources/lang/fa-IR/validation.php +++ b/resources/lang/fa-IR/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'مقدار نباید منفی باشد.' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/fi-FI/admin/settings/general.php b/resources/lang/fi-FI/admin/settings/general.php index 89e68ff6eb..6b9a4dfc8b 100644 --- a/resources/lang/fi-FI/admin/settings/general.php +++ b/resources/lang/fi-FI/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Kaksivaiheisen tunnistautumisen käyttöönotto', 'two_factor_enabled_text' => 'Ota käyttöön kaksivaiheinen tunnistautuminen', 'two_factor_reset' => 'Nollaa MFA salaisuus', - 'two_factor_reset_help' => 'Tämä pakottaa käyttäjän rekisteröimään laitteen uudelleen Google Authenticator -palveluun. Tämä voi olla hyödyllistä, jos heille tällä hetkellä rekisteröidyt laitteet menetetään tai varastetaan. ', + 'two_factor_reset_help' => 'Tämä pakottaa käyttäjän rekisteröimään laitteensa uudelleen niiden todennussovelluksella. Tämä voi olla hyödyllistä, jos heidän tällä hetkellä ilmoittautunut laite katoaa tai varastetaan. ', 'two_factor_reset_success' => 'MFA laite onnistuneesti nollattu', 'two_factor_reset_error' => 'MFA laitteen nollaus epäonnistui', 'two_factor_enabled_warning' => 'Kaksivaiheisen tunnistautumisen ottaminen käyttöön,, pakottaa sinut autentikoimaan Google Auth - laitteella. Voit lisätä sellaisen, jos sellaista ei ole vielä käytössä.', diff --git a/resources/lang/fi-FI/general.php b/resources/lang/fi-FI/general.php index 5a51977a78..7e4a982af5 100644 --- a/resources/lang/fi-FI/general.php +++ b/resources/lang/fi-FI/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Oheistarvikkeet', 'activated' => 'Aktivoitu', 'accepted_date' => 'Hyväksytty, päiväys', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Pyydettäviä omaisuuseriä tai omaisuusmalleja ei ole.', + 'countable' => [ + 'accessories' => ':count Lisävaruste :count Lisätarvikkeet', + 'assets' => ':count Varat :count Varat', + 'licenses' => ':count Lisenssi :count Lisenssit', + 'license_seats' => ':count Lisenssipaikka:count Lisenssi Istuimet', + 'consumables' => ':count Kulutustavara :count Kulutustavarat', + 'components' => ':count Komponentti :count Komponentit', + ] + ]; diff --git a/resources/lang/fi-FI/localizations.php b/resources/lang/fi-FI/localizations.php index 779dcf31ee..0e79f02ef1 100644 --- a/resources/lang/fi-FI/localizations.php +++ b/resources/lang/fi-FI/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbia (latinalainen)', 'sk-SK'=> 'Slovakki', 'sl-SI'=> 'Slovenia', + 'so-SO'=> 'Somali', 'es-ES'=> 'Espanja', 'es-CO'=> 'Espanja, Kolumbia', 'es-MX'=> 'Espanja, Meksiko', diff --git a/resources/lang/fi-FI/validation.php b/resources/lang/fi-FI/validation.php index c0b9e10795..488a37c911 100644 --- a/resources/lang/fi-FI/validation.php +++ b/resources/lang/fi-FI/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Arvo ei voi olla negatiivinen' ], + 'checkboxes' => ':attribute sisältää virheellisiä vaihtoehtoja.', + 'radio_buttons' => ':attribute on virheellinen.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Virheellinen arvo sisältyy tähän kenttään', ]; diff --git a/resources/lang/fil-PH/admin/settings/general.php b/resources/lang/fil-PH/admin/settings/general.php index 10b914c441..e30660b4ac 100644 --- a/resources/lang/fil-PH/admin/settings/general.php +++ b/resources/lang/fil-PH/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Ang Two-Factor Enrollment', 'two_factor_enabled_text' => 'Paganahin ang Dalawang Factor', 'two_factor_reset' => 'I-reset ang Two-Factor na Sekreto', - 'two_factor_reset_help' => 'Ito ay maaaring magpilit sa mga gumagamit na mag-enroll muli sa kanilang device gamit ang Google Authenticator. Ito ay maaaring kapaki-pakinabang kung ang kanilang na-enroll na device ay nawala o ninakaw. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Ang dalawang factor na device ay matagumpay na nai-reset', 'two_factor_reset_error' => 'Ang pag-reset sa dalawang factor na device ay hindi nagtagumpay', 'two_factor_enabled_warning' => 'Paganahin ang dalawang factor kapag ito ay kasalukuyang hindi pinagana ay maaari itong maghatid ng madalian na pagpilit na mag-authenticate gamit ang Google Auth sa na-enroll na device. Ikaw ay mayroong abilidad na i-enroll ang iyong device kapag may isa na hindi pa kasalukuyang naka-enroll.', diff --git a/resources/lang/fil-PH/general.php b/resources/lang/fil-PH/general.php index ef701e595f..af873c2f55 100644 --- a/resources/lang/fil-PH/general.php +++ b/resources/lang/fil-PH/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Mga Aksesorya', 'activated' => 'Pinagana', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/fil-PH/localizations.php b/resources/lang/fil-PH/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/fil-PH/localizations.php +++ b/resources/lang/fil-PH/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/fil-PH/validation.php b/resources/lang/fil-PH/validation.php index ff478aee79..a47cb26d6f 100644 --- a/resources/lang/fil-PH/validation.php +++ b/resources/lang/fil-PH/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/fr-FR/admin/settings/general.php b/resources/lang/fr-FR/admin/settings/general.php index c29de7d036..69a8050deb 100644 --- a/resources/lang/fr-FR/admin/settings/general.php +++ b/resources/lang/fr-FR/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Inscription à deux facteurs', 'two_factor_enabled_text' => 'Activer l\'authentification à deux facteurs', 'two_factor_reset' => 'Réinitialiser le Secret à deux facteurs', - 'two_factor_reset_help' => 'Ceci forcera l’utilisateur à inscrire de nouveau leur appareil avec Google Authenticator. Cela peut être utile si leur appareil actuellement inscrit est perdue ou volée. ', + 'two_factor_reset_help' => 'Ceci forcera l\'utilisateur à réinscrire son appareil avec son application d\'authentification. Cela peut être utile si leur appareil actuellement inscrit est perdu ou volé. ', 'two_factor_reset_success' => 'Dispositif à deux facteurs réinitialisées avec succès', 'two_factor_reset_error' => 'Échec de réinitialisation du dispositif à deux facteurs', 'two_factor_enabled_warning' => 'L\'activation à deux facteurs si elle n\'est pas actuellement activée vous obligera immédiatement à vous authentifier avec un appareil inscrit Google Auth. Vous aurez la possibilité d\'inscrire votre appareil si aucun n\'est inscrit actuellement.', diff --git a/resources/lang/fr-FR/general.php b/resources/lang/fr-FR/general.php index 36c79f60bc..8143f783d5 100644 --- a/resources/lang/fr-FR/general.php +++ b/resources/lang/fr-FR/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessoires', 'activated' => 'Activé', 'accepted_date' => 'Date d\'acceptation', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Il n\'y a pas d\'actifs ou de modèles d\'actifs demandés.', + 'countable' => [ + 'accessories' => ':count Accessoire|:count Accessoires', + 'assets' => ':count Actif|:count Actifs', + 'licenses' => ':count Licence|:count Licences', + 'license_seats' => ':count Siège de licence|:count sièges de licence', + 'consumables' => ':count Consommable|:count Consommables', + 'components' => ':count Composant|:count Composants', + ] + ]; diff --git a/resources/lang/fr-FR/localizations.php b/resources/lang/fr-FR/localizations.php index a72da355b2..03f030a6e3 100644 --- a/resources/lang/fr-FR/localizations.php +++ b/resources/lang/fr-FR/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbe (latin)', 'sk-SK'=> 'Slovaque', 'sl-SI'=> 'Slovène', + 'so-SO'=> 'Somali', 'es-ES'=> 'Espagnol', 'es-CO'=> 'Espagnol, Colombie', 'es-MX'=> 'Espagnol, Mexique', diff --git a/resources/lang/fr-FR/validation.php b/resources/lang/fr-FR/validation.php index 1532d5972e..20bc87f255 100644 --- a/resources/lang/fr-FR/validation.php +++ b/resources/lang/fr-FR/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'La valeur ne peut pas être négative' ], + 'checkboxes' => ':attribute contient des options non valides.', + 'radio_buttons' => ':attribute est invalide.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Valeur non valide incluse dans ce champ', ]; diff --git a/resources/lang/ga-IE/admin/settings/general.php b/resources/lang/ga-IE/admin/settings/general.php index 5c46e86ca0..f1c0ed6477 100644 --- a/resources/lang/ga-IE/admin/settings/general.php +++ b/resources/lang/ga-IE/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Rollú Dhá Fachtóir', 'two_factor_enabled_text' => 'Cumasaigh Dhá Fachtóir', 'two_factor_reset' => 'Athshocraigh Dhá-Rúnda Fachtóir', - 'two_factor_reset_help' => 'Cuirfidh sé seo ar an úsáideoir a n-gléas a chlárú le Google Authenticator arís. D\'fhéadfadh sé seo a bheith úsáideach má cailleadh nó goideadh an gléas atá cláraithe faoi láthair.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Athshocraigh dhá fheiste fachtóir go rathúil', 'two_factor_reset_error' => 'Theip ar dhá athshocrú feiste fachtóir', 'two_factor_enabled_warning' => 'Má chuirtear ar chumas dhá fhachtóir mura bhfuil sé á chumasú faoi láthair, cuirfidh tú i bhfeidhm láithreach le d\'fhíordheimhniú le gléas cláraithe Google Auth. Beidh an cumas agat do ghléas a chlárú mura bhfuil duine cláraithe faoi láthair.', diff --git a/resources/lang/ga-IE/general.php b/resources/lang/ga-IE/general.php index 3c68ef5c0e..dde15f12f0 100644 --- a/resources/lang/ga-IE/general.php +++ b/resources/lang/ga-IE/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessories', 'activated' => 'Gníomhachtaithe', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/ga-IE/localizations.php b/resources/lang/ga-IE/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/ga-IE/localizations.php +++ b/resources/lang/ga-IE/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/ga-IE/validation.php b/resources/lang/ga-IE/validation.php index 5cfe472ef3..81bdf6af44 100644 --- a/resources/lang/ga-IE/validation.php +++ b/resources/lang/ga-IE/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/he-IL/admin/hardware/form.php b/resources/lang/he-IL/admin/hardware/form.php index 2491e0e9b8..730ab06ce0 100644 --- a/resources/lang/he-IL/admin/hardware/form.php +++ b/resources/lang/he-IL/admin/hardware/form.php @@ -11,7 +11,7 @@ return [ 'bulk_update_help' => 'טופס זה מאפשר לך לעדכן מספר נכסים בבת אחת. מלא רק את השדות שאתה צריך לשנות. כל השדות שנותרו ריקים יישארו ללא שינוי.', 'bulk_update_warn' => 'You are about to edit the properties of a single asset.|You are about to edit the properties of :asset_count assets.', 'bulk_update_with_custom_field' => 'Note the assets are :asset_model_count different types of models.', - 'bulk_update_model_prefix' => 'On Models', + 'bulk_update_model_prefix' => 'בדגמים', 'bulk_update_custom_field_unique' => 'This is a unique field and can not be bulk edited.', 'checkedout_to' => 'הוצא אל', 'checkout_date' => 'תבדוק את התאריך', diff --git a/resources/lang/he-IL/admin/settings/general.php b/resources/lang/he-IL/admin/settings/general.php index 70c114b7d1..160b80d3fe 100644 --- a/resources/lang/he-IL/admin/settings/general.php +++ b/resources/lang/he-IL/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'רישום שני גורמים', 'two_factor_enabled_text' => 'הפעל שני גורמים', 'two_factor_reset' => 'אפס סודי פקטור', - 'two_factor_reset_help' => 'פעולה זו תאלץ את המשתמש לרשום שוב את המכשיר באמצעות Google Authenticator. זה יכול להיות שימושי אם המכשיר נרשם כעת אבד או נגנב.', + 'two_factor_reset_help' => 'פעולה זו תאלץ את המשתמש לרשום שוב את המכשיר באמצעות יישומון האימות שלו. היא יכולה להיות שימושית אם המכשיר שרשום כעת במערכת אבד או נגנב. ', 'two_factor_reset_success' => 'שני מכשיר גורם לאפס בהצלחה', 'two_factor_reset_error' => 'איפוס התקן שני גורמים נכשל', 'two_factor_enabled_warning' => 'הפעלת שני גורמים אם היא אינה מופעלת כעת תאלץ אותך מיד לבצע אימות באמצעות מכשיר רשום של Google Auth. תהיה לך אפשרות לרשום את המכשיר שלך אם אינך רשום כעת.', diff --git a/resources/lang/he-IL/general.php b/resources/lang/he-IL/general.php index b0e8550429..e32c8143fe 100644 --- a/resources/lang/he-IL/general.php +++ b/resources/lang/he-IL/general.php @@ -1,6 +1,7 @@ 'איפוס אימות דו־שלבי', 'accessories' => 'אביזרים', 'activated' => 'מוּפעָל', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/he-IL/localizations.php b/resources/lang/he-IL/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/he-IL/localizations.php +++ b/resources/lang/he-IL/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/he-IL/validation.php b/resources/lang/he-IL/validation.php index 98d4d07165..9cca43938d 100644 --- a/resources/lang/he-IL/validation.php +++ b/resources/lang/he-IL/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'הערך לא יכול להיות שלילי' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/hr-HR/admin/settings/general.php b/resources/lang/hr-HR/admin/settings/general.php index 9fa98618e9..f35cf107f5 100644 --- a/resources/lang/hr-HR/admin/settings/general.php +++ b/resources/lang/hr-HR/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Dva faktora upisa', 'two_factor_enabled_text' => 'Omogući dva faktora', 'two_factor_reset' => 'Poništi dvoznamenkasti faktor', - 'two_factor_reset_help' => 'To će prisiliti korisnika da ponovno registrira svoj uređaj s Googleovom autentifikatorom. To može biti korisno ako je izgubljen ili ukraden trenutačno upisani uređaj.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Uspješno resetira dva faktorska uređaja', 'two_factor_reset_error' => 'Dva faktora resetiranja uređaja nije uspjela', 'two_factor_enabled_warning' => 'Omogućivanje dva faktora ako trenutačno nije omogućeno odmah će vas prisiliti na provjeru autentičnosti pomoću uređaja za prijavu na Google Auth. Moći ćete upisati svoj uređaj ako ga trenutno niste upisali.', diff --git a/resources/lang/hr-HR/general.php b/resources/lang/hr-HR/general.php index 0c521775bf..8d791e1bea 100644 --- a/resources/lang/hr-HR/general.php +++ b/resources/lang/hr-HR/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Pribor', 'activated' => 'aktiviran', 'accepted_date' => 'Datum prihvaćen', @@ -32,9 +33,9 @@ return [ 'assets_checked_in_count' => 'assets checked in', 'assets_checked_out_count' => 'assets checked out', 'asset_deleted_warning' => 'This asset has been deleted. You must restore it before you can assign it to someone.', - 'assigned_date' => 'Date Assigned', - 'assigned_to' => 'Assigned to :name', - 'assignee' => 'Assigned to', + 'assigned_date' => 'Datum dodjele', + 'assigned_to' => 'Dodijeljeno :name', + 'assignee' => 'Dodijeljeno', 'avatar_delete' => 'Obriši avatar', 'avatar_upload' => 'Učitaj avatar', 'back' => 'Nazad', @@ -42,13 +43,13 @@ return [ 'bulkaudit' => 'Skupna revizija', 'bulkaudit_status' => 'Status revizije', 'bulk_checkout' => 'Bulk Checkout', - 'bulk_edit' => 'Bulk Edit', - 'bulk_delete' => 'Bulk Delete', + 'bulk_edit' => 'Masovno uredi', + 'bulk_delete' => 'Masovno briši', 'bulk_actions' => 'Masovne radnje', 'bulk_checkin_delete' => 'Bulk Checkin / Delete Users', 'byod' => 'BYOD', - 'byod_help' => 'This device is owned by the user', - 'bystatus' => 'by Status', + 'byod_help' => 'Ovaj uređaj je vlasništvo korisnika', + 'bystatus' => 'po Statusu', 'cancel' => 'Otkazati', 'categories' => 'Kategorije', 'category' => 'Kategorija', @@ -72,19 +73,19 @@ return [ 'consumable' => 'potrošni', 'consumables' => 'Potrošni', 'country' => 'Zemlja', - 'could_not_restore' => 'Error restoring :item_type: :error', - 'not_deleted' => 'The :item_type is not deleted so it cannot be restored', + 'could_not_restore' => 'Greška u obnavljanju :item_type: :error', + 'not_deleted' => ':item_type nije brisan pa ne može biti ni vraćen', 'create' => 'Izradi novu', 'created' => 'Stavka je stvorena', 'created_asset' => 'stvorio imovinu', - 'created_at' => 'Created At', - 'created_by' => 'Created By', - 'record_created' => 'Record Created', + 'created_at' => 'Izrađen', + 'created_by' => 'Izradio/la', + 'record_created' => 'Zapis izrađen', 'updated_at' => 'Ažurirano u', 'currency' => '$', // this is deprecated 'current' => 'struja', - 'current_password' => 'Current Password', - 'customize_report' => 'Customize Report', + 'current_password' => 'Postojeća lozinka', + 'customize_report' => 'Prilagodi izvještaj', 'custom_report' => 'Prilagođeno izvješće o aktivi', 'dashboard' => 'kontrolna ploča', 'days' => 'dana', @@ -102,28 +103,28 @@ return [ 'department' => 'odjel', 'deployed' => 'razmještene', 'depreciation' => 'deprecijacija', - 'depreciations' => 'Depreciations', + 'depreciations' => 'Amortizacija', 'depreciation_report' => 'Izvješće o amortizaciji', 'details' => 'Detalji', 'download' => 'Preuzimanje', - 'download_all' => 'Download All', + 'download_all' => 'Preuzmi sve', 'editprofile' => 'Uredi svoj profil', 'eol' => 'EOL', 'email_domain' => 'Domena e-pošte', 'email_format' => 'Format e-pošte', - 'employee_number' => 'Employee Number', + 'employee_number' => 'Broj djelatnika', 'email_domain_help' => 'Ovo se koristi za generiranje e-adresa prilikom uvoza', - 'error' => 'Error', - 'exclude_archived' => 'Exclude Archived Assets', - 'exclude_deleted' => 'Exclude Deleted Assets', - 'example' => 'Example: ', + 'error' => 'Greška', + 'exclude_archived' => 'Isključi arhiviranu imovinu', + 'exclude_deleted' => 'Isključi izbrisanu imovinu', + 'example' => 'Primjer: ', 'filastname_format' => 'Prvo početno prezime (jsmith@example.com)', 'firstname_lastname_format' => 'Prezime prezime (jane.smith@example.com)', 'firstname_lastname_underscore_format' => 'Ime Prezime (jane_smith@example.com)', 'lastnamefirstinitial_format' => 'Prezime Prvo slovo imena (smithj@example.com)', - 'firstintial_dot_lastname_format' => 'First Initial Last Name (j.smith@example.com)', - 'firstname_lastname_display' => 'First Name Last Name (Jane Smith)', - 'lastname_firstname_display' => 'Last Name First Name (Smith Jane)', + 'firstintial_dot_lastname_format' => 'Inicijal imena i prezime (i.ivic)', + 'firstname_lastname_display' => 'Ime prezime (Ivana Ivić)', + 'lastname_firstname_display' => 'Prezime ime (Ivić Ivana)', 'name_display_format' => 'Name Display Format', 'first' => 'Prvi', 'firstnamelastname' => 'First Name Last Name (janesmith@example.com)', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/hr-HR/localizations.php b/resources/lang/hr-HR/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/hr-HR/localizations.php +++ b/resources/lang/hr-HR/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/hr-HR/validation.php b/resources/lang/hr-HR/validation.php index 616da01722..d9db981195 100644 --- a/resources/lang/hr-HR/validation.php +++ b/resources/lang/hr-HR/validation.php @@ -96,15 +96,17 @@ return [ 'url' => 'Format atributa nije važeći.', 'unique_undeleted' => ':attribute mora biti jedinstven.', 'non_circular' => 'The :attribute must not create a circular reference.', - 'not_array' => ':attribute cannot be an array.', + 'not_array' => ':attribute ne smije biti niz.', 'disallow_same_pwd_as_user_fields' => 'Password cannot be the same as the username.', 'letters' => 'Password must contain at least one letter.', - 'numbers' => 'Password must contain at least one number.', + 'numbers' => 'Zaporka treba sadržavati barem jedan broj.', 'case_diff' => 'Password must use mixed case.', 'symbols' => 'Password must contain symbols.', 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/hu-HU/admin/settings/general.php b/resources/lang/hu-HU/admin/settings/general.php index e2daa2d8c3..4ce6326d52 100644 --- a/resources/lang/hu-HU/admin/settings/general.php +++ b/resources/lang/hu-HU/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Két faktoros beiratkozás', 'two_factor_enabled_text' => 'Engedélyezze a két tényezőt', 'two_factor_reset' => 'Törölje a két faktor titkát', - 'two_factor_reset_help' => 'Ez arra kényszeríti a felhasználót, hogy újból beiktassa eszközét a Google Hitelesítővel. Ez hasznos lehet, ha az éppen beiratkozott eszközüket elveszik vagy ellopják.', + 'two_factor_reset_help' => 'A felhasználónak újra fel kell vennie az eszközt a hitelesítő alkalmazásba. Ez hasznos lehet, ha az aktuálisan felvett eszközt elveszette vagy ellopták. ', 'two_factor_reset_success' => 'Két tényező eszköz sikeresen visszaáll', 'two_factor_reset_error' => 'Két faktoros eszköz visszaállítása sikertelen', 'two_factor_enabled_warning' => 'A két tényező bekapcsolása, ha nincs aktuálisan engedélyezve, azonnal kényszeríti Önt arra, hogy hitelesítést végezzen egy Google Auth által beiratkozott eszközzel. Lehetőséged lesz arra, hogy beírja a készüléket, ha nincs beiratkozva.', diff --git a/resources/lang/hu-HU/general.php b/resources/lang/hu-HU/general.php index 9476a04dd3..ee68ff9c39 100644 --- a/resources/lang/hu-HU/general.php +++ b/resources/lang/hu-HU/general.php @@ -1,6 +1,7 @@ 'Kétfaktoros azonosítás alaphelyzetbe állítása', 'accessories' => 'Tartozékok', 'activated' => 'Aktivált', 'accepted_date' => 'Visszaigazolás dátuma', @@ -201,7 +202,7 @@ return [ 'new_password' => 'Új jelszó', 'next' => 'Tovább', 'next_audit_date' => 'Következő ellenőrzési dátum', - 'no_email' => 'No email address associated with this user', + 'no_email' => 'Ehhez a felhasználóhoz nincs e-mail társítva', 'last_audit' => 'Utolsó ellenőrzés', 'new' => 'új!', 'no_depreciation' => 'Nincs értékcsökkentés', @@ -462,31 +463,31 @@ return [ 'no_autoassign_licenses_help' => 'Do not include user for bulk-assigning through the license UI or cli tools.', 'modal_confirm_generic' => 'Biztos benne?', 'cannot_be_deleted' => 'Ez az elem nem törölhető', - 'cannot_be_edited' => 'This item cannot be edited.', - 'undeployable_tooltip' => 'This item cannot be checked out. Check the quantity remaining.', + 'cannot_be_edited' => 'Ez az elem nem szerkeszthető.', + 'undeployable_tooltip' => 'Ez az elem nem kiadható. Ellenőrizd a fennmaradó mennyiséget.', 'serial_number' => 'Sorozatszám', 'item_notes' => ':item Megjegyzések', 'item_name_var' => ':eszköz neve', - 'error_user_company' => 'Checkout target company and asset company do not match', - 'error_user_company_accept_view' => 'An Asset assigned to you belongs to a different company so you can\'t accept nor deny it, please check with your manager', + 'error_user_company' => 'A kiadásban szereplő cég nem egyezik meg az eszköznél megadott céggel', + 'error_user_company_accept_view' => 'Egy hozzád rendelt eszköz egy másik céghez tartozik, így nem fogadhatod el vagy utasíthatod vissza, kérlek egyeztess a vezetőddel', 'importer' => [ 'checked_out_to_fullname' => 'Kiadva a következőnek: Full Name', 'checked_out_to_first_name' => 'Kiadva a következőnek: First Name', 'checked_out_to_last_name' => 'Kiadva a következőnek: Last Name', 'checked_out_to_username' => 'Kiadva a következőnek: Username', 'checked_out_to_email' => 'Kiadva a következőnek: Email', - 'checked_out_to_tag' => 'Checked Out to: Asset Tag', + 'checked_out_to_tag' => 'Kiadva a következőnek: Asset Tag', 'manager_first_name' => 'Manager Keresztnév', 'manager_last_name' => 'Manager Vezetéknév', 'manager_full_name' => 'Manager Teljes Név', 'manager_username' => 'Manager Felhasználónév', 'checkout_type' => 'Kiadás Típusa', - 'checkout_location' => 'Checkout to Location', + 'checkout_location' => 'Kiadás helyszínre', 'image_filename' => 'kép fájlnév', 'do_not_import' => 'Ne importáld', 'vip' => 'VIP', 'avatar' => 'Profilkép', - 'gravatar' => 'Gravatar Email', + 'gravatar' => 'Gravatar e-mail', 'currency' => 'Pénznem', 'address2' => 'Cím sor 2', 'import_note' => 'A CSV importálóval betöltve', @@ -497,7 +498,7 @@ return [ 'copy_to_clipboard' => 'Másolás a vágólapra', 'copied' => 'Másolva!', 'status_compatibility' => 'If assets are already assigned, they cannot be changed to a non-deployable status type and this value change will be skipped.', - 'rtd_location_help' => 'This is the location of the asset when it is not checked out', + 'rtd_location_help' => 'Ez az eszköz helye, amikor nincs kiadva', 'item_not_found' => ':item_type ID :id nem létezik, vagy törölve lett', 'action_permission_denied' => 'Nincs jogosultsága a következőhöz: :action :item_type ID :id', 'action_permission_generic' => 'Nincs jogosultsága a következő művelethez: :action a következőn: :item_type', @@ -512,11 +513,20 @@ return [ 'header' => 'Bulk Delete :object_type', 'warn' => 'You are about to delete one :object_type|You are about to delete :count :object_type', 'success' => ':object_type successfully deleted|Successfully deleted :count :object_type', - 'error' => 'Could not delete :object_type', + 'error' => 'A(z) :object_type törlése sikertelen volt', 'nothing_selected' => 'No :object_type selected - nothing to do', 'partial' => 'Deleted :success_count :object_type, but :error_count :object_type could not be deleted', ], ], - 'no_requestable' => 'There are no requestable assets or asset models.', + 'no_requestable' => 'Nincs kikérhető eszköz, vagy eszköz modell.', + + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] ]; diff --git a/resources/lang/hu-HU/localizations.php b/resources/lang/hu-HU/localizations.php index 70623335b5..e70829c9c6 100644 --- a/resources/lang/hu-HU/localizations.php +++ b/resources/lang/hu-HU/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Szerb (latin betűs)', 'sk-SK'=> 'szlovák', 'sl-SI'=> 'Szlovèn', + 'so-SO'=> 'Szomáli', 'es-ES'=> 'Spanyol', 'es-CO'=> 'Spanyol, Kolumbia', 'es-MX'=> 'Spanyol, Mexikó', diff --git a/resources/lang/hu-HU/validation.php b/resources/lang/hu-HU/validation.php index 056c9e1fbf..72fe9af32c 100644 --- a/resources/lang/hu-HU/validation.php +++ b/resources/lang/hu-HU/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Az érték nem lehet negatív' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/id-ID/admin/settings/general.php b/resources/lang/id-ID/admin/settings/general.php index 1e2ed502f1..157b6339ff 100644 --- a/resources/lang/id-ID/admin/settings/general.php +++ b/resources/lang/id-ID/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Pendaftaran Dua Faktor', 'two_factor_enabled_text' => 'Aktifkan Dua Faktor', 'two_factor_reset' => 'Reset Dua Faktor Rahasia', - 'two_factor_reset_help' => 'Ini akan memaksa pengguna untuk mendaftarkan perangkat mereka dengan Google Authenticator lagi. Ini bisa berguna jika perangkat mereka saat ini terdaftar hilang atau dicuri.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Dua perangkat faktor berhasil di-reset', 'two_factor_reset_error' => 'Dua faktor perangkat reset gagal', 'two_factor_enabled_warning' => 'Mengaktifkan dua faktor jika saat ini tidak diaktifkan akan segera memaksa Anda untuk melakukan otentikasi dengan perangkat yang terdaftar di Google Auth. Anda akan memiliki kemampuan untuk mendaftarkan perangkat Anda jika seseorang tidak terdaftar saat ini.', diff --git a/resources/lang/id-ID/general.php b/resources/lang/id-ID/general.php index eaeca65166..644f947a46 100644 --- a/resources/lang/id-ID/general.php +++ b/resources/lang/id-ID/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Aksesoris', 'activated' => 'Diaktifkan', 'accepted_date' => 'Tanggal Diterima', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/id-ID/localizations.php b/resources/lang/id-ID/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/id-ID/localizations.php +++ b/resources/lang/id-ID/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/id-ID/validation.php b/resources/lang/id-ID/validation.php index 8434e8f754..3d20f64887 100644 --- a/resources/lang/id-ID/validation.php +++ b/resources/lang/id-ID/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/is-IS/admin/settings/general.php b/resources/lang/is-IS/admin/settings/general.php index 466e9e93f6..a8a5c122f7 100644 --- a/resources/lang/is-IS/admin/settings/general.php +++ b/resources/lang/is-IS/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/is-IS/general.php b/resources/lang/is-IS/general.php index fa8d8860e1..63acf5863f 100644 --- a/resources/lang/is-IS/general.php +++ b/resources/lang/is-IS/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Aukahlutir', 'activated' => 'Virkjað', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/is-IS/localizations.php b/resources/lang/is-IS/localizations.php index 4df45857b9..aa6176add1 100644 --- a/resources/lang/is-IS/localizations.php +++ b/resources/lang/is-IS/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/is-IS/validation.php b/resources/lang/is-IS/validation.php index 7b54b3c7a2..34dffb25c7 100644 --- a/resources/lang/is-IS/validation.php +++ b/resources/lang/is-IS/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/it-IT/admin/depreciations/general.php b/resources/lang/it-IT/admin/depreciations/general.php index fced8ad21a..b1e9e9ef81 100644 --- a/resources/lang/it-IT/admin/depreciations/general.php +++ b/resources/lang/it-IT/admin/depreciations/general.php @@ -1,16 +1,16 @@ 'About Obsolescenza Asset', - 'about_depreciations' => 'Puoi settare l\'obsolescenza di un Asset per deprezzarlo in base alle percentuale di Obsolescenza.', - 'asset_depreciations' => 'Obsolescenza Asset', + 'about_asset_depreciations' => 'Riguardo al deprezzamento dei Beni', + 'about_depreciations' => 'Puoi configurare i deprezzamenti dei Beni con criterio lineare costante.', + 'asset_depreciations' => 'Deprezzamento Beni', 'create' => 'Crea un deprezzamento', - 'depreciation_name' => 'Nome Obsolescenza', - 'depreciation_min' => 'Valore Finale Svalutazione', + 'depreciation_name' => 'Nome del deprezzamento', + 'depreciation_min' => 'Valore Finale del deprezzamento', 'number_of_months' => 'Numero di Mesi', - 'update' => 'Aggiorna l\'ammortamento', - 'depreciation_min' => 'Valore minimo dopo ammortamento', + 'update' => 'Aggiorna il deprezzamento', + 'depreciation_min' => 'Valore minimo dopo il deprezzamento', 'no_depreciations_warning' => 'Attenzione: - Nessuna svalutazione impostata. - Si prega di impostare almeno una Svalutazione per visualizzarne il report.', + Nessun deprezzamento impostato. + Si prega di impostare almeno un deprezzamento per visualizzarne il report.', ]; diff --git a/resources/lang/it-IT/admin/depreciations/message.php b/resources/lang/it-IT/admin/depreciations/message.php index 0a1a770f49..9fcaaf69b8 100644 --- a/resources/lang/it-IT/admin/depreciations/message.php +++ b/resources/lang/it-IT/admin/depreciations/message.php @@ -2,24 +2,24 @@ return array( - 'does_not_exist' => 'La classe di Obsolescenza non esiste.', - 'assoc_users' => 'Il tipo di obsolescenza è associato con una o più modelli e non può essere cancellato. Prima cancella i modelli correlati e poi riprova a cancellarlo.', + 'does_not_exist' => 'La classe di deprezzamento non esiste.', + 'assoc_users' => 'Questo deprezzamento è associato con una o più modelli e non può essere cancellato. Prima toglilo dai modelli correlati e poi riprova a cancellarlo. ', 'create' => array( - 'error' => 'La classe di Obsolescenza non è stata creata, riprova per favore. :(', - 'success' => 'La classe di Obsolescenza è stata creata correttamente. :)' + 'error' => 'La classe di deprezzamento non è stata creata, riprova per favore. :(', + 'success' => 'Il deprezzamento è stato creato correttamente. :)' ), 'update' => array( - 'error' => 'La classe di Obsolescenza non è stata aggiornata, per favore riprova', - 'success' => 'La Classe di obsolescenza è stata aggiornate correttamente.' + 'error' => 'La classe di deprezzamento non è stata aggiornata, per favore riprova', + 'success' => 'La classe di deprezzamento è stata aggiornata correttamente.' ), 'delete' => array( - 'confirm' => 'Sei sicuro di voler cancellare la classe di obsolescenza?', + 'confirm' => 'Sei sicuro di voler cancellare la classe di deprezzamento?', 'error' => 'C\'è stato un problema durante la cancellazione della classe. Per favore riprova.', - 'success' => 'La classe è stata cancellata con successo.' + 'success' => 'La classe di deprezzamento è stata cancellata con successo.' ) ); diff --git a/resources/lang/it-IT/admin/settings/general.php b/resources/lang/it-IT/admin/settings/general.php index 9920b6e539..07051a200b 100644 --- a/resources/lang/it-IT/admin/settings/general.php +++ b/resources/lang/it-IT/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Iscrizione a due fattori', 'two_factor_enabled_text' => 'Abilita due fattori', 'two_factor_reset' => 'Resettare il segreto a due fattori', - 'two_factor_reset_help' => 'Ciò obbligherà l\'utente a registrare nuovamente il proprio dispositivo con Google Authenticator. Ciò può essere utile se il dispositivo correntemente iscritto viene perso o rubato.', + 'two_factor_reset_help' => 'Questo obbligherà l\'utente a registrare nuovamente il proprio dispositivo con l\'app di autenticazione. Questo può essere utile se il loro dispositivo attualmente iscritto viene perso o rubato. ', 'two_factor_reset_success' => 'Il dispositivo a due fattori viene resettato con successo', 'two_factor_reset_error' => 'Il reset del dispositivo a due fattori è fallito', 'two_factor_enabled_warning' => 'L\'abilitazione di due fattori se non è attualmente abilitata vi obbliga immediatamente a autenticare con un dispositivo di accesso a Google Auth. Avrai la possibilità di registrare il tuo dispositivo se uno non è attualmente iscritto.', diff --git a/resources/lang/it-IT/general.php b/resources/lang/it-IT/general.php index c928103152..949030aecc 100644 --- a/resources/lang/it-IT/general.php +++ b/resources/lang/it-IT/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessori', 'activated' => 'Attivato', 'accepted_date' => 'Accettato Il', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Non ci sono asset o modelli di asset richiesti.', + 'countable' => [ + 'accessories' => ':count Accessorio|:count Accessori', + 'assets' => ':count Bene|:count Beni', + 'licenses' => ':count Licenza|:count Licenze', + 'license_seats' => ':count Disponibilità Licenza|:count Disponibilità Licenza', + 'consumables' => ':count Consumabile|:count Consumabili', + 'components' => ':count Componente|:count Componenti', + ] + ]; diff --git a/resources/lang/it-IT/localizations.php b/resources/lang/it-IT/localizations.php index bccff39b89..cc7ff23b16 100644 --- a/resources/lang/it-IT/localizations.php +++ b/resources/lang/it-IT/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbo (Latino)', 'sk-SK'=> 'Slovacco', 'sl-SI'=> 'Sloveno', + 'so-SO'=> 'Somalo', 'es-ES'=> 'Spagnolo', 'es-CO'=> 'Spagnolo (Colombia)', 'es-MX'=> 'Spagnolo (Messico)', diff --git a/resources/lang/it-IT/validation.php b/resources/lang/it-IT/validation.php index e00696e2ad..bfe552ec6c 100644 --- a/resources/lang/it-IT/validation.php +++ b/resources/lang/it-IT/validation.php @@ -16,7 +16,7 @@ return [ 'accepted' => ':attribute deve essere accettato.', 'active_url' => ':attribute non è un URL valido.', 'after' => ':attribute deve essere una data oltre il :date.', - 'after_or_equal' => ':attribute deve essere una data successiva o uguale a :data .', + 'after_or_equal' => ':attribute deve essere una data successiva o uguale a :date .', 'alpha' => ':attribute può contenere solo lettere.', 'alpha_dash' => ':attribute può contenere solo lettere numeri e trattini.', 'alpha_num' => ':attribute può contenere solo lettere e numeri.', @@ -30,7 +30,7 @@ return [ 'array' => ':attribute deve avere tra: min e: max elementi.', ], 'boolean' => ':attribute deve essere o vero o falso.', - 'confirmed' => 'il :attribute non corrisponde.', + 'confirmed' => 'La conferma di :attribute non corrisponde.', 'date' => ':attribute non è una data valida.', 'date_format' => 'il :attribute non corrisponde al :format.', 'different' => ':attribute e :other devono essere differenti.', @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Il valore non può essere negativo' ], + 'checkboxes' => ':attribute contiene opzioni non valide.', + 'radio_buttons' => ':attribute non è valido.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Valore non valido incluso in questo campo', ]; diff --git a/resources/lang/iu-NU/admin/settings/general.php b/resources/lang/iu-NU/admin/settings/general.php index 33cfd7b416..71fb8eb2c6 100644 --- a/resources/lang/iu-NU/admin/settings/general.php +++ b/resources/lang/iu-NU/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/iu-NU/general.php b/resources/lang/iu-NU/general.php index d879ef7db3..9f9a0e08c7 100644 --- a/resources/lang/iu-NU/general.php +++ b/resources/lang/iu-NU/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessories', 'activated' => 'Activated', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/iu-NU/localizations.php b/resources/lang/iu-NU/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/iu-NU/localizations.php +++ b/resources/lang/iu-NU/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/iu-NU/validation.php b/resources/lang/iu-NU/validation.php index 1c6ad8a148..05374e23af 100644 --- a/resources/lang/iu-NU/validation.php +++ b/resources/lang/iu-NU/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/ja-JP/admin/settings/general.php b/resources/lang/ja-JP/admin/settings/general.php index 3615d03235..1633de6d32 100644 --- a/resources/lang/ja-JP/admin/settings/general.php +++ b/resources/lang/ja-JP/admin/settings/general.php @@ -264,7 +264,7 @@ return [ 'two_factor_enrollment' => '二段階認証登録', 'two_factor_enabled_text' => '二段階認証を有効', 'two_factor_reset' => '二段階認証をリセット', - 'two_factor_reset_help' => 'ユーザーはGoogle Authenticatorでデバイスを再度登録する必要があります。これは、現在登録されているデバイスを紛失または盗難した場合に便利です。 ', + 'two_factor_reset_help' => 'これにより、ユーザーは認証アプリでデバイスを再度登録することが強制されます。 これは、現在登録されているデバイスを紛失または盗難された場合に便利です。 ', 'two_factor_reset_success' => '二段階認証は正常にリセットされました。', 'two_factor_reset_error' => '二段階認証のデバイスリセットに失敗しました。', 'two_factor_enabled_warning' => '二段階認証を有効にすると、Google Authenticatorでの認証が強制されます。あなたがお持ちのデバイスを登録することができます。', diff --git a/resources/lang/ja-JP/general.php b/resources/lang/ja-JP/general.php index d7b513c358..33e65f9a1e 100644 --- a/resources/lang/ja-JP/general.php +++ b/resources/lang/ja-JP/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => '付属品', 'activated' => 'アクティベート', 'accepted_date' => '受理日', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => '要求可能な資産または資産モデルはありません。', + 'countable' => [ + 'accessories' => ':count アクセサリー', + 'assets' => ':count アセット', + 'licenses' => ':count ライセンス', + 'license_seats' => ':count個のライセンスシート', + 'consumables' => ':count 消耗品数', + 'components' => ':count コンポーネント', + ] + ]; diff --git a/resources/lang/ja-JP/localizations.php b/resources/lang/ja-JP/localizations.php index 0f3cff3d38..07edf8a503 100644 --- a/resources/lang/ja-JP/localizations.php +++ b/resources/lang/ja-JP/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'スロバキア語', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'ソマリ語', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/ja-JP/validation.php b/resources/lang/ja-JP/validation.php index a86f58a761..98f080b3e2 100644 --- a/resources/lang/ja-JP/validation.php +++ b/resources/lang/ja-JP/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => '負の値にすることはできません' ], + 'checkboxes' => ':attribute に無効なオプションが含まれています。', + 'radio_buttons' => ':attribute は不正です。', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'このフィールドに含まれる値が無効です', ]; diff --git a/resources/lang/km-KH/admin/settings/general.php b/resources/lang/km-KH/admin/settings/general.php index db82420714..3d199fce15 100644 --- a/resources/lang/km-KH/admin/settings/general.php +++ b/resources/lang/km-KH/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/km-KH/general.php b/resources/lang/km-KH/general.php index 6ad4fe6bb5..ce1f27a699 100644 --- a/resources/lang/km-KH/general.php +++ b/resources/lang/km-KH/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'គ្រឿងបន្លាស់', 'activated' => 'បានធ្វើឱ្យសកម្ម', 'accepted_date' => 'កាលបរិច្ឆេទទទួលយក', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/km-KH/localizations.php b/resources/lang/km-KH/localizations.php index bd458e625f..7abb9b3d5e 100644 --- a/resources/lang/km-KH/localizations.php +++ b/resources/lang/km-KH/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'ស៊ែប៊ី (ឡាតាំង)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'ស្លូវេនី', + 'so-SO'=> 'Somali', 'es-ES'=> 'ភាសាអេស្ប៉ាញ', 'es-CO'=> 'អេស្ប៉ាញ កូឡុំប៊ី', 'es-MX'=> 'អេស្ប៉ាញ ម៉ិកស៊ិក', diff --git a/resources/lang/km-KH/validation.php b/resources/lang/km-KH/validation.php index 2f68c0afc1..cd6d9d7e8b 100644 --- a/resources/lang/km-KH/validation.php +++ b/resources/lang/km-KH/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/ko-KR/admin/settings/general.php b/resources/lang/ko-KR/admin/settings/general.php index de7c71fe24..586a2fc99b 100644 --- a/resources/lang/ko-KR/admin/settings/general.php +++ b/resources/lang/ko-KR/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => '2단계 등록', 'two_factor_enabled_text' => '2중 활성화', 'two_factor_reset' => '2중 보안 재설정', - 'two_factor_reset_help' => '이 기능은 강제로 사용자들을 구글 인증을 사용하여 각각의 장치에 다시 등록하게 합니다. 이 기능은 현재 등록한 장치들이 분실이나 도난 당했다면 유용할 것입니다. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => '2중 장치 재설정이 되었습니다', 'two_factor_reset_error' => '2중 장치 재설정이 실패했습니다', 'two_factor_enabled_warning' => '2중 활성화가 현재 활성화되지 않다면 구글 인증으로 등록된 장치를 즉시 강제로 인증하게 할 것입니다. 당신은 하나가 현재 등록되지 않았다면 당신의 장치를 등록할 수 있어야 합니다.', diff --git a/resources/lang/ko-KR/general.php b/resources/lang/ko-KR/general.php index e52cddc0c3..a987a9e881 100644 --- a/resources/lang/ko-KR/general.php +++ b/resources/lang/ko-KR/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => '부속품들', 'activated' => '활성화', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/ko-KR/localizations.php b/resources/lang/ko-KR/localizations.php index b5b079d9ce..863b6890a9 100644 --- a/resources/lang/ko-KR/localizations.php +++ b/resources/lang/ko-KR/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/ko-KR/validation.php b/resources/lang/ko-KR/validation.php index ff1ab0a6f2..edd447f250 100644 --- a/resources/lang/ko-KR/validation.php +++ b/resources/lang/ko-KR/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/lt-LT/admin/settings/general.php b/resources/lang/lt-LT/admin/settings/general.php index 32b0f9f7a1..bd121a145e 100644 --- a/resources/lang/lt-LT/admin/settings/general.php +++ b/resources/lang/lt-LT/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Dviejų veiksnių registracija', 'two_factor_enabled_text' => 'Įgalinti du veiksnius', 'two_factor_reset' => 'Atstatyti dviejų veiksnių paslaptį', - 'two_factor_reset_help' => 'Tai privers naudotoją vėl įrašyti įrenginį "Google" autentifikavimo priemone. Tai gali būti naudinga, jei jų šiuo metu užregistruotas įrenginys yra pamestas ar pavogtas.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Dviejų veiksnių įrenginys sėkmingai iš naujo nustatomas', 'two_factor_reset_error' => 'Dviejų veiksnių įrenginio atstatymas nepavyko', 'two_factor_enabled_warning' => 'Įjungus dviejų faktorių, jei jis šiuo metu neįjungtas, iš karto privers jus patvirtinti autentifikavimu naudojant "Google" prijungtą įrenginį. Jūs turėsite galimybę įregistruoti savo įrenginį, jei jis šiuo metu nėra įtrauktas.', diff --git a/resources/lang/lt-LT/general.php b/resources/lang/lt-LT/general.php index 9bf8907c00..11faab8d2a 100644 --- a/resources/lang/lt-LT/general.php +++ b/resources/lang/lt-LT/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Įrangos', 'activated' => 'Aktyvuota', 'accepted_date' => 'Priėmimo data', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/lt-LT/localizations.php b/resources/lang/lt-LT/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/lt-LT/localizations.php +++ b/resources/lang/lt-LT/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/lt-LT/validation.php b/resources/lang/lt-LT/validation.php index 04ed2b947c..644cea938c 100644 --- a/resources/lang/lt-LT/validation.php +++ b/resources/lang/lt-LT/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/lv-LV/admin/settings/general.php b/resources/lang/lv-LV/admin/settings/general.php index e1f76c7bf5..56d4044e47 100644 --- a/resources/lang/lv-LV/admin/settings/general.php +++ b/resources/lang/lv-LV/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Divu faktoru uzņemšana', 'two_factor_enabled_text' => 'Iespējot divus faktorus', 'two_factor_reset' => 'Atiestatīt divfaktora noslēpumu', - 'two_factor_reset_help' => 'Tas liks lietotājam vēlreiz reģistrēt savu ierīci, izmantojot Google autentifikatoru. Tas var būt noderīgi, ja to pašreizējā reģistrētā ierīce tiek nozaudēta vai nozagta.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Divu faktoru ierīce ir veiksmīgi atiestatīta', 'two_factor_reset_error' => 'Divu faktoru ierīces atiestatīšana neizdevās', 'two_factor_enabled_warning' => 'Iespējojot divu faktoru darbību, ja tas pašlaik nav iespējots, jūs nekavējoties piespiedīs autentificēt ar Google Auth reģistrēto ierīci. Jums būs iespēja ierakstīt savu ierīci, ja tā pašlaik nav reģistrēta.', diff --git a/resources/lang/lv-LV/general.php b/resources/lang/lv-LV/general.php index 4059c9a32d..a59892661a 100644 --- a/resources/lang/lv-LV/general.php +++ b/resources/lang/lv-LV/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Aksesuāri', 'activated' => 'Aktivizēts', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/lv-LV/localizations.php b/resources/lang/lv-LV/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/lv-LV/localizations.php +++ b/resources/lang/lv-LV/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/lv-LV/validation.php b/resources/lang/lv-LV/validation.php index 007fbc3e99..bb08c9734a 100644 --- a/resources/lang/lv-LV/validation.php +++ b/resources/lang/lv-LV/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/mi-NZ/admin/settings/general.php b/resources/lang/mi-NZ/admin/settings/general.php index c50b5e5e74..3f2e091a65 100644 --- a/resources/lang/mi-NZ/admin/settings/general.php +++ b/resources/lang/mi-NZ/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Te whakaurunga e rua', 'two_factor_enabled_text' => 'Whakahohehia te Mea Tuarua', 'two_factor_reset' => 'Tautuhi anō i te Tino Tuarua', - 'two_factor_reset_help' => 'Ma tenei ka akiaki te kaiwhakamahi ki te whakauru i to raatau mahi ki a Google Authenticator. Ka taea e tenei te whai hua ki te ngaro, ki te tahaehia ranei to raanei.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'E rua tautuhinga pūrere e tautuhi ana', 'two_factor_reset_error' => 'I rahua nga tautuhinga tautuhi piti', 'two_factor_enabled_warning' => 'Ka taea e koe te whakauru i nga take e rua ki te kore e taea te mahi i tenei wa ka akiaki koe ki te whakauru ki te kaupapa a Google Auth. Ka taea e koe te whakauru i to raatau ki te kore tetahi e whakauruhia ana.', diff --git a/resources/lang/mi-NZ/general.php b/resources/lang/mi-NZ/general.php index 615b925251..39330f5f33 100644 --- a/resources/lang/mi-NZ/general.php +++ b/resources/lang/mi-NZ/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Tuhinga', 'activated' => 'Kua whakahohe', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/mi-NZ/localizations.php b/resources/lang/mi-NZ/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/mi-NZ/localizations.php +++ b/resources/lang/mi-NZ/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/mi-NZ/validation.php b/resources/lang/mi-NZ/validation.php index 57a1043b86..6aff446fe4 100644 --- a/resources/lang/mi-NZ/validation.php +++ b/resources/lang/mi-NZ/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/mk-MK/admin/settings/general.php b/resources/lang/mk-MK/admin/settings/general.php index 329a213cac..bfae7b8336 100644 --- a/resources/lang/mk-MK/admin/settings/general.php +++ b/resources/lang/mk-MK/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/mk-MK/general.php b/resources/lang/mk-MK/general.php index ca943fd148..bfaabcc1e2 100644 --- a/resources/lang/mk-MK/general.php +++ b/resources/lang/mk-MK/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Додатоци', 'activated' => 'Активиран', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/mk-MK/localizations.php b/resources/lang/mk-MK/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/mk-MK/localizations.php +++ b/resources/lang/mk-MK/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/mk-MK/validation.php b/resources/lang/mk-MK/validation.php index b28274b9b9..457dc73d11 100644 --- a/resources/lang/mk-MK/validation.php +++ b/resources/lang/mk-MK/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/ml-IN/admin/settings/general.php b/resources/lang/ml-IN/admin/settings/general.php index 33cfd7b416..71fb8eb2c6 100644 --- a/resources/lang/ml-IN/admin/settings/general.php +++ b/resources/lang/ml-IN/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/ml-IN/general.php b/resources/lang/ml-IN/general.php index d9b9a91ae9..e9f23a1df8 100644 --- a/resources/lang/ml-IN/general.php +++ b/resources/lang/ml-IN/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessories', 'activated' => 'Activated', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/ml-IN/localizations.php b/resources/lang/ml-IN/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/ml-IN/localizations.php +++ b/resources/lang/ml-IN/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/ml-IN/validation.php b/resources/lang/ml-IN/validation.php index 1c6ad8a148..05374e23af 100644 --- a/resources/lang/ml-IN/validation.php +++ b/resources/lang/ml-IN/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/mn-MN/admin/settings/general.php b/resources/lang/mn-MN/admin/settings/general.php index 86058803e4..b10dfcaebb 100644 --- a/resources/lang/mn-MN/admin/settings/general.php +++ b/resources/lang/mn-MN/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Хоёр хүчин зүйлийн элсэлт', 'two_factor_enabled_text' => 'Хоёр хүчин зүйлийг идэвхжүүлэх', 'two_factor_reset' => 'Хоёр хүчин зүйлийн нууцыг дахин тохируулна уу', - 'two_factor_reset_help' => 'Энэ нь хэрэглэгчийг Google Authenticator-т ​​дахин ашиглах боломжтой болно. Энэ нь одоогоор бүртгэгдсэн төхөөрөмжөө алдсан эсвэл хулгайлсан тохиолдолд ашигтай байж болно.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Хоёр хүчин зүйл төхөөрөмжийг амжилттай дахин тохируулах', 'two_factor_reset_error' => 'Хоёр хүчин зүйлийн төхөөрөмжийн дахин тохируулга амжилтгүй боллоо', 'two_factor_enabled_warning' => 'Хэрэв та одоогоор идэвхжээгүй бол хоёр хүчин зүйлийг идэвхжүүлэх нь таныг Google Auth бүртгэлтэй төхөөрөмжтэй таныг баталгаажуулахыг шаардана. Хэрэв та элсээгүй бол та төхөөрөмжөө бүртгүүлэх боломжтой болно.', diff --git a/resources/lang/mn-MN/general.php b/resources/lang/mn-MN/general.php index 6fed1fad36..475cac16a3 100644 --- a/resources/lang/mn-MN/general.php +++ b/resources/lang/mn-MN/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Дагалдах хэрэгсэл', 'activated' => 'Идэвхжүүлсэн', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/mn-MN/localizations.php b/resources/lang/mn-MN/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/mn-MN/localizations.php +++ b/resources/lang/mn-MN/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/mn-MN/validation.php b/resources/lang/mn-MN/validation.php index 42716de814..70a99c5323 100644 --- a/resources/lang/mn-MN/validation.php +++ b/resources/lang/mn-MN/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/ms-MY/admin/settings/general.php b/resources/lang/ms-MY/admin/settings/general.php index 929d8a3fd7..292cf1771f 100644 --- a/resources/lang/ms-MY/admin/settings/general.php +++ b/resources/lang/ms-MY/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Pendaftaran Dua Faktor', 'two_factor_enabled_text' => 'Dayakan Dua Faktor', 'two_factor_reset' => 'Menetapkan semula Rahsia Dua Faktor', - 'two_factor_reset_help' => 'Ini akan memaksa pengguna untuk mendaftarkan peranti mereka dengan Pengesah Google sekali lagi. Ini berguna jika peranti yang sedang didaftarkan sekarang hilang atau dicuri.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Peranti dua faktor berjaya diset semula', 'two_factor_reset_error' => 'Penetapan peranti dua faktor gagal', 'two_factor_enabled_warning' => 'Mengaktifkan dua faktor sekiranya ia tidak didayakan akan segera memaksa anda untuk mengesahkan dengan peranti Google Auth terdaftar. Anda akan mempunyai keupayaan untuk mendaftarkan peranti anda jika seseorang tidak mendaftar pada masa ini.', diff --git a/resources/lang/ms-MY/general.php b/resources/lang/ms-MY/general.php index eba2cc6510..968af0ce52 100644 --- a/resources/lang/ms-MY/general.php +++ b/resources/lang/ms-MY/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Aksesori', 'activated' => 'Diaktifkan', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/ms-MY/localizations.php b/resources/lang/ms-MY/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/ms-MY/localizations.php +++ b/resources/lang/ms-MY/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/ms-MY/validation.php b/resources/lang/ms-MY/validation.php index 352324ca40..85e8b13b95 100644 --- a/resources/lang/ms-MY/validation.php +++ b/resources/lang/ms-MY/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/nl-NL/admin/settings/general.php b/resources/lang/nl-NL/admin/settings/general.php index 12eca509ef..70fb0b25bb 100644 --- a/resources/lang/nl-NL/admin/settings/general.php +++ b/resources/lang/nl-NL/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Twee factor uitrol', 'two_factor_enabled_text' => 'Twee factor inschakelen', 'two_factor_reset' => 'Twee factor geheim herstellen', - 'two_factor_reset_help' => 'Dit zal de gebruiker dwingen om zijn apparaat opnieuw met Google Authenticator te activeren. Dit kan handig zijn als het huidig geactiveerde apparaat gestolen of verloren is. ', + 'two_factor_reset_help' => 'Dit zal de gebruiker dwingen om zijn apparaat opnieuw met zijn authenticatie-app te activeren. Dit kan handig zijn als hun huidig ingeschreven apparaat verloren of gestolen is. ', 'two_factor_reset_success' => 'Twee factor apparaat succesvol opnieuw ingesteld', 'two_factor_reset_error' => 'Twee factor apparaat opnieuw instellen mislukt', 'two_factor_enabled_warning' => 'Het inschakelen van twee factor authenticatie zal direct vereisen dat je authenticeert met een Google Auth geactiveerd apparaat. Je krijgt de mogelijkheid om een apparaat te activeren als dat nog niet het geval is.', diff --git a/resources/lang/nl-NL/general.php b/resources/lang/nl-NL/general.php index 9c506aa4f9..3a3d50bb47 100644 --- a/resources/lang/nl-NL/general.php +++ b/resources/lang/nl-NL/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessoires', 'activated' => 'Geactiveerd', 'accepted_date' => 'Datum geaccepteerd', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Er zijn geen aanvraagbare activa of modellen voor activa.', + 'countable' => [ + 'accessories' => ':count Accessory~:count accessoires', + 'assets' => ':count Asset×:count Assets', + 'licenses' => ':count licentie|:count licenties', + 'license_seats' => ':count Licentie Zater|:count Licentie zitplaatsen', + 'consumables' => ':count Verbruiksverbruiker|:count Verbruiksartikelen', + 'components' => ':count Component|:count componenten', + ] + ]; diff --git a/resources/lang/nl-NL/localizations.php b/resources/lang/nl-NL/localizations.php index aedabc0f78..0af43adbc1 100644 --- a/resources/lang/nl-NL/localizations.php +++ b/resources/lang/nl-NL/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Servisch (latijns)', 'sk-SK'=> 'Slowaaks', 'sl-SI'=> 'Sloveens', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spaans', 'es-CO'=> 'Spaans (Colombia)', 'es-MX'=> 'Spaans (Mexico)', diff --git a/resources/lang/nl-NL/validation.php b/resources/lang/nl-NL/validation.php index b517049d10..315895bdad 100644 --- a/resources/lang/nl-NL/validation.php +++ b/resources/lang/nl-NL/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Waarde mag niet negatief zijn' ], + 'checkboxes' => ':attribute bevat ongeldige opties.', + 'radio_buttons' => ':attribute is ongeldig.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Ongeldige waarde ingevoerd in dit veld', ]; diff --git a/resources/lang/no-NO/admin/settings/general.php b/resources/lang/no-NO/admin/settings/general.php index 580d9f16c3..0ea8fa630b 100644 --- a/resources/lang/no-NO/admin/settings/general.php +++ b/resources/lang/no-NO/admin/settings/general.php @@ -262,7 +262,7 @@ Linjeskift, topptekst, bilder, osv. kan føre til uventede resultater.', 'two_factor_enrollment' => 'To-faktor registrering', 'two_factor_enabled_text' => 'Aktiver to-faktor autentisering', 'two_factor_reset' => 'Tilbakestill to-faktor hemmelighet', - 'two_factor_reset_help' => 'Tving brukeren til å legge til enheten på nytt i Google Authenticator. Dette er nyttig hvis brukerens enhet er mistet eller stjålet. ', + 'two_factor_reset_help' => 'Dette vil tvinge brukeren til å legge inn enheten på nytt med autentiseringsappen. Dette kan være nyttig hvis enheten deres er mistet eller stjålet. ', 'two_factor_reset_success' => 'To-faktor enhet resatt', 'two_factor_reset_error' => 'Reset av to-faktor enhet feilet', 'two_factor_enabled_warning' => 'Aktivering av to-faktor autentisering hvis ikke allerede aktivert vil øyeblikkelig tvinge deg til å autentisere med enhet som er aktivert i Google Authenticator. Du vil ha mulighet til å aktivere enheten din hvis ingen er aktivert fra før.', diff --git a/resources/lang/no-NO/general.php b/resources/lang/no-NO/general.php index 3f87b879e8..7e6a6adc28 100644 --- a/resources/lang/no-NO/general.php +++ b/resources/lang/no-NO/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Tilbehør', 'activated' => 'Aktivert', 'accepted_date' => 'Akseptdato', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Det finnes ingen forespørselbare eiendeler eller modeller.', + 'countable' => [ + 'accessories' => ':count Tilbehør|:count tilbehør', + 'assets' => ':count Eiendeler|:count', + 'licenses' => ':count Lisens|:count lisenser', + 'license_seats' => ':count lisenssete|:count Lisensseter', + 'consumables' => ':count Forbruksvare|:count Forbruksvarer', + 'components' => ':count Komponenter|:count komponenter', + ] + ]; diff --git a/resources/lang/no-NO/localizations.php b/resources/lang/no-NO/localizations.php index ab85bb6ace..ec2ee04a80 100644 --- a/resources/lang/no-NO/localizations.php +++ b/resources/lang/no-NO/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbisk (Latin)', 'sk-SK'=> 'Slovakisk', 'sl-SI'=> 'Slovensk', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spansk', 'es-CO'=> 'Spansk, Colombia', 'es-MX'=> 'Spansk, Mexico', diff --git a/resources/lang/no-NO/validation.php b/resources/lang/no-NO/validation.php index cb761d587e..19d16ae394 100644 --- a/resources/lang/no-NO/validation.php +++ b/resources/lang/no-NO/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Verdi kan ikke være negativ' ], + 'checkboxes' => ':attribute inneholder ugyldige valg.', + 'radio_buttons' => ':attribute er ugyldig.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Ugyldig verdi inkludert i dette feltet', ]; diff --git a/resources/lang/pl-PL/admin/settings/general.php b/resources/lang/pl-PL/admin/settings/general.php index 4f6633f1c6..bb187b7957 100644 --- a/resources/lang/pl-PL/admin/settings/general.php +++ b/resources/lang/pl-PL/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Rejestracja dwóch czynników', 'two_factor_enabled_text' => 'Włącz uwieżytelnianie dwuskładnikowe', 'two_factor_reset' => 'Zresetować dwuskładnikowy klucz', - 'two_factor_reset_help' => 'Spowoduje to zmuszenie użytkownika do ponownego zapisu swojego urządzenia w usłudze Google Authenticator. Może to być przydatne, jeśli ich aktualnie zapisane urządzenie zostanie utracone lub skradzione.', + 'two_factor_reset_help' => 'Spowoduje to zmuszenie użytkownika do zapisania urządzenia do aplikacji uwierzytelniającej. Może to być użyteczne w przypadku zagubienia lub kradzieży aktualnie zamontowanego urządzenia. ', 'two_factor_reset_success' => 'Dwa urządzenia współczynnikowe z powodzeniem zresetowane', 'two_factor_reset_error' => 'Nie udało się zresetować urządzenia', 'two_factor_enabled_warning' => 'Włączenie dwóch czynników, jeśli nie jest aktualnie włączone, natychmiast zmusi Cię do uwierzytelnienia przy użyciu urządzenia z certyfikatem Google Authentication. Będziesz mieć możliwość zapisania urządzenia, jeśli nie jest on aktualnie zapisany.', diff --git a/resources/lang/pl-PL/general.php b/resources/lang/pl-PL/general.php index 3e553707b9..1286384160 100644 --- a/resources/lang/pl-PL/general.php +++ b/resources/lang/pl-PL/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Akcesoria', 'activated' => 'Aktywowana', 'accepted_date' => 'Data akceptacji', @@ -341,7 +342,7 @@ return [ 'last_checkout' => 'Ostatnie zamówienie', 'due_to_checkin' => 'Następuje:liczba pozycji ma zostać wkrótce sprawdzona:', 'expected_checkin' => 'Przewidywana data zwrotu', - 'reminder_checked_out_items' => 'To jest przypomnienie o aktualnie wydanych Tobie przedmiotach. Jeśli uważasz, że ta lista jest niedokładna (brakuje czegoś lub pojawia się tutaj coś, czego nigdy nie otrzymałeś), prosimy o e-mail :reply_to_name pod adresem: :reply_to_addresse.', + 'reminder_checked_out_items' => 'To jest przypomnienie o aktualnie wydanych Tobie przedmiotach. Jeśli uważasz, że ta lista jest niedokładna (brakuje czegoś lub pojawia się tutaj coś, czego nigdy nie otrzymałeś), prosimy o e-mail :reply_to_name pod adresem: :reply_to_address.', 'changed' => 'Zmieniono', 'to' => 'Do', 'report_fields_info' => '

Wybierz pola, które chcesz uwzględnić w raporcie niestandardowym, i kliknij Generuj. Plik (custom-asset-report-RRRR-mm-dd.csv) zostanie pobrany automatycznie i będzie można go otworzyć w programie Excel.

@@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Brak żądanych aktywów lub modeli aktywów.', + 'countable' => [ + 'accessories' => ':count Akcesoria|:count Akcesoria', + 'assets' => ':count aktywów|:count aktywów', + 'licenses' => ':count licencja|:count licencje', + 'license_seats' => ':count Licencja Siedzenia|:count Licencja', + 'consumables' => ':count Materiał|:count Materiałów|:count Materiałów', + 'components' => ':count Składnik|:count Składniki', + ] + ]; diff --git a/resources/lang/pl-PL/localizations.php b/resources/lang/pl-PL/localizations.php index 409a933e42..148b0dab55 100644 --- a/resources/lang/pl-PL/localizations.php +++ b/resources/lang/pl-PL/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'serbski (łaciński)', 'sk-SK'=> 'Słowacki', 'sl-SI'=> 'słoweński', + 'so-SO'=> 'Somali', 'es-ES'=> 'hiszpański', 'es-CO'=> 'hiszpański, Kolumbia', 'es-MX'=> 'hiszpański, Meksyk', diff --git a/resources/lang/pl-PL/validation.php b/resources/lang/pl-PL/validation.php index 5f2dc24838..5e56b7a07c 100644 --- a/resources/lang/pl-PL/validation.php +++ b/resources/lang/pl-PL/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Wartość nie może być ujemna' ], + 'checkboxes' => ':attribute zawiera nieprawidłowe opcje.', + 'radio_buttons' => ':attribute jest nieprawidłowy.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Nieprawidłowa wartość dołączona do tego pola', ]; diff --git a/resources/lang/pt-BR/admin/settings/general.php b/resources/lang/pt-BR/admin/settings/general.php index 5415aa0f5b..74628c93f5 100644 --- a/resources/lang/pt-BR/admin/settings/general.php +++ b/resources/lang/pt-BR/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Ativação de autenticação em dois passos', 'two_factor_enabled_text' => 'Ativar autenticação em dois passos', 'two_factor_reset' => 'Redefinir senha autenticação de pois passos', - 'two_factor_reset_help' => 'Isto irá forçar o usuário a registar o seu dispositivo com Google Authenticator novamente. Isso pode ser útil se seu dispositivo registrado for perdido ou roubado. ', + 'two_factor_reset_help' => 'Isso forçará o usuário a registar o dispositivo com seu aplicativo de autenticação novamente. Isso pode ser útil se seu dispositivo de matrícula for perdido ou roubado. ', 'two_factor_reset_success' => 'Dispositivo de autenticação de dois passos foi redefinido com sucesso', 'two_factor_reset_error' => 'Reset do dispositivo de autenticação de dois passos falhou', 'two_factor_enabled_warning' => 'Ao ativar a autenticação de dois passos se não estiver já ativado, você será forçado a autenticar com o Google Auth com um dispositivo registrado.', diff --git a/resources/lang/pt-BR/general.php b/resources/lang/pt-BR/general.php index 76657b53a0..5adaf5f753 100644 --- a/resources/lang/pt-BR/general.php +++ b/resources/lang/pt-BR/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Acessórios', 'activated' => 'Ativado', 'accepted_date' => 'Data de Aceite', @@ -520,4 +521,13 @@ Resultados da Sincronização', ], 'no_requestable' => 'Não há ativos solicitáveis ou modelos de ativos.', + 'countable' => [ + 'accessories' => ':count Acessório|:count Acessórios', + 'assets' => ':count Ativo', + 'licenses' => ':count Licenças|:count Licenças', + 'license_seats' => ':count licença assentonamed@@0:count licença de assentos', + 'consumables' => ':count Consumível|:count Consumíveis', + 'components' => ':count Componente|:count Componentes', + ] + ]; diff --git a/resources/lang/pt-BR/localizations.php b/resources/lang/pt-BR/localizations.php index a0eef230c1..af8493c864 100644 --- a/resources/lang/pt-BR/localizations.php +++ b/resources/lang/pt-BR/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Sérvio (Latim)', 'sk-SK'=> 'Eslovaco', 'sl-SI'=> 'Esloveno', + 'so-SO'=> 'Somali', 'es-ES'=> 'Espanhol', 'es-CO'=> 'Espanhol da Colômbia', 'es-MX'=> 'Espanhol do México', diff --git a/resources/lang/pt-BR/validation.php b/resources/lang/pt-BR/validation.php index 83fefaf4ed..c6efdc3dcf 100644 --- a/resources/lang/pt-BR/validation.php +++ b/resources/lang/pt-BR/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Valor não pode ser negativo' ], + 'checkboxes' => ':attribute contém opções inválidas.', + 'radio_buttons' => ':attribute é inválido.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Valor inválido incluído neste campo', ]; diff --git a/resources/lang/pt-PT/admin/settings/general.php b/resources/lang/pt-PT/admin/settings/general.php index b262905c06..ca6bf5badc 100644 --- a/resources/lang/pt-PT/admin/settings/general.php +++ b/resources/lang/pt-PT/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Ativação de autenticação em dois passos', 'two_factor_enabled_text' => 'Ativar autenticação em dois passos', 'two_factor_reset' => 'Redefinir password autenticação de pois passos', - 'two_factor_reset_help' => 'Isto irá forçar o usuário a registar o seu dispositivo com Google Authenticator novamente. Isso pode ser útil se seu dispositivo actualmente registado for perdido ou roubado. ', + 'two_factor_reset_help' => 'Isso forçará o usuário a registar o dispositivo com seu aplicativo de autenticação novamente. Isso pode ser útil se seu dispositivo de matrícula for perdido ou roubado. ', 'two_factor_reset_success' => 'Dispositivo de autenticação de dois passos foi redefinido com sucesso', 'two_factor_reset_error' => 'Reset do dispositivo de autenticação de dois passos falhou', 'two_factor_enabled_warning' => 'Ao activar a autenticação de dois passos se não estiver já ativado, irá forçar-te a autenticar com o Google Auth com um dispositivo registado.', diff --git a/resources/lang/pt-PT/general.php b/resources/lang/pt-PT/general.php index 7a2beeed16..263b125ffa 100644 --- a/resources/lang/pt-PT/general.php +++ b/resources/lang/pt-PT/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Acessórios', 'activated' => 'Activado', 'accepted_date' => 'Data da Aceitação', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Não há ativos solicitáveis ou modelos de ativos.', + 'countable' => [ + 'accessories' => ':count Acessório™️count Acessórios', + 'assets' => ':count Ativo', + 'licenses' => ':count Licenças,:count Licenças', + 'license_seats' => ':count licença assentonamed@@0:count licença de assentos', + 'consumables' => ':count Consumível|:count Consumíveis', + 'components' => ':count Componente|:count Componentes', + ] + ]; diff --git a/resources/lang/pt-PT/localizations.php b/resources/lang/pt-PT/localizations.php index ec9b029eca..d220a024f2 100644 --- a/resources/lang/pt-PT/localizations.php +++ b/resources/lang/pt-PT/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Sérvio (Latino)', 'sk-SK'=> 'Eslovaco', 'sl-SI'=> 'Esloveno', + 'so-SO'=> 'Somali', 'es-ES'=> 'Espanhol', 'es-CO'=> 'Espanhol, Colômbia', 'es-MX'=> 'Espanhol, México', diff --git a/resources/lang/pt-PT/validation.php b/resources/lang/pt-PT/validation.php index af591d7591..9fa8ba649d 100644 --- a/resources/lang/pt-PT/validation.php +++ b/resources/lang/pt-PT/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Valor não pode ser negativo' ], + 'checkboxes' => ':attribute contém opções inválidas.', + 'radio_buttons' => ':attribute é inválido.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Valor inválido incluído neste campo', ]; diff --git a/resources/lang/ro-RO/admin/settings/general.php b/resources/lang/ro-RO/admin/settings/general.php index 6e6b5c5e73..30be36da72 100644 --- a/resources/lang/ro-RO/admin/settings/general.php +++ b/resources/lang/ro-RO/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Înscrierea în doi factori', 'two_factor_enabled_text' => 'Activați doi factori', 'two_factor_reset' => 'Resetați secretul cu două factori', - 'two_factor_reset_help' => 'Acest lucru va obliga utilizatorul să-și înregistreze din nou dispozitivul cu Google Authenticator. Acest lucru poate fi util dacă dispozitivul înmatriculat în prezent este pierdut sau furat.', + 'two_factor_reset_help' => 'Acest lucru va forța utilizatorul să înregistreze din nou dispozitivul cu aplicația de autentificare. Acest lucru poate fi util dacă dispozitivul înscris în prezent este pierdut sau furat. ', 'two_factor_reset_success' => 'Aparatul cu două factori se resetează', 'two_factor_reset_error' => 'Restabilirea dispozitivului cu două factori a eșuat', 'two_factor_enabled_warning' => 'Dacă activați două factori dacă nu este activat în prezent, vă forțați imediat să vă autentificați cu un dispozitiv Google Auth înscris. Veți avea capacitatea de a vă înregistra dispozitivul dacă nu sunteți înscris în prezent.', diff --git a/resources/lang/ro-RO/general.php b/resources/lang/ro-RO/general.php index c89444ed3f..f9ac7dddd1 100644 --- a/resources/lang/ro-RO/general.php +++ b/resources/lang/ro-RO/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accesorii', 'activated' => 'activat', 'accepted_date' => 'Data acceptării', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Nu există active sau modele de active solicitate.', + 'countable' => [ + 'accessories' => ':count Accesorii:count Accesorii', + 'assets' => ':count Active|:count Active', + 'licenses' => ':count Licență:count Licențe', + 'license_seats' => ':count Locul de licență:count Locuri de licență', + 'consumables' => ':count Consumabile|:count Consumabile', + 'components' => ':count Component|:count Componente', + ] + ]; diff --git a/resources/lang/ro-RO/localizations.php b/resources/lang/ro-RO/localizations.php index 680c6b2f0c..58600c3548 100644 --- a/resources/lang/ro-RO/localizations.php +++ b/resources/lang/ro-RO/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovacă', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spaniolă', 'es-CO'=> 'Spaniolă, Columbia', 'es-MX'=> 'Spaniolă, Mexic', diff --git a/resources/lang/ro-RO/validation.php b/resources/lang/ro-RO/validation.php index 4b3fcfcfef..991ed6db96 100644 --- a/resources/lang/ro-RO/validation.php +++ b/resources/lang/ro-RO/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Valoarea nu poate fi negativă' ], + 'checkboxes' => ':attribute conține opțiuni invalide.', + 'radio_buttons' => ':attribute nu este valid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Valoare nevalidă inclusă în acest câmp', ]; diff --git a/resources/lang/ru-RU/admin/settings/general.php b/resources/lang/ru-RU/admin/settings/general.php index 579df410ef..a50b4ef61b 100644 --- a/resources/lang/ru-RU/admin/settings/general.php +++ b/resources/lang/ru-RU/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Двухфакторная регистрация', 'two_factor_enabled_text' => 'Включить двухфакторную аутентификацию', 'two_factor_reset' => 'Сбросить двухфакторный секрет', - 'two_factor_reset_help' => 'Это заставит пользователя снова регистрировать свое устройство с помощью Google Authenticator. Это может быть полезно, если их зарегистрированное устройство потеряно или украдено. ', + 'two_factor_reset_help' => 'Это заставит пользователя снова зарегистрировать свое устройство на устройство-аутентификатор. Это может быть полезно, если зачисленное в данный момент устройство потеряно или украдено. ', 'two_factor_reset_success' => 'Двухфакторное устройство успешно сброшено', 'two_factor_reset_error' => 'Ошибка сброса двухфакторного устройства', 'two_factor_enabled_warning' => 'Если включить двухфакторный режим (если он в данный момент не включен) вы сразу же будете вынуждены проходить аутентификацию на устройстве, зарегистрированном в Google Auth. У вас будет возможность зарегистрировать свое устройство, если оно не зарегистрировано.', diff --git a/resources/lang/ru-RU/general.php b/resources/lang/ru-RU/general.php index 28ec519a17..c442328f28 100644 --- a/resources/lang/ru-RU/general.php +++ b/resources/lang/ru-RU/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Аксессуары', 'activated' => 'Активно', 'accepted_date' => 'Дата принятия', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Нет требуемых активов или моделей активов.', + 'countable' => [ + 'accessories' => ':count Аксессуары|:count Аксессуаров', + 'assets' => ':count Актива|:count Активов', + 'licenses' => ':count лицензия|:count лицензий', + 'license_seats' => ':count лицензия на место|:count мест', + 'consumables' => ':count расходный материал|:count расходников', + 'components' => ':count компонент|:count компонентов', + ] + ]; diff --git a/resources/lang/ru-RU/localizations.php b/resources/lang/ru-RU/localizations.php index 4daa13a574..38dce0ea74 100644 --- a/resources/lang/ru-RU/localizations.php +++ b/resources/lang/ru-RU/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Сербский (Латиница)', 'sk-SK'=> 'Словацкий', 'sl-SI'=> 'Словенский', + 'so-SO'=> 'Somali', 'es-ES'=> 'Испанский', 'es-CO'=> 'Испанский (Колумбия)', 'es-MX'=> 'Испанский (Мексика)', diff --git a/resources/lang/ru-RU/validation.php b/resources/lang/ru-RU/validation.php index 564fe00572..ed24e7bbda 100644 --- a/resources/lang/ru-RU/validation.php +++ b/resources/lang/ru-RU/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Значение не может быть отрицательным' ], + 'checkboxes' => ':attribute содержит недопустимые параметры.', + 'radio_buttons' => ':attribute не верно.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Недопустимое значение в этом поле', ]; diff --git a/resources/lang/si-LK/admin/settings/general.php b/resources/lang/si-LK/admin/settings/general.php index 33cfd7b416..71fb8eb2c6 100644 --- a/resources/lang/si-LK/admin/settings/general.php +++ b/resources/lang/si-LK/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/si-LK/general.php b/resources/lang/si-LK/general.php index 7a7a33ac71..cfdbeaeffd 100644 --- a/resources/lang/si-LK/general.php +++ b/resources/lang/si-LK/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessories', 'activated' => 'Activated', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/si-LK/localizations.php b/resources/lang/si-LK/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/si-LK/localizations.php +++ b/resources/lang/si-LK/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/si-LK/validation.php b/resources/lang/si-LK/validation.php index 1c6ad8a148..05374e23af 100644 --- a/resources/lang/si-LK/validation.php +++ b/resources/lang/si-LK/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/sk-SK/admin/settings/general.php b/resources/lang/sk-SK/admin/settings/general.php index 73a330d3f1..ad45409cd7 100644 --- a/resources/lang/sk-SK/admin/settings/general.php +++ b/resources/lang/sk-SK/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/sk-SK/general.php b/resources/lang/sk-SK/general.php index 60f81dd1c0..b2ba69a083 100644 --- a/resources/lang/sk-SK/general.php +++ b/resources/lang/sk-SK/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessories', 'activated' => 'Activated', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/sk-SK/localizations.php b/resources/lang/sk-SK/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/sk-SK/localizations.php +++ b/resources/lang/sk-SK/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/sk-SK/validation.php b/resources/lang/sk-SK/validation.php index 9c3e1ecfd2..a2ef32d5c7 100644 --- a/resources/lang/sk-SK/validation.php +++ b/resources/lang/sk-SK/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => '´Hodnota nemôže byť záporná' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/sl-SI/admin/settings/general.php b/resources/lang/sl-SI/admin/settings/general.php index 97496b69af..4bd6e5b54b 100644 --- a/resources/lang/sl-SI/admin/settings/general.php +++ b/resources/lang/sl-SI/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Dvo-stopni vpis', 'two_factor_enabled_text' => 'Omogoči dvostopenjsko avtentikacijo', 'two_factor_reset' => 'Ponastavi dvo-stopenjsko skrivnost', - 'two_factor_reset_help' => 'To bo prisililo uporabnika, da znova vnese svojo napravo z Google Authenticator. To je lahko uporabno, če je njihova trenutno vpisana naprava izgubljena ali ukradena. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Dvostopenjska naprava je bila uspešno ponastavljena', 'two_factor_reset_error' => 'Ponastavitev dvostopenjskih naprav ni uspela', 'two_factor_enabled_warning' => 'Omogočanje dvostopenjske avtentifikacije, če trenutno ni omogočeno, vas bo takoj prisililo, da se potrdite s storitvijo Google Auth. Imeli boste možnost vpisati svojo napravo, če niste včlanjeni.', diff --git a/resources/lang/sl-SI/general.php b/resources/lang/sl-SI/general.php index e457bdf0d8..cf121c79cb 100644 --- a/resources/lang/sl-SI/general.php +++ b/resources/lang/sl-SI/general.php @@ -1,6 +1,7 @@ 'Ponastavi 2FA', 'accessories' => 'Dodatki', 'activated' => 'Aktiviran', 'accepted_date' => 'Date Accepted', @@ -12,7 +13,7 @@ return [ 'admin' => 'Administrator', 'administrator' => 'Skrbnik', 'add_seats' => 'Dodani sedeži', - 'age' => "Age", + 'age' => "Starost", 'all_assets' => 'Vsa sredstva', 'all' => 'Vse', 'archived' => 'Arhivirano', @@ -22,7 +23,7 @@ return [ 'asset_report' => 'Poročilo o sredstvih', 'asset_tag' => 'Oznaka sredstva', 'asset_tags' => 'Asset Tags', - 'assets_available' => 'Assets available', + 'assets_available' => 'Razpoložljiva sredstva', 'accept_assets' => 'Accept Assets :name', 'accept_assets_menu' => 'Accept Assets', 'audit' => 'Revizija', @@ -31,7 +32,7 @@ return [ 'assets_audited' => 'assets audited', 'assets_checked_in_count' => 'assets checked in', 'assets_checked_out_count' => 'assets checked out', - 'asset_deleted_warning' => 'This asset has been deleted. You must restore it before you can assign it to someone.', + 'asset_deleted_warning' => 'To sredstvo je bilo izbrisano. Pred ponovno uporabo ga morate obnoviti.', 'assigned_date' => 'Date Assigned', 'assigned_to' => 'Assigned to :name', 'assignee' => 'Assigned to', @@ -113,7 +114,7 @@ return [ 'email_format' => 'Format e-pošte', 'employee_number' => 'Employee Number', 'email_domain_help' => 'To se uporablja za ustvarjanje e-poštnih naslovov pri uvozu', - 'error' => 'Error', + 'error' => 'Napaka', 'exclude_archived' => 'Exclude Archived Assets', 'exclude_deleted' => 'Exclude Deleted Assets', 'example' => 'Example: ', @@ -520,4 +521,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/sl-SI/localizations.php b/resources/lang/sl-SI/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/sl-SI/localizations.php +++ b/resources/lang/sl-SI/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/sl-SI/validation.php b/resources/lang/sl-SI/validation.php index ace8a00d99..5e4dd5b226 100644 --- a/resources/lang/sl-SI/validation.php +++ b/resources/lang/sl-SI/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/so-SO/admin/hardware/form.php b/resources/lang/so-SO/admin/hardware/form.php index e5709849b0..08ccaa5e5b 100644 --- a/resources/lang/so-SO/admin/hardware/form.php +++ b/resources/lang/so-SO/admin/hardware/form.php @@ -23,7 +23,7 @@ return [ 'depreciation' => 'Qiimo dhaca', 'depreciates_on' => 'Qiimo dhaca On', 'default_location' => 'Goobta ugu talagalka ah', - 'default_location_phone' => 'Default Location Phone', + 'default_location_phone' => 'Taleefanka Goobta ugu tala galay', 'eol_date' => 'Taariikhda EOL', 'eol_rate' => 'Heerka EOL', 'expected_checkin' => 'Taariikhda la filayo', diff --git a/resources/lang/so-SO/admin/hardware/general.php b/resources/lang/so-SO/admin/hardware/general.php index 5b192466e7..33f0604077 100644 --- a/resources/lang/so-SO/admin/hardware/general.php +++ b/resources/lang/so-SO/admin/hardware/general.php @@ -27,13 +27,12 @@ return [ 'undeployable_tooltip' => 'Hantidani waxay leedahay calaamad xaaladeed oo aan la hawlgelin oo aan la hubin karin wakhtigan.', 'view' => 'Daawo Hantida', 'csv_error' => 'Khalad baad ku leedahay faylkaaga CSV:', - 'import_text' => '

Upload a CSV that contains asset history. The assets and users MUST already exist in the system, or they will be skipped. Matching assets for history import happens against the asset tag. We will try to find a matching user based on the user\'s name you provide, and the criteria you select below. If you do not select any criteria below, it will simply try to match on the username format you configured in the Admin > General Settings.

Fields included in the CSV must match the headers: Asset Tag, Name, Checkout Date, Checkin Date. Any additional fields will be ignored.

Checkin Date: blank or future checkin dates will checkout items to associated user. Excluding the Checkin Date column will create a checkin date with todays date.

- ', - 'csv_import_match_f-l' => 'Try to match users by firstname.lastname (jane.smith) format', - 'csv_import_match_initial_last' => 'Try to match users by first initial last name (jsmith) format', - 'csv_import_match_first' => 'Try to match users by first name (jane) format', - 'csv_import_match_email' => 'Try to match users by email as username', - 'csv_import_match_username' => 'Try to match users by username', + 'import_text' => 'Soo rar CSV oo ka kooban taariikhda hantida Hantida iyo isticmaalayaashu waa inay hore ugu jiraan nidaamka, ama waa laga boodi doonaa. Hantida ku habboon soo dejinta taariikhda waxay ku dhacdaa calaamadda hantida Waxaan isku dayi doonaa inaan helno isticmaale u dhigma iyadoo lagu salaynayo magaca isticmaalaha aad bixisay, iyo shuruudaha aad hoos ku doorato. Haddii aadan hoos dooran wax shuruud ah, waxay si fudud isku dayi doontaa inay ku habboonaato qaabka isticmaale ee aad ku habaysay Admin > Goobaha Guud

Meelaha ku jira CSV-ga waa in ay iswaafaqaan madaxyada: Hanti Tag, Magaca, Taariikhda hubinta, Taariikhda hubinta. Goob kasta oo dheeri ah waa la iska indhatiraa

Taariikhda jeegeynta: taariikhaha jeegeynta banaan ama mustaqbalka waxay hubin doontaa alaabta isticmaalaha. Marka laga reebo tiirka Taariikhda Jeegaynta waxay abuuri doontaa taariikh hubin leh taariikhda maanta.

', + 'csv_import_match_f-l' => 'Isku day inaad isticmaalayaasha ku wajahdo qaabkafirstname.name(jane.smith)', + 'csv_import_match_initial_last' => 'Isku day inaad isticmaalayaasha ku wajahdo qaabkafirstname. name(jane. smith)', + 'csv_import_match_first' => 'Isku day inaad isticmaalayaasha ku wajahdo qaabka firstname. name(jane. smith) format', + 'csv_import_match_email' => 'Isku day inaad isticmaalayaasha ku waafajisoemail sidii isticmaale ahaan', + 'csv_import_match_username' => 'Isku day inaad isticmaalayaasha ku waafajisousername', 'error_messages' => 'Fariimaha khaldan:', 'success_messages' => 'Farriimaha guusha:', 'alert_details' => 'Fadlan hoos ka eeg faahfaahinta.', diff --git a/resources/lang/so-SO/admin/hardware/message.php b/resources/lang/so-SO/admin/hardware/message.php index b27e517127..bc9da76b30 100644 --- a/resources/lang/so-SO/admin/hardware/message.php +++ b/resources/lang/so-SO/admin/hardware/message.php @@ -2,8 +2,8 @@ return [ - 'undeployable' => 'Warning: This asset has been marked as currently undeployable. - If this status has changed, please update the asset status.', + 'undeployable' => 'Digniin: Hantidan waxaa loo calaamadeeyay mid aan hadda la daabul karin. + Haddii heerkan uu isbedelay, fadlan cusboonaysii heerka hantida.', 'does_not_exist' => 'Hantidu ma jirto.', 'does_not_exist_or_not_requestable' => 'Hantidaas ma jirto ama lama codsan karo.', 'assoc_users' => 'Hantidan hadda waa la hubiyay isticmaale lamana tirtiri karo Fadlan marka hore hubi hantida, ka dibna isku day mar kale in aad tirtirto. ', @@ -11,7 +11,7 @@ return [ 'create' => [ 'error' => 'Hantida lama abuurin, fadlan isku day mar kale. :(', 'success' => 'Hantida loo sameeyay si guul leh :)', - 'success_linked' => 'Asset with tag :tag was created successfully.
Click here to view.', + 'success_linked' => 'Hanti leh sumad :tag si guul leh ayaa loo abuuray. Riix halkan si aad u aragto.', ], 'update' => [ @@ -19,7 +19,7 @@ return [ 'success' => 'Hantida si guul leh ayaa loo cusboonaysiiyay.', 'nothing_updated' => 'Goobo lama dooran, markaa waxba lama cusboonaysiin.', 'no_assets_selected' => 'Wax hanti ah lama dooran, markaa waxba lama cusboonaysiin.', - 'assets_do_not_exist_or_are_invalid' => 'Selected assets cannot be updated.', + 'assets_do_not_exist_or_are_invalid' => 'Hantida la xushay lama cusboonaysiin karo.', ], 'restore' => [ diff --git a/resources/lang/so-SO/admin/models/message.php b/resources/lang/so-SO/admin/models/message.php index c05082bea4..ea835549f8 100644 --- a/resources/lang/so-SO/admin/models/message.php +++ b/resources/lang/so-SO/admin/models/message.php @@ -34,7 +34,7 @@ return array( 'bulkedit' => array( 'error' => 'Wax beero ah lama beddelin, markaa waxba lama cusboonaysiin.', 'success' => 'Qaabka si guul leh ayaa loo cusboonaysiiyay |:model_count moodooyinka si guul leh ayaa loo cusboonaysiiyay.', - 'warn' => 'You are about to update the properties of the following model:|You are about to edit the properties of the following :model_count models:', + 'warn' => 'Waxaad ku dhowdahay inaad cusboonaysiiso sifooyinka qaabkan soo socda:|Waxaad ku dhowdahay inaad wax ka beddesho sifooyinka soo socda: model_count models:', ), diff --git a/resources/lang/so-SO/admin/settings/general.php b/resources/lang/so-SO/admin/settings/general.php index de2b5bf764..e8c1f9f781 100644 --- a/resources/lang/so-SO/admin/settings/general.php +++ b/resources/lang/so-SO/admin/settings/general.php @@ -14,31 +14,31 @@ return [ 'alerts' => 'Digniin', 'alert_title' => 'Cusbooneysii Dejinta Ogeysiinta', 'alert_email' => 'U dir digniinaha', - 'alert_email_help' => 'Email addresses or distribution lists you want alerts to be sent to, comma separated', + 'alert_email_help' => 'Cinwaannada iimaylka ama liisaska qaybinta ee aad rabto in digniinaha loo diro, kala miirad', 'alerts_enabled' => 'Ogeysiinta iimaylka waa la dajiyay', 'alert_interval' => 'Heerka Ogeysiinta Dhacaya (maalmo gudahood)', 'alert_inv_threshold' => 'Xaddiga Digniinaha Alaabta', - 'allow_user_skin' => 'Allow User Skin', - 'allow_user_skin_help_text' => 'Checking this box will allow a user to override the UI skin with a different one.', + 'allow_user_skin' => 'U Oggolow Maqaarka Isticmaalaha', + 'allow_user_skin_help_text' => 'Saxitaanka santuuqan waxay u oggolaan doontaa isticmaaluhu inuu maqaarka UI ku dhaafo mid ka duwan.', 'asset_ids' => 'Aqoonsiga hantida', 'audit_interval' => 'Dhexdhexaadinta Hanti-dhawrka', - 'audit_interval_help' => 'If you are required to regularly physically audit your assets, enter the interval in months that you use. If you update this value, all of the "next audit dates" for assets with an upcoming audit date will be updated.', + 'audit_interval_help' => 'Haddii lagaa rabo inaad si joogto ah u xisaabiso hantidaada, geli inta u dhaxaysa bilaha aad isticmaasho. Haddii aad cusboonaysiiso qiimahan, dhammaan "taariikhda hantidhawrka soo socda" ee hantida leh taariikhda hantidhawrka ee soo socota waa la cusboonaysiin doonaa.', 'audit_warning_days' => 'Heerka Digniinta Hanti-dhawrka', 'audit_warning_days_help' => 'Immisa maalmood ka hor ayaan kaaga digaynaa marka hantida hanti dhawrku ku beegan tahay?', - 'auto_increment_assets' => 'Generate auto-incrementing asset tags', + 'auto_increment_assets' => 'Samee calaamadaynta hantida oo si toos ah u kordhisa', 'auto_increment_prefix' => 'Horgale (ikhtiyaar)', - 'auto_incrementing_help' => 'Enable auto-incrementing asset tags first to set this', + 'auto_incrementing_help' => 'Daree kor u qaadista otomaatigga ah ee sumadaha hantida marka hore si tan loo dejiyo', 'backups' => 'Kaabta', 'backups_help' => 'Abuur, soo deji, oo soo celi kaydinta ', - 'backups_restoring' => 'Restoring from Backup', + 'backups_restoring' => 'Ka soo celinta kaabta', 'backups_upload' => 'Soo rar kaabta', - 'backups_path' => 'Backups on the server are stored in :path', - 'backups_restore_warning' => 'Use the restore button to restore from a previous backup. (This does not currently work with S3 file storage or Docker.)

Your entire :app_name database and any uploaded files will be completely replaced by what\'s in the backup file. ', + 'backups_path' => 'Kaydka serfarka waxa lagu kaydiyaa :path', + 'backups_restore_warning' => 'Isticmaal badhanka soo celinta si looga soo celiyo kayd hore.(Tani hadda kuma shaqaynayso kaydinta faylka S3 ama Docker.)

Macluumaadkaaga dhan :app_name iyo wixii faylal ah ee la shubo waxaa gabi ahaanba lagu bedeli doonaawaxa ku jira faylka kaydinta. ', 'backups_logged_out' => 'Dhammaan isticmaalayaasha jira, oo ay ku jiraan adiga, waa laga bixi doonaa marka soo celintaada dhammaato.', - 'backups_large' => 'Very large backups may time out on the restore attempt and may still need to be run via command line. ', + 'backups_large' => 'Kaydka aadka u weyn ayaa laga yaabaa inuu waqti ku qaato isku dayga soo celinta waxaana laga yaabaa inuu weli u baahdo in lagu socodsiiyo khadka taliska. ', 'barcode_settings' => 'Dejinta Barcode', 'confirm_purge' => 'Xaqiiji Nadiifinta', - 'confirm_purge_help' => 'Enter the text "DELETE" in the box below to purge your deleted records. This action cannot be undone and will PERMANENTLY delete all soft-deleted items and users. (You should make a backup first, just to be safe.)', + 'confirm_purge_help' => 'Geli qoraalka "DELETE" sanduuqa hoose si aad u nadiifiso diiwaannadaada tirtiray. Tallaabadan dib looma noqon karo oo waxay si joogto ah u tirtiri doontaa dhammaan walxaha la tirtiray iyo isticmaalayaasha. (Waa inaad marka hore samaysataa kayd, si aad u nabad gasho.)', 'custom_css' => 'CSS gaar ah', 'custom_css_help' => 'Geli wixii caado ah oo CSS ah oo aad jeclaan lahayd inaad isticmaasho. Ha ku darin <style></style> tags', 'custom_forgot_pass_url' => 'Dib u habeynta erayga sirta ah ee URL', @@ -57,8 +57,8 @@ return [ 'email_logo' => 'Email Logo', 'barcode_type' => 'Nooca Barcode 2D', 'alt_barcode_type' => '1D nooca barcode', - 'email_logo_size' => 'Square logos in email look best. ', - 'enabled' => 'Enabled', + 'email_logo_size' => 'Calaamadaha labajibbaaran ee iimaylka ayaa u muuqda kuwa ugu fiican. ', + 'enabled' => 'La dajiyay', 'eula_settings' => 'Dejinta EULA', 'eula_markdown' => 'EULA-dani waxay ogolaataa Github calaamadaynta dhadhanka.', 'favicon' => 'Favicon', @@ -67,7 +67,7 @@ return [ 'footer_text' => 'Qoraal Footer Dheeraad ah ', 'footer_text_help' => 'Qoraalkani waxa uu ka soo bixi doona cagtiisa midig. Isku xirka waa la ogol yahay isticmaalka Github calaamadaynta dhadhanka. Xadhka goosashada, madaxa, sawirada, iwm waxay keeni karaan natiijooyin aan la saadaalin karin.', 'general_settings' => 'Goobaha Guud', - 'general_settings_keywords' => 'company support, signature, acceptance, email format, username format, images, per page, thumbnail, eula, gravatar, tos, dashboard, privacy', + 'general_settings_keywords' => 'taageerada shirkadda, saxeexa, aqbalaadda, qaabka iimaylka, qaabka adeegsadaha, sawirada, bog kasta, thumbnail, eula, gravatar, tos, dashboard, sir', 'general_settings_help' => 'EULA asalka ah iyo qaar kaloo badan', 'generate_backup' => 'Samee kaabta', 'google_workspaces' => 'Goobaha shaqada Google', @@ -77,8 +77,8 @@ return [ 'label_logo_size' => 'Calaamadaha labajibbaaran waxay u muuqdaan kuwa ugu fiican - waxaa lagu muujin doonaa midigta sare ee calaamad kasta oo hanti ah. ', 'laravel' => 'Nooca Laravel', 'ldap' => 'LDAP', - 'ldap_default_group' => 'Default Permissions Group', - 'ldap_default_group_info' => 'Select a group to assign to newly synced users. Remember that a user takes on the permissions of the group they are assigned.', + 'ldap_default_group' => 'Kooxda Ogolaanshaha Hore', + 'ldap_default_group_info' => 'Dooro koox si aad ugu meelayso isticmaalayaasha cusub ee la habeeyey. Xusuusnow in isticmaaluhu uu qaato oggolaanshaha kooxda loo xilsaaray.', 'no_default_group' => 'No Default Group', 'ldap_help' => 'LDAP/Hagaha Firfircoon', 'ldap_client_tls_key' => 'Furaha TLS ee macmiilka LDAP', @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Laba-Arag is-diiwaangelin', 'two_factor_enabled_text' => 'Daar Laba Qodob', 'two_factor_reset' => 'Dib u deji sirta Laba-Arrin', - 'two_factor_reset_help' => 'Tani waxay ku qasbi doontaa isticmaalaha inuu mar labaad ku diwaangeliyo qalabkooda Google Authenticator. Tani waxay noqon kartaa mid faa\'iido leh haddii qalabkooda hadda ka diiwaangashan uu lumo ama la xado. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Laba arrimood ayaa si guul leh dib u dajiyay', 'two_factor_reset_error' => 'Dib u dejintii qalabka laba qodob ayaa guuldarraystay', 'two_factor_enabled_warning' => 'Awood u yeelashada laba arrimood haddii aan hadda la hawlgelin waxay isla markaaba kugu qasbi doontaa inaad ku caddeyso aaladda Google Auth ee diiwaangashan. Waxaad yeelan doontaa awood aad ku diwaangeliso qalabkaaga haddii aanu mid hadda diiwaan gashanayn.', @@ -288,18 +288,18 @@ return [ 'oauth_title' => 'OAuth API Settings', 'oauth' => 'OAuth', 'oauth_help' => 'Oauth Endpoint Settings', - 'asset_tag_title' => 'Update Asset Tag Settings', - 'barcode_title' => 'Update Barcode Settings', + 'asset_tag_title' => 'Cusbooneysii Settings Tag Asset', + 'barcode_title' => 'Cusbooneysii Settings Barcode', 'barcodes' => 'Barcodes', 'barcodes_help_overview' => 'Barcode & Dejinta QR', - 'barcodes_help' => 'This will attempt to delete cached barcodes. This would typically only be used if your barcode settings have changed, or if your Snipe-IT URL has changed. Barcodes will be re-generated when accessed next.', - 'barcodes_spinner' => 'Attempting to delete files...', - 'barcode_delete_cache' => 'Delete Barcode Cache', - 'branding_title' => 'Update Branding Settings', - 'general_title' => 'Update General Settings', - 'mail_test' => 'Send Test', - 'mail_test_help' => 'This will attempt to send a test mail to :replyto.', - 'filter_by_keyword' => 'Filter by setting keyword', + 'barcodes_help' => 'Tani waxay isku dayi doontaa inay tirtirto barcode-yada kaydsan Tani caadi ahaan waxa kaliya oo la isticmaali karaa haddii habaynka koodhkaagu uu isbedelay, ama haddii URL-ka Snipe-IT uu isbedelay. Barcodes dib ayaa loo soo saari doonaa marka xigta la galo.', + 'barcodes_spinner' => 'Isku day inaad tirtirto faylasha...', + 'barcode_delete_cache' => 'Tirtir Barcode Cache', + 'branding_title' => 'Cusbooneysii Settings Barcode', + 'general_title' => 'Cusbooneysii Settings Guud', + 'mail_test' => 'Dir Imtixaan', + 'mail_test_help' => 'Tani waxay isku dayi doontaa inay u dirto boostada tijaabada ah: replyto.', + 'filter_by_keyword' => 'Ku shaandhee adigoo dejinaya erayga muhiimka ah', 'security' => 'Security', 'security_title' => 'Update Security Settings', 'security_keywords' => 'password, passwords, requirements, two factor, two-factor, common passwords, remote login, logout, authentication', diff --git a/resources/lang/so-SO/admin/settings/message.php b/resources/lang/so-SO/admin/settings/message.php index fd00fe02b0..9a30194c80 100644 --- a/resources/lang/so-SO/admin/settings/message.php +++ b/resources/lang/so-SO/admin/settings/message.php @@ -12,7 +12,7 @@ return [ 'generated' => 'Fayl cusub oo gurmad ah ayaa si guul leh loo abuuray', 'file_not_found' => 'Faylkaas kaydka ah ayaa laga waayay seerfarka.', 'restore_warning' => 'Haa, soo celi Waxaan qirayaa in tani ay dib u qori doonto xog kasta oo hadda ku jirta kaydka xogta. Tani waxay sidoo kale ka saari doontaa dhammaan isticmaalayaashaada jira (oo ay ku jirto adiga).', - 'restore_confirm' => 'Are you sure you wish to restore your database from :filename?' + 'restore_confirm' => 'Ma hubtaa inaad rabto inaad ka soo celiso xogtaada: filename?' ], 'purge' => [ 'error' => 'Khalad ayaa dhacay markii la nadiifinayo ', @@ -20,27 +20,27 @@ return [ 'success' => 'Diiwaanada la tirtiray ayaa si guul leh loo nadiifiyay', ], 'mail' => [ - 'sending' => 'Sending Test Email...', + 'sending' => 'Diraya Iimayl tijaabo ah...', 'success' => 'Boostada waa la soo diray!', - 'error' => 'Mail could not be sent.', - 'additional' => 'No additional error message provided. Check your mail settings and your app log.' + 'error' => 'Email lama diri karo.', + 'additional' => 'Ma jiro fariin khalad ah oo dheeri ah oo la bixiyay Hubi dejimahaaga fariimaha iyo logkaaga abka.' ], 'ldap' => [ - 'testing' => 'Testing LDAP Connection, Binding & Query ...', - '500' => '500 Server Error. Please check your server logs for more information.', - 'error' => 'Something went wrong :(', - 'sync_success' => 'A sample of 10 users returned from the LDAP server based on your settings:', - 'testing_authentication' => 'Testing LDAP Authentication...', - 'authentication_success' => 'User authenticated against LDAP successfully!' + 'testing' => 'Tijaabinta Xidhiidhka LDAP, Ku xidhka & Weydiinta...', + '500' => '500 Cilad Server Fadlan hubi diiwaanka server-kaaga wixii macluumaad dheeraad ah.', + 'error' => 'Waxbaa qaldamay :(', + 'sync_success' => 'Muunad 10 isticmaale ah ayaa laga soo celiyay server-ka LDAP iyadoo lagu salaynayo habayntaada:', + 'testing_authentication' => 'Tijaabi aqoonsiga LDAP...', + 'authentication_success' => 'Isticmaaluhu wuxuu ka xaqiijiyay LDAP si guul leh!' ], 'webhook' => [ - 'sending' => 'Sending :app test message...', - 'success' => 'Your :webhook_name Integration works!', - 'success_pt1' => 'Success! Check the ', - 'success_pt2' => ' channel for your test message, and be sure to click SAVE below to store your settings.', - '500' => '500 Server Error.', - 'error' => 'Something went wrong. :app responded with: :error_message', - 'error_redirect' => 'ERROR: 301/302 :endpoint returns a redirect. For security reasons, we don’t follow redirects. Please use the actual endpoint.', - 'error_misc' => 'Something went wrong. :( ', + 'sending' => 'Diraya :app fariinta tijaabada abka...', + 'success' => 'Magacaaga:webhook_name Isdhexgalka wuu shaqeeyaa!', + 'success_pt1' => 'Guul! Hubi ', + 'success_pt2' => ' kanaalka fariinta tijaabada ah, oo hubi inaad gujiso SAVE xagga hoose si aad u kaydiso dejintaada.', + '500' => '500 Cilad Server.', + 'error' => 'Waxbaa qaldamay. :app waxa uu kaga jawaabay: : error_message', + 'error_redirect' => 'CILAD: 301/302 :endpoint Sababo ammaan dartood, ma raacno dib u jiheynta Fadlan isticmaal barta dhamaadka dhabta ah.', + 'error_misc' => 'Waxbaa qaldamay. :( ', ] ]; diff --git a/resources/lang/so-SO/admin/statuslabels/message.php b/resources/lang/so-SO/admin/statuslabels/message.php index 838387be5b..6aad795b56 100644 --- a/resources/lang/so-SO/admin/statuslabels/message.php +++ b/resources/lang/so-SO/admin/statuslabels/message.php @@ -3,7 +3,7 @@ return [ 'does_not_exist' => 'Summada heerka ma jirto.', - 'deleted_label' => 'Deleted Status Label', + 'deleted_label' => 'Summada heerka la tirtiray', 'assoc_assets' => 'Summada heerkan hadda waxa lala xidhiidhiyaa ugu yaraan hal Hanti lamana tirtiri karo. Fadlan cusboonaysii hantidaada si aanay mar dambe tixraacin heerkan oo isku day mar kale. ', 'create' => [ diff --git a/resources/lang/so-SO/admin/users/general.php b/resources/lang/so-SO/admin/users/general.php index a9f93d9a93..fbfa8c249b 100644 --- a/resources/lang/so-SO/admin/users/general.php +++ b/resources/lang/so-SO/admin/users/general.php @@ -35,7 +35,7 @@ return [ 'superadmin_permission_warning' => 'Kaliya superadmins ayaa siin kara isticmaale superadmin gelitaanka.', 'admin_permission_warning' => 'Kaliya isticmaalayaasha leh xuquuqda admins ama ka weyn ayaa siin kara marin u helka isticmaalaha.', 'remove_group_memberships' => 'Ka saar Xubinnimada Kooxda', - 'warning_deletion_information' => 'You are about to checkin ALL items from the :count user(s) listed below. Super admin names are highlighted in red.', + 'warning_deletion_information' => 'Waxaad ku dhowdahay inaad iska hubiso DHAMMAAN walxaha :count isticmaalayaasha hoos ku taxan. Magacyada maamulka sare waxa lagu iftiimiyay casaan.', 'update_user_assets_status' => 'Cusbooneysii dhammaan hantida isticmaalayaashan heerkan', 'checkin_user_properties' => 'Hubi dhammaan guryaha la xidhiidha isticmaalayaashan', 'remote_label' => 'Kani waa isticmaale fog', diff --git a/resources/lang/so-SO/admin/users/message.php b/resources/lang/so-SO/admin/users/message.php index 77eab08e6b..97c6d3a507 100644 --- a/resources/lang/so-SO/admin/users/message.php +++ b/resources/lang/so-SO/admin/users/message.php @@ -42,10 +42,10 @@ return array( 'asset_already_accepted' => 'Hantidan mar hore waa la aqbalay.', 'accept_or_decline' => 'Waa inaad aqbashaa ama diiddaa hantidan.', 'incorrect_user_accepted' => 'Hantida aad isku dayday inaad aqbasho adiga laguma hubin.', - 'ldap_could_not_connect' => 'Could not connect to the LDAP server. Please check your LDAP server configuration in the LDAP config file.
Error from LDAP Server:', - 'ldap_could_not_bind' => 'Could not bind to the LDAP server. Please check your LDAP server configuration in the LDAP config file.
Error from LDAP Server: ', - 'ldap_could_not_search' => 'Could not search the LDAP server. Please check your LDAP server configuration in the LDAP config file.
Error from LDAP Server:', - 'ldap_could_not_get_entries' => 'Could not get entries from the LDAP server. Please check your LDAP server configuration in the LDAP config file.
Error from LDAP Server:', + 'ldap_could_not_connect' => 'Waa lagu xidhi kari waayay serfarka LDAP Fadlan ka hubi server-kaaga LDAP ee ku jira faylka habaynta LDAP. Khalad ka yimid Server LDAP:', + 'ldap_could_not_bind' => 'Laguma xidhi karo serfarka LDAP Fadlan ka hubi server-kaaga LDAP ee ku jira faylka habaynta LDAP.
Khalad ka yimid Server LDAP: ', + 'ldap_could_not_search' => 'Ma baadhi karin server-ka LDAP Fadlan ka hubi server-kaaga LDAP ee ku jira faylka habaynta LDAP.
Khalad ka yimid Server LDAP:', + 'ldap_could_not_get_entries' => 'Waa lagu xidhi kari waayay serfarka LDAP Fadlan ka hubi server-kaaga LDAP ee ku jira faylka habaynta LDAP. Khalad ka yimid Server LDAP:', 'password_ldap' => 'Furaha koontada waxaa maamula LDAP/Hagaha Firfircoon. Fadlan la xidhiidh waaxda IT-ga si aad u bedesho eraygaaga sirta ah. ', ), diff --git a/resources/lang/so-SO/admin/users/table.php b/resources/lang/so-SO/admin/users/table.php index 94c49b0cba..8ede4e2563 100644 --- a/resources/lang/so-SO/admin/users/table.php +++ b/resources/lang/so-SO/admin/users/table.php @@ -2,7 +2,7 @@ return array( 'activated' => 'Firfircoon', - 'allow' => 'Allow', + 'allow' => 'Oggolow', 'checkedout' => 'Hantida', 'created_at' => 'Abuuray', 'createuser' => 'Abuur isticmaale', @@ -21,7 +21,7 @@ return array( 'manager' => 'Maareeyaha', 'managed_locations' => 'Goobaha la maamulay', 'name' => 'Magaca', - 'nogroup' => 'No groups have been created yet. To add one, visit: ', + 'nogroup' => 'Weli kooxo lama abuurin Si aad mid ugu darto, booqo: ', 'notes' => 'Xusuusin', 'password_confirm' => 'Xaqiiji erayga sirta ah', 'password' => 'Password-ka', diff --git a/resources/lang/so-SO/general.php b/resources/lang/so-SO/general.php index 3f14b8414f..121d7c4d01 100644 --- a/resources/lang/so-SO/general.php +++ b/resources/lang/so-SO/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Agabka', 'activated' => 'Hawl galiyay', 'accepted_date' => 'Taariikhda la aqbalay', @@ -518,4 +519,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/so-SO/localizations.php b/resources/lang/so-SO/localizations.php index 28edcb4221..79f6d2a1b3 100644 --- a/resources/lang/so-SO/localizations.php +++ b/resources/lang/so-SO/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Seerbiyaan (Laatiin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Islovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Isbaanish', 'es-CO'=> 'Isbaanish, Kolombiya', 'es-MX'=> 'Isbaanish, Mexico', diff --git a/resources/lang/so-SO/validation.php b/resources/lang/so-SO/validation.php index f2180ae007..aee37fac3d 100644 --- a/resources/lang/so-SO/validation.php +++ b/resources/lang/so-SO/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Qiimuhu ma noqon karo mid xun' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/sr-CS/admin/settings/general.php b/resources/lang/sr-CS/admin/settings/general.php index 271cba7542..ae63dac16f 100644 --- a/resources/lang/sr-CS/admin/settings/general.php +++ b/resources/lang/sr-CS/admin/settings/general.php @@ -261,11 +261,7 @@ return [ 'two_factor_enrollment' => 'Dvofaktorska prijava', 'two_factor_enabled_text' => 'Omoguci dvofaktorsku proveru identiteta', 'two_factor_reset' => 'Resetuj dvofaktorski ključ', - 'two_factor_reset_help' => 'Ovo će primorati korisnika da ponovo registruje svoj uređaj u Google Authenticator. Ovo može biti korisno ako je njihov trenutno registrovan uređaj izgubljen ili ukraden. - - - - ', + 'two_factor_reset_help' => 'Ovo će primorati korisnika da ponovo registruje svoj uređaj u aplikaciji za autentifikaciju. Ovo može biti korisno ako je njihov trenutno registrovan uređaj izgubljen ili ukraden. ', 'two_factor_reset_success' => 'Dvofaktorski uređaj je uspešno resetovan', 'two_factor_reset_error' => 'Resetovanje uređaja sa dva faktora nije uspelo', 'two_factor_enabled_warning' => 'Omogućavanje dvofaktorske autentifikacije, ako trenutno nije omogućeno, odmah će vas primorati da se autentifikujete pomoću uređaja koji je registrovan za Google Auth. Imaćete mogućnost da registrujete svoj uređaj ako trenutno nije prijavljen.', diff --git a/resources/lang/sr-CS/general.php b/resources/lang/sr-CS/general.php index f15c23c390..5e877262c5 100644 --- a/resources/lang/sr-CS/general.php +++ b/resources/lang/sr-CS/general.php @@ -1,6 +1,7 @@ 'Resetovanje 2FA', 'accessories' => 'Dodatna oprema', 'activated' => 'Aktiviran', 'accepted_date' => 'Datum preuzimanja', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Nema imovine ili modela imovine koji se mogu zatražiti.', + 'countable' => [ + 'accessories' => ':count pribor|:count pribora', + 'assets' => ':count imovina|:count imovina', + 'licenses' => ':count licenca|:count licenci', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count potrošni materijal|:count potrošnih materijala', + 'components' => ':count komponenta|:count komponenti', + ] + ]; diff --git a/resources/lang/sr-CS/localizations.php b/resources/lang/sr-CS/localizations.php index 833b4f197f..fdca53b7c7 100644 --- a/resources/lang/sr-CS/localizations.php +++ b/resources/lang/sr-CS/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Srpski (Latinica)', 'sk-SK'=> 'Slovački', 'sl-SI'=> 'Slovenački', + 'so-SO'=> 'Somalski', 'es-ES'=> 'Španski', 'es-CO'=> 'Španski (Kolumbija)', 'es-MX'=> 'Španski (Meksiko)', diff --git a/resources/lang/sr-CS/validation.php b/resources/lang/sr-CS/validation.php index edb19a84e3..eacadee0f2 100644 --- a/resources/lang/sr-CS/validation.php +++ b/resources/lang/sr-CS/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Vrednost ne može biti negativna' ], + 'checkboxes' => ':attribute sadrži neispravne opcije.', + 'radio_buttons' => ':attribute je neispravan.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Neispravna vrednost je sadržana u ovom polju', ]; diff --git a/resources/lang/sv-SE/admin/settings/general.php b/resources/lang/sv-SE/admin/settings/general.php index 987d10a0b1..91074ea407 100644 --- a/resources/lang/sv-SE/admin/settings/general.php +++ b/resources/lang/sv-SE/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Tvåfaktorsregistrering', 'two_factor_enabled_text' => 'Aktivera tvåfaktorsautentisering', 'two_factor_reset' => 'Återställ tvåfaktorshemlighet', - 'two_factor_reset_help' => 'Detta kommer att tvinga användaren att anmäla sin enhet med Google Authenticator igen. Detta kan vara användbart om den för närvarande inskrivna enheten är förlorad eller stulen.', + 'two_factor_reset_help' => 'Detta kommer att tvinga användaren att registrera sin enhet med sin autentiseringsapp igen. Detta kan vara användbart om deras nuvarande inskrivna enhet är förlorad eller stulen. ', 'two_factor_reset_success' => 'Tvåfaktorsenheten har återställts', 'two_factor_reset_error' => 'Återställningen av tvåfelsenhet misslyckades', 'two_factor_enabled_warning' => 'Aktivering av tvåfaktorn om den inte är aktiverad för tillfället tvingar dig omedelbart att verifiera med en Google Auth-registrerad enhet. Du kommer att ha möjlighet att registrera din enhet om du inte är inloggad för närvarande.', diff --git a/resources/lang/sv-SE/general.php b/resources/lang/sv-SE/general.php index 74ba5e08f4..17db23a4a9 100644 --- a/resources/lang/sv-SE/general.php +++ b/resources/lang/sv-SE/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Tillbehör', 'activated' => 'Aktiverad', 'accepted_date' => 'Datum Accepterat', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Det finns inga begärbara tillgångar eller tillgångsmodeller.', + 'countable' => [ + 'accessories' => ':count Tillbehör :count Tillbehör', + 'assets' => ':count Tillgång:count Tillgångar', + 'licenses' => ':count License :count Licenser', + 'license_seats' => ':count License Seat :count License Seats', + 'consumables' => ':count Förbrukningsmedel :count Förbrukningsvaror', + 'components' => ':count Component|:count Komponenter', + ] + ]; diff --git a/resources/lang/sv-SE/localizations.php b/resources/lang/sv-SE/localizations.php index 68256c169c..2dc003fe78 100644 --- a/resources/lang/sv-SE/localizations.php +++ b/resources/lang/sv-SE/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbiska (latinsk)', 'sk-SK'=> 'Slovakiska', 'sl-SI'=> 'Slovenska', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanska', 'es-CO'=> 'Spanska, Colombia', 'es-MX'=> 'Spanska, Mexiko', diff --git a/resources/lang/sv-SE/validation.php b/resources/lang/sv-SE/validation.php index b08001f037..f7ca0a6b41 100644 --- a/resources/lang/sv-SE/validation.php +++ b/resources/lang/sv-SE/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Värdet kan inte vara negativ' ], + 'checkboxes' => ':attribute innehåller ogiltiga alternativ.', + 'radio_buttons' => ':attribute är ogiltigt.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Ogiltigt värde som ingår i detta fält', ]; diff --git a/resources/lang/ta-IN/admin/settings/general.php b/resources/lang/ta-IN/admin/settings/general.php index d0f1ea265b..dfa4f3c121 100644 --- a/resources/lang/ta-IN/admin/settings/general.php +++ b/resources/lang/ta-IN/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'இரண்டு காரணி பதிவு', 'two_factor_enabled_text' => 'இரு காரணி இயக்கு', 'two_factor_reset' => 'இரண்டு காரணி இரகசியத்தை மீட்டமை', - 'two_factor_reset_help' => 'இது மீண்டும் தங்கள் சாதனத்தை Google Authenticator உடன் பதிவு செய்யும்படி கட்டாயப்படுத்தும். அவர்கள் தற்போது பதிவுசெய்யப்பட்ட சாதனம் தொலைந்து அல்லது திருடப்பட்டால் இது பயனுள்ளதாக இருக்கும்.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'இரண்டு காரணி சாதனம் வெற்றிகரமாக மீட்டமைக்கப்பட்டது', 'two_factor_reset_error' => 'இரண்டு காரணி சாதன மீட்டமைப்பு தோல்வியடைந்தது', 'two_factor_enabled_warning' => 'தற்போது இயங்கவில்லையெனில் இரண்டு-காரணி செயல்படுத்துவதால், உடனடியாக Google Auth பதிவுசெய்யப்பட்ட சாதனத்துடன் அங்கீகரிக்கும்படி கட்டாயப்படுத்தும். ஒருவர் தற்போது பதிவுசெய்யப்படவில்லை என்றால், உங்கள் சாதனம் பதிவுசெய்யும் திறனை நீங்கள் பெறுவீர்கள்.', diff --git a/resources/lang/ta-IN/general.php b/resources/lang/ta-IN/general.php index f7257dee56..6a9789dd39 100644 --- a/resources/lang/ta-IN/general.php +++ b/resources/lang/ta-IN/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'கருவிகள்', 'activated' => 'இயக்கப்பட்டது', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/ta-IN/localizations.php b/resources/lang/ta-IN/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/ta-IN/localizations.php +++ b/resources/lang/ta-IN/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/ta-IN/validation.php b/resources/lang/ta-IN/validation.php index e563436a16..714504cbb9 100644 --- a/resources/lang/ta-IN/validation.php +++ b/resources/lang/ta-IN/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/th-TH/admin/settings/general.php b/resources/lang/th-TH/admin/settings/general.php index b8ff49e5c7..aa13dbcb20 100644 --- a/resources/lang/th-TH/admin/settings/general.php +++ b/resources/lang/th-TH/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'การลงทะเบียนสองปัจจัย', 'two_factor_enabled_text' => 'เปิดใช้งาน Two Factor', 'two_factor_reset' => 'รีเซ็ตความลับสองระดับ', - 'two_factor_reset_help' => 'การดำเนินการนี้จะบังคับให้ผู้ใช้ลงทะเบียนอุปกรณ์ด้วย Google Authenticator อีกครั้ง วิธีนี้มีประโยชน์หากอุปกรณ์ที่ลงทะเบียนเรียนในปัจจุบันสูญหายหรือถูกขโมย', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'รีเซ็ตเครื่องอุปกรณ์สองตัวเรียบร้อยแล้ว', 'two_factor_reset_error' => 'การรีเซ็ตอุปกรณ์สององค์ประกอบล้มเหลว', 'two_factor_enabled_warning' => 'การเปิดใช้งานสองปัจจัยหากไม่ได้เปิดใช้อยู่ในขณะนี้จะบังคับให้คุณตรวจสอบสิทธิ์ด้วยอุปกรณ์ที่ลงทะเบียนของ Google Auth คุณจะสามารถลงทะเบียนอุปกรณ์ของคุณหากยังไม่ได้ลงทะเบียนเรียน', diff --git a/resources/lang/th-TH/general.php b/resources/lang/th-TH/general.php index 73ea3bea3b..2423d2a892 100644 --- a/resources/lang/th-TH/general.php +++ b/resources/lang/th-TH/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'อุปกรณ์', 'activated' => 'เปิดใช้งาน', 'accepted_date' => 'ข้อมูลที่ได้รับการยอมรับแล้ว', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/th-TH/localizations.php b/resources/lang/th-TH/localizations.php index 38c061ffcc..37cc2ebdf6 100644 --- a/resources/lang/th-TH/localizations.php +++ b/resources/lang/th-TH/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/th-TH/validation.php b/resources/lang/th-TH/validation.php index fb4e907621..9b7e7c2cf4 100644 --- a/resources/lang/th-TH/validation.php +++ b/resources/lang/th-TH/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/tl-PH/admin/settings/general.php b/resources/lang/tl-PH/admin/settings/general.php index 185dd954e4..9963b5bdb5 100644 --- a/resources/lang/tl-PH/admin/settings/general.php +++ b/resources/lang/tl-PH/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/tl-PH/general.php b/resources/lang/tl-PH/general.php index 0785a22c23..3867bc2e8b 100644 --- a/resources/lang/tl-PH/general.php +++ b/resources/lang/tl-PH/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessories', 'activated' => 'Activated', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/tl-PH/localizations.php b/resources/lang/tl-PH/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/tl-PH/localizations.php +++ b/resources/lang/tl-PH/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/tl-PH/validation.php b/resources/lang/tl-PH/validation.php index 1c6ad8a148..05374e23af 100644 --- a/resources/lang/tl-PH/validation.php +++ b/resources/lang/tl-PH/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/tr-TR/admin/settings/general.php b/resources/lang/tr-TR/admin/settings/general.php index ac84ef2c6e..5546d3e903 100644 --- a/resources/lang/tr-TR/admin/settings/general.php +++ b/resources/lang/tr-TR/admin/settings/general.php @@ -262,7 +262,7 @@ return [ 'two_factor_enrollment' => 'İki Aşamalı Kayıt', 'two_factor_enabled_text' => 'İki Aşamalı Şifrelemeyi Etkinleştir', 'two_factor_reset' => 'Gizli İki Aşamalı Şifrelemeyi Sıfırla', - 'two_factor_reset_help' => 'Bu işlem, kullanıcıyı cihazlarını Google Authenticator ile tekrar kayıt etmeye zorlar. Bu, kayıtlı cihazlarının kaybolması veya çalınması durumunda yararlı olabilir. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'İki aşamalı aygıt başarıyla sıfırlandı', 'two_factor_reset_error' => 'İki aşamalı aygıt sıfırlanamadı', 'two_factor_enabled_warning' => 'Halihazırda etkinleştirilmemişse iki aşamalı şifreleme etkinleştirilmesi sizi bir Google Auth kayıtlı cihazla yetkilendirmenizi zorlar. Şu an kayıtlı değilseniz, cihazınızı kaydetme olanağına sahip olacaksınız.', diff --git a/resources/lang/tr-TR/general.php b/resources/lang/tr-TR/general.php index 3e488d191a..eb36497f8a 100644 --- a/resources/lang/tr-TR/general.php +++ b/resources/lang/tr-TR/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Aksesuarlar', 'activated' => 'Aktif edildi', 'accepted_date' => 'Kabul edilme günü', @@ -522,4 +523,13 @@ Context | Request Context ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/tr-TR/localizations.php b/resources/lang/tr-TR/localizations.php index e41e1f7c9c..3361e826be 100644 --- a/resources/lang/tr-TR/localizations.php +++ b/resources/lang/tr-TR/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Sırpça (Latin)', 'sk-SK'=> 'Slovakça', 'sl-SI'=> 'Slovakça', + 'so-SO'=> 'Somali', 'es-ES'=> 'İspanyolca', 'es-CO'=> 'İspanyolca, Kolombiya', 'es-MX'=> 'İspanyolca, Meksika', diff --git a/resources/lang/tr-TR/validation.php b/resources/lang/tr-TR/validation.php index d8442f6ef2..7f3a648fa0 100644 --- a/resources/lang/tr-TR/validation.php +++ b/resources/lang/tr-TR/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Değer negatif olamaz' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/uk-UA/admin/settings/general.php b/resources/lang/uk-UA/admin/settings/general.php index 0802fa7791..69382851df 100644 --- a/resources/lang/uk-UA/admin/settings/general.php +++ b/resources/lang/uk-UA/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Двофакторна участь', 'two_factor_enabled_text' => 'Увімкнути двофакторну автентифікацію', 'two_factor_reset' => 'Скинути двофакторну аутентифікацію', - 'two_factor_reset_help' => 'Це змусить користувача знову записувати їх пристрій за допомогою Google Authenticator. Це може бути корисно, якщо зараз їх загублено або вкрадено в даний час. ', + 'two_factor_reset_help' => 'Це змусить користувача зареєструвати їх пристрій за допомогою програми авторизації знову. Це може бути корисно, якщо зараз їх загублено або вкрадено в даний час. ', 'two_factor_reset_success' => 'Двофакторний пристрій успішно скинуто', 'two_factor_reset_error' => 'Не вдалося скинути двофакторний пристрій', 'two_factor_enabled_warning' => 'Включення двофакторної аутентифікації, якщо це поки що не ввімкнуто негайно змусить вас автентифікуватися з пристроєм з Google Auth. Ви матимете можливість записувати ваш пристрій, якщо він ще не зареєстрований.', diff --git a/resources/lang/uk-UA/general.php b/resources/lang/uk-UA/general.php index b9a6498a28..2e5443ed8f 100644 --- a/resources/lang/uk-UA/general.php +++ b/resources/lang/uk-UA/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Аксесуари', 'activated' => 'Активоване', 'accepted_date' => 'Дата прийняття', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'Немає запитуваних активів або моделей активів.', + 'countable' => [ + 'accessories' => ':count аксесуара|:count аксесуарів', + 'assets' => ':count есе|:count Активів', + 'licenses' => ':count ліцензія|:count ліцензій', + 'license_seats' => ':count реалізація|:count місця для ліцензії', + 'consumables' => ':count витратно|:count витратних товарів', + 'components' => ':count компонент|:count компонентів', + ] + ]; diff --git a/resources/lang/uk-UA/localizations.php b/resources/lang/uk-UA/localizations.php index 9b8ad497d9..be71c22d9d 100644 --- a/resources/lang/uk-UA/localizations.php +++ b/resources/lang/uk-UA/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Сербська (латиниця)', 'sk-SK'=> 'Словацька', 'sl-SI'=> 'Словенська', + 'so-SO'=> 'Somali', 'es-ES'=> 'Іспанська', 'es-CO'=> 'Іспанська, Колумбія', 'es-MX'=> 'Іспанська, Мексика', diff --git a/resources/lang/uk-UA/validation.php b/resources/lang/uk-UA/validation.php index 2c06f5c7a4..c758303444 100644 --- a/resources/lang/uk-UA/validation.php +++ b/resources/lang/uk-UA/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Значення не може бути від’ємним' ], + 'checkboxes' => ':attribute містить неприпустимі параметри.', + 'radio_buttons' => ':attribute є неприпустимим.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Невірне значення включене в це поле', ]; diff --git a/resources/lang/ur-PK/admin/settings/general.php b/resources/lang/ur-PK/admin/settings/general.php index 33cfd7b416..71fb8eb2c6 100644 --- a/resources/lang/ur-PK/admin/settings/general.php +++ b/resources/lang/ur-PK/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/ur-PK/general.php b/resources/lang/ur-PK/general.php index d879ef7db3..9f9a0e08c7 100644 --- a/resources/lang/ur-PK/general.php +++ b/resources/lang/ur-PK/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessories', 'activated' => 'Activated', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/ur-PK/localizations.php b/resources/lang/ur-PK/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/ur-PK/localizations.php +++ b/resources/lang/ur-PK/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/ur-PK/validation.php b/resources/lang/ur-PK/validation.php index 1c6ad8a148..05374e23af 100644 --- a/resources/lang/ur-PK/validation.php +++ b/resources/lang/ur-PK/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/vi-VN/admin/accessories/message.php b/resources/lang/vi-VN/admin/accessories/message.php index 914a6ffc35..fb50f7feda 100644 --- a/resources/lang/vi-VN/admin/accessories/message.php +++ b/resources/lang/vi-VN/admin/accessories/message.php @@ -3,7 +3,7 @@ return array( 'does_not_exist' => 'Phụ kiện [:id] Không tồn tại.', - 'not_found' => 'That accessory was not found.', + 'not_found' => 'Phụ kiện không được tìm thấy.', 'assoc_users' => 'Phụ kiện này hiện có :count cái đã giao cho người dùng. Bạn hãy nhập lại vào trong phần phụ kiện và thử lại lần nữa. ', 'create' => array( @@ -25,7 +25,7 @@ return array( 'checkout' => array( 'error' => 'Phụ kiện chưa được xuất kho. Bạn hãy thử lại', 'success' => 'Phụ kiện được xuất kho thành công.', - 'unavailable' => 'Accessory is not available for checkout. Check quantity available', + 'unavailable' => 'Không có sẵn phụ kiện để xuất. Hãy kiểm tra số lượng có sẵn', 'user_does_not_exist' => 'Người dùng này không tồn tại. Bạn hãy thử lại.' ), diff --git a/resources/lang/vi-VN/admin/locations/table.php b/resources/lang/vi-VN/admin/locations/table.php index d24c70cd59..b03d71c050 100644 --- a/resources/lang/vi-VN/admin/locations/table.php +++ b/resources/lang/vi-VN/admin/locations/table.php @@ -15,7 +15,7 @@ return [ 'print_all_assigned' => 'In tất cả tài sản đã cấp phát', 'name' => 'Tên địa phương', 'address' => 'Địa chỉ', - 'address2' => 'Address Line 2', + 'address2' => 'Địa chỉ thứ 2', 'zip' => 'Mã bưu điện', 'locations' => 'Địa phương', 'parent' => 'Parent', diff --git a/resources/lang/vi-VN/admin/settings/general.php b/resources/lang/vi-VN/admin/settings/general.php index e7eb82045f..9ffd502828 100644 --- a/resources/lang/vi-VN/admin/settings/general.php +++ b/resources/lang/vi-VN/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Đăng ký Hai nhân tố', 'two_factor_enabled_text' => 'Kích hoạt hai yếu tố', 'two_factor_reset' => 'Đặt lại Hai yếu tố bí mật', - 'two_factor_reset_help' => 'Thao tác này sẽ bắt buộc người dùng đăng ký lại thiết bị của họ bằng Google Authenticator. Điều này có thể hữu ích nếu thiết bị đang học của họ bị mất hoặc bị đánh cắp.', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Thiết lập thành công hai yếu tố', 'two_factor_reset_error' => 'Thiết lập lại thiết bị hai yếu tố không thành công', 'two_factor_enabled_warning' => 'Bật hai yếu tố nếu hiện tại không được bật sẽ buộc bạn phải xác thực ngay lập tức bằng thiết bị được đăng ký Google Auth. Bạn sẽ có khả năng đăng ký thiết bị của bạn nếu một trong số đó hiện không đăng ký.', diff --git a/resources/lang/vi-VN/general.php b/resources/lang/vi-VN/general.php index 2144af9ec7..7bf9301610 100644 --- a/resources/lang/vi-VN/general.php +++ b/resources/lang/vi-VN/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Phụ kiện', 'activated' => 'Kích hoạt', 'accepted_date' => 'Ngày chấp nhận', @@ -72,8 +73,8 @@ return [ 'consumable' => 'Vật tư phụ', 'consumables' => 'Vật tư phụ', 'country' => 'Nước', - 'could_not_restore' => 'Error restoring :item_type: :error', - 'not_deleted' => 'The :item_type is not deleted so it cannot be restored', + 'could_not_restore' => 'Khôi phục lỗi :item_type: :Lỗi', + 'not_deleted' => 'Các :item_type không bị xóa nên không thể khôi phục được', 'create' => 'Tạo mới', 'created' => 'Mục đã tạo', 'created_asset' => 'tài sản đã tạo', @@ -156,7 +157,7 @@ return [ 'image_filetypes_help' => 'Các loại tệp được chấp nhận là jpg, webp, png, gif và svg. Kích thước tải lên tối đa được cho phép là :size.', 'unaccepted_image_type' => 'Tập tin hình ảnh không thể đọc được. Chỉ chấp nhận các kiểu tập tin là jpg, webp, png, gif, và svg.', 'import' => 'Nhập', - 'import_this_file' => 'Map fields and process this file', + 'import_this_file' => 'Các trường bản đồ và quá trình xử lý tệp này', 'importing' => 'Đang nhập', 'importing_help' => 'Bạn có thể nhập nội dung, phụ kiện, giấy phép, linh kiện, vật tư tiêu hao và người dùng qua tệp CSV.

CSV phải được phân cách bằng dấu phẩy và được định dạng với các tiêu đề khớp với các tiêu đề trong CSV trong tài liệu mẫu .', 'import-history' => 'Lịch sử Nhập khẩu', @@ -182,7 +183,7 @@ return [ 'lock_passwords' => 'Giá trị trường này sẽ không được lưu trong cài đặt demo.', 'feature_disabled' => 'Tính năng này đã bị vô hiệu hóa để cài đặt bản demo.', 'location' => 'Địa phương', - 'location_plural' => 'Location|Locations', + 'location_plural' => 'Vị trí|Địa điểm', 'locations' => 'Địa phương', 'logo_size' => 'Logo hình vuông trông đẹp nhất với Logo + ký tự. Kích thước hiển thị tối đa của logo là cao 50px, rộng 500px. ', 'logout' => 'Thoát', @@ -201,7 +202,7 @@ return [ 'new_password' => 'Mật khẩu mới', 'next' => 'Tiếp', 'next_audit_date' => 'Ngày kiểm toán tiếp theo', - 'no_email' => 'No email address associated with this user', + 'no_email' => 'Không có địa chỉ email nào được liên kết với người dùng này', 'last_audit' => 'Kiểm toán Lần cuối', 'new' => 'Mới!', 'no_depreciation' => 'Không khấu hao', @@ -269,7 +270,7 @@ return [ 'state' => 'Tỉnh/Thành phố', 'status_labels' => 'Tình trạng nhãn', 'status' => 'Tình trạng', - 'accept_eula' => 'Acceptance Agreement', + 'accept_eula' => 'Chấp nhận quy định', 'supplier' => 'Nhà cung cấp', 'suppliers' => 'Nhà cung cấp', 'sure_to_delete' => 'Bạn có chắc chắn muốn xoá', @@ -293,7 +294,7 @@ return [ 'user' => 'Người dùng', 'accepted' => 'đã chấp nhận', 'declined' => 'đã từ chối', - 'unassigned' => 'Unassigned', + 'unassigned' => 'Không gán', 'unaccepted_asset_report' => 'Những tài sản không chấp nhận', 'users' => 'Người dùng', 'viewall' => 'Xem tất cả', @@ -305,8 +306,8 @@ return [ 'yes' => 'Yes', 'zip' => 'Zip', 'noimage' => 'Không tìm thấy hình ảnh hoặc hình ảnh nào được tìm thấy.', - 'file_does_not_exist' => 'The requested file does not exist on the server.', - 'file_upload_success' => 'File upload success!', + 'file_does_not_exist' => 'Tệp được yêu cầu không tồn tại trên máy chủ.', + 'file_upload_success' => 'Tải tập tin lên thành công!', 'no_files_uploaded' => 'File upload success!', 'token_expired' => 'Phiên họp mẫu của bạn đã hết hạn. Vui lòng thử lại.', 'login_enabled' => 'Cho phép đăng nhập', @@ -316,52 +317,52 @@ return [ 'i_accept' => 'Tôi đồng ý', 'i_decline' => 'Tôi từ chối', 'accept_decline' => 'Phê duyệt / Từ chối', - 'sign_tos' => 'Sign below to indicate that you agree to the terms of service:', - 'clear_signature' => 'Clear Signature', - 'show_help' => 'Show help', - 'hide_help' => 'Hide help', + 'sign_tos' => 'Ký tên bên dưới để biết rằng bạn đồng ý với các điều khoản dịch vụ:', + 'clear_signature' => 'Xóa chữ ký', + 'show_help' => 'Hiển thị trợ giúp', + 'hide_help' => 'Ẩn trợ giúp', 'view_all' => 'view all', 'hide_deleted' => 'Ẩn đã xóa', 'email' => 'Email', - 'do_not_change' => 'Do Not Change', + 'do_not_change' => 'Không được thay đổi', 'bug_report' => 'Report a Bug', - 'user_manual' => 'User\'s Manual', + 'user_manual' => 'Người dùng mặc định', 'setup_step_1' => 'Bước 1', 'setup_step_2' => 'Bước 2', 'setup_step_3' => 'Bước 3', 'setup_step_4' => 'Bước 4', - 'setup_config_check' => 'Configuration Check', + 'setup_config_check' => 'Kiểm tra cấu hình', 'setup_create_database' => 'Tạo bảng cơ sở dữ liệu', 'setup_create_admin' => 'Tạo tài khoản quản trị', 'setup_done' => 'Hoàn tất!', - 'bulk_edit_about_to' => 'You are about to edit the following: ', + 'bulk_edit_about_to' => 'Bạn đang chuẩn bị chỉnh sửa nội dung sau: ', 'checked_out' => 'Bàn giao', - 'checked_out_to' => 'Checked out to', + 'checked_out_to' => 'Đã ra khỏi khu kiểm tra', 'fields' => 'Fields', 'last_checkout' => 'Last Checkout', - 'due_to_checkin' => 'The following :count items are due to be checked in soon:', + 'due_to_checkin' => 'Sau đây :số lượng mặt hàng sắp được kiểm tra:', 'expected_checkin' => 'Ngày mong muốn Thu hồi', - 'reminder_checked_out_items' => 'This is a reminder of the items currently checked out to you. If you feel this list is inaccurate (something is missing, or something appears here that you believe you never received), please email :reply_to_name at :reply_to_address.', + 'reminder_checked_out_items' => 'Đây là lời nhắc nhở về các mục hiện đang được kiểm tra cho bạn. Nếu bạn cảm thấy danh sách này không chính xác (thiếu nội dung nào đó hoặc nội dung nào đó xuất hiện ở đây mà bạn cho rằng mình chưa bao giờ nhận được), vui lòng gửi email đến :reply_to_name tại :reply_to_address.', 'changed' => 'Đã thay đổi', 'to' => 'To', - 'report_fields_info' => '

Select the fields you would like to include in your custom report, and click Generate. The file (custom-asset-report-YYYY-mm-dd.csv) will download automatically, and you can open it in Excel.

-

If you would like to export only certain assets, use the options below to fine-tune your results.

', + 'report_fields_info' => '

Chọn các trường bạn muốn đưa vào báo cáo tùy chỉnh của mình và nhấp vào Tạo. Tệp (custom-asset-report-YYYY-mm-dd.csv) sẽ tự động tải xuống và bạn có thể mở tệp đó trong Excel.

+

Nếu bạn chỉ muốn xuất một số nội dung nhất định, hãy sử dụng các tùy chọn bên dưới để tinh chỉnh kết quả của mình.

', 'range' => 'Range', - 'bom_remark' => 'Add a BOM (byte-order mark) to this CSV', + 'bom_remark' => 'Thêm BOM (dấu thứ tự byte) vào CSV này', 'improvements' => 'Improvements', 'information' => 'Information', 'permissions' => 'Permissions', - 'managed_ldap' => '(Managed via LDAP)', + 'managed_ldap' => '(Được quản lý qua LDAP)', 'export' => 'Export', - 'ldap_sync' => 'LDAP Sync', - 'ldap_user_sync' => 'LDAP User Sync', - 'synchronize' => 'Synchronize', - 'sync_results' => 'Synchronization Results', - 'license_serial' => 'Serial/Product Key', - 'invalid_category' => 'Invalid or missing category', - 'invalid_item_category_single' => 'Invalid or missing :type category. Please update the category of this :type to include a valid category before checking out.', - 'dashboard_info' => 'This is your dashboard. There are many like it, but this one is yours.', - '60_percent_warning' => '60% Complete (warning)', + 'ldap_sync' => 'Đồng bộ hóa LDAP', + 'ldap_user_sync' => 'Đồng bộ hóa người dùng LDAP', + 'synchronize' => 'Đồng bộ', + 'sync_results' => 'Kết quả đồng bộ hóa', + 'license_serial' => 'Sê-ri/Khóa sản phẩm', + 'invalid_category' => 'Loại tài sản không hợp lệ hoặc bị thiếu', + 'invalid_item_category_single' => 'Danh mục :type không hợp lệ hoặc bị thiếu. Vui lòng cập nhật danh mục :type này để bao gồm danh mục hợp lệ trước khi thanh toán.', + 'dashboard_info' => 'Đây là bảng điều khiển của bạn. Có nhiều cái giống như vậy, nhưng cái này là của bạn.', + '60_percent_warning' => 'Hoàn thành 60% (cảnh báo)', 'dashboard_empty' => 'Có vẻ như bạn chưa thêm bất kỳ điều gì nên chúng tôi không có gì để hiển thị. Hãy bắt đầu bằng cách thêm một số nội dung, phụ kiện, vật tư tiêu hao hoặc giấy phép ngay bây giờ!', 'new_asset' => 'New Asset', 'new_license' => 'New License', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/vi-VN/localizations.php b/resources/lang/vi-VN/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/vi-VN/localizations.php +++ b/resources/lang/vi-VN/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/vi-VN/validation.php b/resources/lang/vi-VN/validation.php index e6dd0b1561..c6f30d7cbf 100644 --- a/resources/lang/vi-VN/validation.php +++ b/resources/lang/vi-VN/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Giá trị không thể âm' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/zh-CN/admin/settings/general.php b/resources/lang/zh-CN/admin/settings/general.php index 10b5805cf0..04a1fa50c1 100644 --- a/resources/lang/zh-CN/admin/settings/general.php +++ b/resources/lang/zh-CN/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => '加入两步验证', 'two_factor_enabled_text' => '启用两步验证', 'two_factor_reset' => '重设两步验证密钥', - 'two_factor_reset_help' => '此操作会强制用户再次通过 Google Authenticator 登记设备,此操作可以解决上一部移动设备丢失的问题。', + 'two_factor_reset_help' => '这将迫使用户再次选用他们的身份验证器应用程序。 如果他们目前登记的设备丢失或被盗,这样做可能是有用的。 ', 'two_factor_reset_success' => '成功重设两步验证设备', 'two_factor_reset_error' => '两步验证设备重设失败', 'two_factor_enabled_warning' => '启用两步验证将需要您立即用登记的移动设备验证身份。如您尚未设置两步验证,您现在可以登记您的设备。', diff --git a/resources/lang/zh-CN/general.php b/resources/lang/zh-CN/general.php index dceaf72327..a1a23a1556 100644 --- a/resources/lang/zh-CN/general.php +++ b/resources/lang/zh-CN/general.php @@ -1,6 +1,7 @@ '2FA(双因素认证) 重置', 'accessories' => '附属品', 'activated' => '已激活', 'accepted_date' => '接受日期', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => '没有可申领的资产或资产型号。', + 'countable' => [ + 'accessories' => ':count 配件|:count 配件', + 'assets' => ':count 资产|:count 资产', + 'licenses' => ':count 许可证|:count 许可证', + 'license_seats' => ':count 许可证席位|:count 许可证席位', + 'consumables' => ':count 耗材|:count 耗材', + 'components' => ':count 组件|:count 组件', + ] + ]; diff --git a/resources/lang/zh-CN/localizations.php b/resources/lang/zh-CN/localizations.php index b7343f1bd3..6219123977 100644 --- a/resources/lang/zh-CN/localizations.php +++ b/resources/lang/zh-CN/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> '斯洛伐克语', 'sl-SI'=> 'Slovenian', + 'so-SO'=> '索马里语', 'es-ES'=> '西班牙语', 'es-CO'=> '西班牙文(哥伦比亚)', 'es-MX'=> '西班牙文(墨西哥)', diff --git a/resources/lang/zh-CN/validation.php b/resources/lang/zh-CN/validation.php index aa7f7999dc..a87a53ec0e 100644 --- a/resources/lang/zh-CN/validation.php +++ b/resources/lang/zh-CN/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => '数值不能为负数' ], + 'checkboxes' => ':attribute 包含无效的选项。', + 'radio_buttons' => ':attribute 无效。', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => '此字段中包含的值无效', ]; diff --git a/resources/lang/zh-HK/admin/settings/general.php b/resources/lang/zh-HK/admin/settings/general.php index 33cfd7b416..71fb8eb2c6 100644 --- a/resources/lang/zh-HK/admin/settings/general.php +++ b/resources/lang/zh-HK/admin/settings/general.php @@ -261,7 +261,7 @@ return [ 'two_factor_enrollment' => 'Two-Factor Enrollment', 'two_factor_enabled_text' => 'Enable Two Factor', 'two_factor_reset' => 'Reset Two-Factor Secret', - 'two_factor_reset_help' => 'This will force the user to enroll their device with Google Authenticator again. This can be useful if their currently enrolled device is lost or stolen. ', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => 'Two factor device successfully reset', 'two_factor_reset_error' => 'Two factor device reset failed', 'two_factor_enabled_warning' => 'Enabling two-factor if it is not currently enabled will immediately force you to authenticate with a Google Auth enrolled device. You will have the ability to enroll your device if one is not currently enrolled.', diff --git a/resources/lang/zh-HK/general.php b/resources/lang/zh-HK/general.php index 10eb60ed37..1d0575ab2e 100644 --- a/resources/lang/zh-HK/general.php +++ b/resources/lang/zh-HK/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Accessories', 'activated' => 'Activated', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/zh-HK/localizations.php b/resources/lang/zh-HK/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/zh-HK/localizations.php +++ b/resources/lang/zh-HK/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/zh-HK/validation.php b/resources/lang/zh-HK/validation.php index 1c6ad8a148..05374e23af 100644 --- a/resources/lang/zh-HK/validation.php +++ b/resources/lang/zh-HK/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/zh-TW/admin/settings/general.php b/resources/lang/zh-TW/admin/settings/general.php index be62969d75..b219b83f36 100644 --- a/resources/lang/zh-TW/admin/settings/general.php +++ b/resources/lang/zh-TW/admin/settings/general.php @@ -262,7 +262,7 @@ return [ 'two_factor_enrollment' => '登記雙因素驗證', 'two_factor_enabled_text' => '啟用雙因素驗證', 'two_factor_reset' => '重設雙因素驗證', - 'two_factor_reset_help' => '此動作會強制使用者再次透過 Google Authenticator 登記行動裝置,此動作可解決原登記行動裝置遺失的問題。', + 'two_factor_reset_help' => 'This will force the user to enroll their device with their authenticator app again. This can be useful if their currently enrolled device is lost or stolen. ', 'two_factor_reset_success' => '重設雙因素驗證裝置成功', 'two_factor_reset_error' => '重設雙因素驗證裝置失敗', 'two_factor_enabled_warning' => '啟用雙因素認證將需要您立即用登記的行動裝置驗證身份。如您尚未設置雙因素認證,您現在可以登記您的設備', diff --git a/resources/lang/zh-TW/general.php b/resources/lang/zh-TW/general.php index 3a5ef31ab3..3702ed351c 100644 --- a/resources/lang/zh-TW/general.php +++ b/resources/lang/zh-TW/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => '配件', 'activated' => '已啟用', 'accepted_date' => '接受日期', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/zh-TW/localizations.php b/resources/lang/zh-TW/localizations.php index ea204de756..ac89b30746 100644 --- a/resources/lang/zh-TW/localizations.php +++ b/resources/lang/zh-TW/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => '塞爾維亞語(拉丁文)', 'sk-SK'=> 'Slovak', 'sl-SI'=> '斯洛維尼亞語', + 'so-SO'=> 'Somali', 'es-ES'=> '西班牙語', 'es-CO'=> '哥倫比亞西班牙語', 'es-MX'=> '墨西哥西班牙語', diff --git a/resources/lang/zh-TW/validation.php b/resources/lang/zh-TW/validation.php index 0dcf0908a6..432e9d2817 100644 --- a/resources/lang/zh-TW/validation.php +++ b/resources/lang/zh-TW/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => '值不能為負' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/lang/zu-ZA/general.php b/resources/lang/zu-ZA/general.php index 4199667319..fba19b7755 100644 --- a/resources/lang/zu-ZA/general.php +++ b/resources/lang/zu-ZA/general.php @@ -1,6 +1,7 @@ '2FA reset', 'accessories' => 'Izesekeli', 'activated' => 'Kuvunyelwe', 'accepted_date' => 'Date Accepted', @@ -519,4 +520,13 @@ return [ ], 'no_requestable' => 'There are no requestable assets or asset models.', + 'countable' => [ + 'accessories' => ':count Accessory|:count Accessories', + 'assets' => ':count Asset|:count Assets', + 'licenses' => ':count License|:count Licenses', + 'license_seats' => ':count License Seat|:count License Seats', + 'consumables' => ':count Consumable|:count Consumables', + 'components' => ':count Component|:count Components', + ] + ]; diff --git a/resources/lang/zu-ZA/localizations.php b/resources/lang/zu-ZA/localizations.php index 2de8b42526..f1232dd138 100644 --- a/resources/lang/zu-ZA/localizations.php +++ b/resources/lang/zu-ZA/localizations.php @@ -50,6 +50,7 @@ return [ 'sr-CS' => 'Serbian (Latin)', 'sk-SK'=> 'Slovak', 'sl-SI'=> 'Slovenian', + 'so-SO'=> 'Somali', 'es-ES'=> 'Spanish', 'es-CO'=> 'Spanish, Colombia', 'es-MX'=> 'Spanish, Mexico', diff --git a/resources/lang/zu-ZA/validation.php b/resources/lang/zu-ZA/validation.php index 05382f751d..6aaea0d2a3 100644 --- a/resources/lang/zu-ZA/validation.php +++ b/resources/lang/zu-ZA/validation.php @@ -105,6 +105,8 @@ return [ 'gte' => [ 'numeric' => 'Value cannot be negative' ], + 'checkboxes' => ':attribute contains invalid options.', + 'radio_buttons' => ':attribute is invalid.', /* @@ -151,4 +153,10 @@ return [ 'attributes' => [], + /* + |-------------------------------------------------------------------------- + | Generic Validation Messages + |-------------------------------------------------------------------------- + */ + 'invalid_value_in_field' => 'Invalid value included in this field', ]; diff --git a/resources/views/account/accept/create.blade.php b/resources/views/account/accept/create.blade.php index c05bc3a892..fa6e4b8b56 100644 --- a/resources/views/account/accept/create.blade.php +++ b/resources/views/account/accept/create.blade.php @@ -70,7 +70,7 @@

{{trans('general.sign_tos')}}

- +
@@ -94,6 +94,7 @@ @section('moar_scripts') diff --git a/resources/views/licenses/index.blade.php b/resources/views/licenses/index.blade.php index 8fa52fd1fc..82e34b1909 100755 --- a/resources/views/licenses/index.blade.php +++ b/resources/views/licenses/index.blade.php @@ -13,6 +13,9 @@ {{ trans('general.create') }} @endcan +@can('view', \App\Models\License::class) + {{ trans('general.export') }} +@endcan @stop {{-- Page content --}} diff --git a/resources/views/licenses/view.blade.php b/resources/views/licenses/view.blade.php index b23023f489..4f47055c27 100755 --- a/resources/views/licenses/view.blade.php +++ b/resources/views/licenses/view.blade.php @@ -174,23 +174,56 @@ @endif - @if ($license->supplier_id) -
-
- - {{ trans('general.supplier') }} - -
-
- @if ($license->supplier) - + @if ($license->supplier) +
+
+ {{ trans('general.supplier') }} +
+
+ @can('view', \App\Models\Supplier::class) + + {{ $license->supplier->name }} + + @else {{ $license->supplier->name }} - - @else - {{ trans('general.deleted') }} - @endif + @endcan + + @if ($license->supplier->url) +
{{ $license->supplier->url }} + @endif + + @if ($license->supplier->phone) +
+ {{ $license->supplier->phone }} + @endif + + @if ($license->supplier->email) +
{{ $license->supplier->email }} + @endif + + @if ($license->supplier->address) +
{{ $license->supplier->address }} + @endif + @if ($license->supplier->address2) +
{{ $license->supplier->address2 }} + @endif + @if ($license->supplier->city) +
{{ $license->supplier->city }}, + @endif + @if ($license->supplier->state) + {{ $license->supplier->state }} + @endif + @if ($license->supplier->country) + {{ $license->supplier->country }} + @endif + @if ($license->supplier->zip) + {{ $license->supplier->zip }} + @endif + +
-
+ @else + {{ trans('general.deleted') }} @endif diff --git a/resources/views/modals/location.blade.php b/resources/views/modals/location.blade.php index 112e710249..0b5424b294 100644 --- a/resources/views/modals/location.blade.php +++ b/resources/views/modals/location.blade.php @@ -17,7 +17,7 @@
-
+
diff --git a/resources/views/models/view.blade.php b/resources/views/models/view.blade.php index 91f112d8aa..76d3322998 100755 --- a/resources/views/models/view.blade.php +++ b/resources/views/models/view.blade.php @@ -236,6 +236,12 @@ @endif + @if ($model->created_at) +
  • {{ trans('general.created_at') }}: + {{ Helper::getFormattedDateObject($model->created_at, 'datetime', false) }} +
  • + @endif + @if ($model->min_amt)
  • {{ trans('general.min_amt') }}: {{$model->min_amt }} @@ -313,11 +319,6 @@
  • @endif - - - @if ($model->deleted_at!='') -

  • {{ trans('admin/models/general.restore') }}
  • - @endif @if ($model->note) @@ -337,22 +338,32 @@ @can('create', \App\Models\AssetModel::class) @endcan @can('delete', \App\Models\AssetModel::class) @if ($model->assets_count > 0) -
    - +
    @else -
    - - {{ trans('general.delete') }} -
    + @endif + + +
    + @if ($model->deleted_at!='') +
    + @csrf + +
    + @else + + {{ trans('general.delete') }} + @endif +
    + @endcan
    diff --git a/resources/views/notifications/markdown/report-expected-checkins.blade.php b/resources/views/notifications/markdown/report-expected-checkins.blade.php index 3715188d42..08b81350e4 100644 --- a/resources/views/notifications/markdown/report-expected-checkins.blade.php +++ b/resources/views/notifications/markdown/report-expected-checkins.blade.php @@ -10,7 +10,7 @@ @php $checkin = Helper::getFormattedDateObject($asset->expected_checkin, 'date'); @endphp -| [{{ $asset->present()->name }}]({{ route('hardware.show', ['hardware' => $asset->id]) }}) | [{{ $asset->assigned->present()->fullName }}]({{ route($asset->targetShowRoute().'.show', [$asset->assigned->id]) }}) | {{ $checkin['formatted'] }} +| [{{ $asset->present()->name }}]({{ route('hardware.show', ['hardware' => $asset->id]) }}) | [{{ $asset->assignedTo->present()->fullName }}]({{ route($asset->targetShowRoute().'.show', [$asset->assignedTo->id]) }}) | {{ $checkin['formatted'] }} @endforeach @endcomponent diff --git a/resources/views/partials/bootstrap-table.blade.php b/resources/views/partials/bootstrap-table.blade.php index b4f47c6a3c..a3d6b6df2d 100644 --- a/resources/views/partials/bootstrap-table.blade.php +++ b/resources/views/partials/bootstrap-table.blade.php @@ -58,6 +58,7 @@ maintainSelected: true, trimOnSearch: false, showSearchClearButton: true, + addrbar: {{ (config('session.bs_table_addrbar') == 'true') ? 'true' : 'false'}}, // deeplink search phrases, sorting, etc paginationFirstText: "{{ trans('general.first') }}", paginationLastText: "{{ trans('general.last') }}", paginationPreText: "{{ trans('general.previous') }}", diff --git a/resources/views/partials/label2-field-definitions.blade.php b/resources/views/partials/label2-field-definitions.blade.php index 8d8c680c94..b701ffe69a 100644 --- a/resources/views/partials/label2-field-definitions.blade.php +++ b/resources/views/partials/label2-field-definitions.blade.php @@ -306,6 +306,7 @@