Compare commits
228 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a8231bc338 | |||
| 4d25e8f7f0 | |||
| 8368576dc9 | |||
| 071b4d1e67 | |||
| 1fe170e6a1 | |||
| 612a708c8d | |||
| 580a4c476e | |||
| c9de9ebbab | |||
| 3d0770973a | |||
| e814cd5a9e | |||
| e5f426ec64 | |||
| a1b0a30351 | |||
| c0f0f43dd7 | |||
| 57c07a3687 | |||
| 6de08f46fd | |||
| 3554270366 | |||
| 029450bcbf | |||
| 329fbf6a7c | |||
| b7d0fccabc | |||
| 48ab94c15b | |||
| ac907add83 | |||
| 3d47a8ba50 | |||
| 452185be45 | |||
| 14feed61d8 | |||
| 02a8e17704 | |||
| 7553ec3e27 | |||
| c8f82cbc2b | |||
| b7bd56daf7 | |||
| 393118f083 | |||
| d3210c6d40 | |||
| 60d7232569 | |||
| 2f1212fa1a | |||
| cc4d8f2a5b | |||
| c0a3284fad | |||
| caff608e3c | |||
| c48fa7c2cb | |||
| 14b25949b8 | |||
| 2df995c2c7 | |||
| ad182a96fa | |||
| a728f38bd1 | |||
| 894754e8dc | |||
| d141675478 | |||
| 8bdd80e236 | |||
| c422737525 | |||
| fc55786ca2 | |||
| 2949fdecdd | |||
| d32163f881 | |||
| 215fe501ac | |||
| ef3112e526 | |||
| 8aa0135afa | |||
| ff1157a95e | |||
| e66b690c93 | |||
| 242fd00e8a | |||
| c77a1faa69 | |||
| 540b609591 | |||
| ac5a409cdf | |||
| 4cbc751dad | |||
| 1dc579ce71 | |||
| 37282fffff | |||
| b3e98cb7eb | |||
| bd03d70937 | |||
| 716161e626 | |||
| 93a67847ba | |||
| 6873244e7e | |||
| c569a84f87 | |||
| 1e07927e78 | |||
| c4b8b85602 | |||
| 464e4d11e9 | |||
| 85e4a19f03 | |||
| 6263d01c73 | |||
| 967e646989 | |||
| e9d3b9dcde | |||
| 3065ba851e | |||
| 80522a2505 | |||
| 532e6c1c1d | |||
| 5cf314a314 | |||
| c08cfb9b73 | |||
| 61591633f8 | |||
| 9b5b58687d | |||
| fb7bec4be4 | |||
| 9dba03646b | |||
| ddd2ce07f3 | |||
| 3de5f5882c | |||
| 73e010434e | |||
| a9d6a5f618 | |||
| ef9cc4fceb | |||
| e104decf77 | |||
| 96e38da875 | |||
| ff95049f7c | |||
| 63cb4e70bc | |||
| e6ae9cae6b | |||
| 1f1e1401cf | |||
| af1159658d | |||
| 4e2b22135a | |||
| 4ee5a4c5c3 | |||
| aa14cfe18d | |||
| 0797c4ac97 | |||
| b4ea75f34f | |||
| e37a990820 | |||
| b54d68ebf1 | |||
| 4ae2126ded | |||
| c420670ebb | |||
| dae1f43359 | |||
| 38df5e8b07 | |||
| d1cd670af5 | |||
| 04e4b6c181 | |||
| 9559c5a025 | |||
| 42fa2e12db | |||
| f41583fd59 | |||
| b48704b3af | |||
| de3ebfecfe | |||
| 29311b1b5b | |||
| b131227b71 | |||
| ec45833cd8 | |||
| 4c2905b1f0 | |||
| 6e51be6c57 | |||
| b195168c83 | |||
| a722eca6aa | |||
| 1f6428ee1c | |||
| ab10fb466c | |||
| dcabf90409 | |||
| 27752f595c | |||
| c17598d4b4 | |||
| d74d9900da | |||
| 5505c9ab67 | |||
| 8d2ffea7df | |||
| 1233c939f8 | |||
| 46dd83c34e | |||
| 639aa85353 | |||
| 008b6f1db2 | |||
| f46ad4811e | |||
| b39b24e6b9 | |||
| 7f0133a4d6 | |||
| 85bc8bc8f0 | |||
| 32e1d4b2ef | |||
| f8d5af836f | |||
| 19ceb3f5b7 | |||
| f346c55cf1 | |||
| e797705dad | |||
| a331e14ef2 | |||
| d6b4c27302 | |||
| f8d7291923 | |||
| b59674ab77 | |||
| 0620b8b163 | |||
| f639d82693 | |||
| 13d2d41f0c | |||
| 015cd44136 | |||
| 4834f60a44 | |||
| 3327e1d8f2 | |||
| 40e002911c | |||
| 03bcc3b73f | |||
| f963df0658 | |||
| 0aa77d281f | |||
| 0988255693 | |||
| fb9e7cf5e1 | |||
| ecc1bd69b9 | |||
| 830f095a6e | |||
| 288f7e4e93 | |||
| a205ae12a4 | |||
| 1866426f11 | |||
| e4ab6c0c24 | |||
| 189c148761 | |||
| 8b7c1a195c | |||
| d77547aecf | |||
| 478a5c0e1a | |||
| 5c6757ecf6 | |||
| f2981cf12b | |||
| c3310a0772 | |||
| fe485acd4a | |||
| fbe19738cb | |||
| d29a62a335 | |||
| 6cc2013102 | |||
| 39ce7b75ca | |||
| f3959323ff | |||
| 0d62ab2ad4 | |||
| cbf9239d86 | |||
| 295875c45e | |||
| 5e363f7dd4 | |||
| 6bb0927f26 | |||
| 24bb679305 | |||
| ddc22b4d6b | |||
| 9a75131a98 | |||
| 26b4063435 | |||
| 8dd432c3a2 | |||
| 0e390f1a9b | |||
| 6fb83d66a2 | |||
| bf96688aef | |||
| eb4aeb47c1 | |||
| d906f3cf62 | |||
| 0defed9abe | |||
| ac925af3d0 | |||
| 4f08b2360c | |||
| fd60ce1198 | |||
| 00cdb13803 | |||
| ef6d747b37 | |||
| e26abb8684 | |||
| 82801242d3 | |||
| e53ed2319c | |||
| 8f512e5941 | |||
| 8a1b6b0684 | |||
| 5ac6caf257 | |||
| 36f460d32b | |||
| 802fcbafa0 | |||
| 1098b8cd9d | |||
| da8999f59a | |||
| dd34f07989 | |||
| 6b242f47e4 | |||
| 17c9c93456 | |||
| 0eb34cb979 | |||
| 79a4c83879 | |||
| cb56f89954 | |||
| 68988524d6 | |||
| c278900581 | |||
| 8e790fdc47 | |||
| 0ef20c524f | |||
| 5ccaf2c23e | |||
| bec9511df1 | |||
| 017948c3bb | |||
| 1cb72e3e9c | |||
| e45f563b50 | |||
| 69d255f584 | |||
| dd08642a7c | |||
| 3ac0877418 | |||
| 9573428201 | |||
| 0118504cd3 | |||
| f4e69679ca | |||
| ce7a8ad808 | |||
| c17c011488 |
@@ -2,13 +2,13 @@
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Mail\ExpiringAssetsMail;
|
||||
use App\Mail\ExpiringLicenseMail;
|
||||
use App\Models\Asset;
|
||||
use App\Models\License;
|
||||
use App\Models\Recipients\AlertRecipient;
|
||||
use App\Models\Setting;
|
||||
use App\Notifications\ExpiringAssetsNotification;
|
||||
use App\Notifications\ExpiringLicenseNotification;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
class SendExpirationAlerts extends Command
|
||||
{
|
||||
@@ -47,22 +47,22 @@ class SendExpirationAlerts extends Command
|
||||
if (($settings->alert_email != '') && ($settings->alerts_enabled == 1)) {
|
||||
|
||||
// Send a rollup to the admin, if settings dictate
|
||||
$recipients = collect(explode(',', $settings->alert_email))->map(function ($item, $key) {
|
||||
return new AlertRecipient($item);
|
||||
});
|
||||
|
||||
$recipients = collect(explode(',', $settings->alert_email))
|
||||
->map(fn($item) => trim($item)) // Trim each email
|
||||
->all();
|
||||
// Expiring Assets
|
||||
$assets = Asset::getExpiringWarrantee($threshold);
|
||||
|
||||
if ($assets->count() > 0) {
|
||||
$this->info(trans_choice('mail.assets_warrantee_alert', $assets->count(), ['count' => $assets->count(), 'threshold' => $threshold]));
|
||||
\Notification::send($recipients, new ExpiringAssetsNotification($assets, $threshold));
|
||||
Mail::to($recipients)->send(new ExpiringAssetsMail($assets, $threshold));
|
||||
}
|
||||
|
||||
// Expiring licenses
|
||||
$licenses = License::getExpiringLicenses($threshold);
|
||||
if ($licenses->count() > 0) {
|
||||
$this->info(trans_choice('mail.license_expiring_alert', $licenses->count(), ['count' => $licenses->count(), 'threshold' => $threshold]));
|
||||
\Notification::send($recipients, new ExpiringLicenseNotification($licenses, $threshold));
|
||||
Mail::to($recipients)->send(new ExpiringLicenseMail($licenses, $threshold));
|
||||
}
|
||||
} else {
|
||||
if ($settings->alert_email == '') {
|
||||
|
||||
@@ -55,11 +55,11 @@ class AccessoriesFilesController extends Controller
|
||||
|
||||
}
|
||||
|
||||
return redirect()->route('accessories.show', $accessory->id)->with('error', trans('general.no_files_uploaded'));
|
||||
return redirect()->route('accessories.show', $accessory->id)->withFragment('files')->with('error', trans('general.no_files_uploaded'));
|
||||
}
|
||||
// Prepare the error message
|
||||
return redirect()->route('accessories.index')
|
||||
->with('error', trans('general.file_does_not_exist'));
|
||||
return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.does_not_exist'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -72,29 +72,27 @@ class AccessoriesFilesController extends Controller
|
||||
*/
|
||||
public function destroy($accessoryId = null, $fileId = null) : RedirectResponse
|
||||
{
|
||||
$accessory = Accessory::find($accessoryId);
|
||||
|
||||
// the asset is valid
|
||||
if (isset($accessory->id)) {
|
||||
if ($accessory = Accessory::find($accessoryId)) {
|
||||
$this->authorize('update', $accessory);
|
||||
$log = Actionlog::find($fileId);
|
||||
|
||||
// Remove the file if one exists
|
||||
if (Storage::exists('accessories/'.$log->filename)) {
|
||||
try {
|
||||
Storage::delete('accessories/'.$log->filename);
|
||||
} catch (\Exception $e) {
|
||||
Log::debug($e);
|
||||
if ($log = Actionlog::find($fileId)) {
|
||||
|
||||
if (Storage::exists('private_uploads/accessories/'.$log->filename)) {
|
||||
try {
|
||||
Storage::delete('private_uploads/accessories/' . $log->filename);
|
||||
$log->delete();
|
||||
return redirect()->back()->withFragment('files')->with('success', trans('admin/hardware/message.deletefile.success'));
|
||||
} catch (\Exception $e) {
|
||||
Log::debug($e);
|
||||
return redirect()->route('accessories.index')->with('error', trans('general.file_does_not_exist'));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$log->delete();
|
||||
|
||||
return redirect()->back()->withFragment('files')->with('success', trans('admin/hardware/message.deletefile.success'));
|
||||
return redirect()->route('accessories.show', ['accessory' => $accessory])->withFragment('files')->with('error', trans('general.log_record_not_found'));
|
||||
}
|
||||
|
||||
// Redirect to the licence management page
|
||||
return redirect()->route('accessories.index')->with('error', trans('general.file_does_not_exist'));
|
||||
return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.does_not_exist'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -124,10 +122,11 @@ class AccessoriesFilesController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
return redirect()->route('accessories.show', ['accessory' => $accessory])->with('error', trans('general.log_record_not_found'));
|
||||
return redirect()->route('accessories.show', ['accessory' => $accessory])->withFragment('files')->with('error', trans('general.log_record_not_found'));
|
||||
|
||||
}
|
||||
|
||||
return redirect()->route('accessories.index')->with('error', trans('general.file_not_found'));
|
||||
return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.does_not_exist'));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -765,9 +765,13 @@ class AssetsController extends Controller
|
||||
}
|
||||
|
||||
if ($problems_updating_encrypted_custom_fields) {
|
||||
return response()->json(Helper::formatStandardApiResponse('success', (new AssetsTransformer)->transformAsset($asset), trans('admin/hardware/message.update.encrypted_warning')));
|
||||
return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.update.encrypted_warning')));
|
||||
// Below is the *correct* return since it uses the transformer, but we have to use the old, flat return for now until we can update Jamf2Snipe and Kanji2Snipe
|
||||
// return response()->json(Helper::formatStandardApiResponse('success', (new AssetsTransformer)->transformAsset($asset), trans('admin/hardware/message.update.encrypted_warning')));
|
||||
} else {
|
||||
return response()->json(Helper::formatStandardApiResponse('success', (new AssetsTransformer)->transformAsset($asset), trans('admin/hardware/message.update.success')));
|
||||
return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.update.success')));
|
||||
// Below is the *correct* return since it uses the transformer, but we have to use the old, flat return for now until we can update Jamf2Snipe and Kanji2Snipe
|
||||
/// return response()->json(Helper::formatStandardApiResponse('success', (new AssetsTransformer)->transformAsset($asset), trans('admin/hardware/message.update.success')));
|
||||
}
|
||||
}
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, $asset->getErrors()), 200);
|
||||
|
||||
@@ -39,6 +39,7 @@ class CategoriesController extends Controller
|
||||
'components_count',
|
||||
'licenses_count',
|
||||
'image',
|
||||
'notes',
|
||||
];
|
||||
|
||||
$categories = Category::select([
|
||||
@@ -52,6 +53,7 @@ class CategoriesController extends Controller
|
||||
'require_acceptance',
|
||||
'checkin_email',
|
||||
'image',
|
||||
'notes',
|
||||
])
|
||||
->with('adminuser')
|
||||
->withCount('accessories as accessories_count', 'consumables as consumables_count', 'components as components_count', 'licenses as licenses_count');
|
||||
|
||||
@@ -38,11 +38,12 @@ class CompaniesController extends Controller
|
||||
'accessories_count',
|
||||
'consumables_count',
|
||||
'components_count',
|
||||
'notes',
|
||||
];
|
||||
|
||||
$companies = Company::withCount(['assets as assets_count' => function ($query) {
|
||||
$query->AssetsForShow();
|
||||
}])->withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count', 'components as components_count', 'users as users_count');
|
||||
}])->withCount('licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count', 'components as components_count', 'users as users_count');
|
||||
|
||||
if ($request->filled('search')) {
|
||||
$companies->TextSearch($request->input('search'));
|
||||
|
||||
@@ -23,7 +23,7 @@ class DepartmentsController extends Controller
|
||||
public function index(Request $request) : JsonResponse | array
|
||||
{
|
||||
$this->authorize('view', Department::class);
|
||||
$allowed_columns = ['id', 'name', 'image', 'users_count'];
|
||||
$allowed_columns = ['id', 'name', 'image', 'users_count', 'notes'];
|
||||
|
||||
$departments = Department::select(
|
||||
'departments.id',
|
||||
@@ -35,7 +35,8 @@ class DepartmentsController extends Controller
|
||||
'departments.manager_id',
|
||||
'departments.created_at',
|
||||
'departments.updated_at',
|
||||
'departments.image'
|
||||
'departments.image',
|
||||
'departments.notes',
|
||||
)->with('users')->with('location')->with('manager')->with('company')->withCount('users as users_count');
|
||||
|
||||
if ($request->filled('search')) {
|
||||
|
||||
@@ -24,7 +24,7 @@ class GroupsController extends Controller
|
||||
|
||||
$this->authorize('view', Group::class);
|
||||
|
||||
$groups = Group::select('id', 'name', 'permissions', 'created_at', 'updated_at', 'created_by')->with('adminuser')->withCount('users as users_count');
|
||||
$groups = Group::select('id', 'name', 'permissions', 'notes', 'created_at', 'updated_at', 'created_by')->with('adminuser')->withCount('users as users_count');
|
||||
|
||||
if ($request->filled('search')) {
|
||||
$groups = $groups->TextSearch($request->input('search'));
|
||||
@@ -81,6 +81,7 @@ class GroupsController extends Controller
|
||||
|
||||
$group->name = $request->input('name');
|
||||
$group->created_by = auth()->id();
|
||||
$group->notes = $request->input('notes');
|
||||
$group->permissions = json_encode($request->input('permissions', $groupPermissions));
|
||||
|
||||
if ($group->save()) {
|
||||
@@ -118,6 +119,7 @@ class GroupsController extends Controller
|
||||
$group = Group::findOrFail($id);
|
||||
|
||||
$group->name = $request->input('name');
|
||||
$group->notes = $request->input('notes');
|
||||
$group->permissions = $request->input('permissions'); // Todo - some JSON validation stuff here
|
||||
|
||||
if ($group->save()) {
|
||||
|
||||
@@ -53,6 +53,7 @@ class LocationsController extends Controller
|
||||
'updated_at',
|
||||
'users_count',
|
||||
'zip',
|
||||
'notes',
|
||||
];
|
||||
|
||||
$locations = Location::with('parent', 'manager', 'children')->select([
|
||||
@@ -73,6 +74,7 @@ class LocationsController extends Controller
|
||||
'locations.image',
|
||||
'locations.ldap_ou',
|
||||
'locations.currency',
|
||||
'locations.notes',
|
||||
])
|
||||
->withCount('assignedAssets as assigned_assets_count')
|
||||
->withCount('assets as assets_count')
|
||||
@@ -190,6 +192,7 @@ class LocationsController extends Controller
|
||||
'locations.updated_at',
|
||||
'locations.image',
|
||||
'locations.currency',
|
||||
'locations.notes',
|
||||
])
|
||||
->withCount('assignedAssets as assigned_assets_count')
|
||||
->withCount('assets as assets_count')
|
||||
@@ -255,7 +258,7 @@ class LocationsController extends Controller
|
||||
{
|
||||
$this->authorize('view', Accessory::class);
|
||||
$this->authorize('view', $location);
|
||||
$accessory_checkouts = AccessoryCheckout::LocationAssigned()->with('adminuser')->with('accessories');
|
||||
$accessory_checkouts = AccessoryCheckout::LocationAssigned()->where('assigned_to', $location->id)->with('adminuser')->with('accessories');
|
||||
|
||||
$offset = ($request->input('offset') > $accessory_checkouts->count()) ? $accessory_checkouts->count() : app('api_offset_value');
|
||||
$limit = app('api_limit_value');
|
||||
|
||||
@@ -39,7 +39,8 @@ class ManufacturersController extends Controller
|
||||
'assets_count',
|
||||
'consumables_count',
|
||||
'components_count',
|
||||
'licenses_count'
|
||||
'licenses_count',
|
||||
'notes',
|
||||
];
|
||||
|
||||
$manufacturers = Manufacturer::select([
|
||||
@@ -55,6 +56,7 @@ class ManufacturersController extends Controller
|
||||
'updated_at',
|
||||
'image',
|
||||
'deleted_at',
|
||||
'notes',
|
||||
])
|
||||
->with('adminuser')
|
||||
->withCount('assets as assets_count')
|
||||
|
||||
@@ -535,7 +535,7 @@ class AssetsController extends Controller
|
||||
{
|
||||
$settings = Setting::getSettings();
|
||||
|
||||
if ($settings->qr_code == '1') {
|
||||
if (($settings->qr_code == '1') && ($settings->label2_2d_type !== 'none')) {
|
||||
$asset = Asset::withTrashed()->find($assetId);
|
||||
if ($asset) {
|
||||
$size = Helper::barcodeDimensions($settings->label2_2d_type);
|
||||
|
||||
@@ -69,6 +69,7 @@ class CategoriesController extends Controller
|
||||
$category->use_default_eula = $request->input('use_default_eula', '0');
|
||||
$category->require_acceptance = $request->input('require_acceptance', '0');
|
||||
$category->checkin_email = $request->input('checkin_email', '0');
|
||||
$category->notes = $request->input('notes');
|
||||
$category->created_by = auth()->id();
|
||||
|
||||
$category = $request->handleImages($category);
|
||||
@@ -134,6 +135,7 @@ class CategoriesController extends Controller
|
||||
$category->use_default_eula = $request->input('use_default_eula', '0');
|
||||
$category->require_acceptance = $request->input('require_acceptance', '0');
|
||||
$category->checkin_email = $request->input('checkin_email', '0');
|
||||
$category->notes = $request->input('notes');
|
||||
|
||||
$category = $request->handleImages($category);
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@ final class CompaniesController extends Controller
|
||||
$company->phone = $request->input('phone');
|
||||
$company->fax = $request->input('fax');
|
||||
$company->email = $request->input('email');
|
||||
$company->notes = $request->input('notes');
|
||||
$company->created_by = auth()->id();
|
||||
|
||||
$company = $request->handleImages($company);
|
||||
@@ -111,6 +112,7 @@ final class CompaniesController extends Controller
|
||||
$company->phone = $request->input('phone');
|
||||
$company->fax = $request->input('fax');
|
||||
$company->email = $request->input('email');
|
||||
$company->notes = $request->input('notes');
|
||||
|
||||
$company = $request->handleImages($company);
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ class DepartmentsController extends Controller
|
||||
$department->manager_id = ($request->filled('manager_id') ? $request->input('manager_id') : null);
|
||||
$department->location_id = ($request->filled('location_id') ? $request->input('location_id') : null);
|
||||
$department->company_id = ($request->filled('company_id') ? $request->input('company_id') : null);
|
||||
$department->notes = $request->input('notes');
|
||||
$department = $request->handleImages($department);
|
||||
|
||||
if ($department->save()) {
|
||||
@@ -171,7 +172,7 @@ class DepartmentsController extends Controller
|
||||
$department->company_id = ($request->filled('company_id') ? $request->input('company_id') : null);
|
||||
$department->phone = $request->input('phone');
|
||||
$department->fax = $request->input('fax');
|
||||
|
||||
$department->notes = $request->input('notes');
|
||||
$department = $request->handleImages($department);
|
||||
|
||||
if ($department->save()) {
|
||||
|
||||
@@ -62,6 +62,7 @@ class GroupsController extends Controller
|
||||
$group->name = $request->input('name');
|
||||
$group->permissions = json_encode($request->input('permission'));
|
||||
$group->created_by = auth()->id();
|
||||
$group->notes = $request->input('notes');
|
||||
|
||||
if ($group->save()) {
|
||||
return redirect()->route('groups.index')->with('success', trans('admin/groups/message.success.create'));
|
||||
@@ -108,6 +109,7 @@ class GroupsController extends Controller
|
||||
}
|
||||
$group->name = $request->input('name');
|
||||
$group->permissions = json_encode($request->input('permission'));
|
||||
$group->notes = $request->input('notes');
|
||||
|
||||
if (! config('app.lock_passwords')) {
|
||||
if ($group->save()) {
|
||||
|
||||
@@ -78,6 +78,7 @@ class LocationsController extends Controller
|
||||
$location->created_by = auth()->id();
|
||||
$location->phone = request('phone');
|
||||
$location->fax = request('fax');
|
||||
$location->notes = $request->input('notes');
|
||||
|
||||
$location = $request->handleImages($location);
|
||||
|
||||
@@ -138,6 +139,7 @@ class LocationsController extends Controller
|
||||
$location->fax = request('fax');
|
||||
$location->ldap_ou = $request->input('ldap_ou');
|
||||
$location->manager_id = $request->input('manager_id');
|
||||
$location->notes = $request->input('notes');
|
||||
|
||||
$location = $request->handleImages($location);
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@ class ManufacturersController extends Controller
|
||||
$manufacturer->warranty_lookup_url = $request->input('warranty_lookup_url');
|
||||
$manufacturer->support_phone = $request->input('support_phone');
|
||||
$manufacturer->support_email = $request->input('support_email');
|
||||
$manufacturer->notes = $request->input('notes');
|
||||
$manufacturer = $request->handleImages($manufacturer);
|
||||
|
||||
if ($manufacturer->save()) {
|
||||
@@ -123,6 +124,7 @@ class ManufacturersController extends Controller
|
||||
$manufacturer->warranty_lookup_url = $request->input('warranty_lookup_url');
|
||||
$manufacturer->support_phone = $request->input('support_phone');
|
||||
$manufacturer->support_email = $request->input('support_email');
|
||||
$manufacturer->notes = $request->input('notes');
|
||||
|
||||
// Set the model's image property to null if the image is being deleted
|
||||
if ($request->input('image_delete') == 1) {
|
||||
|
||||
@@ -800,6 +800,7 @@ class SettingsController extends Controller
|
||||
}
|
||||
|
||||
if ($setting->save()) {
|
||||
|
||||
return redirect()->route('settings.labels.index')
|
||||
->with('success', trans('admin/settings/message.update.success'));
|
||||
}
|
||||
@@ -869,7 +870,6 @@ class SettingsController extends Controller
|
||||
}
|
||||
|
||||
if ($setting->save()) {
|
||||
$setting->update_client_side_cert_files();
|
||||
return redirect()->route('settings.ldap.index')
|
||||
->with('success', trans('admin/settings/message.update.success'));
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ class SettingsSamlRequest extends FormRequest
|
||||
$custom_privateKey = '';
|
||||
$custom_x509certNew = '';
|
||||
if (! empty($this->input('saml_custom_settings'))) {
|
||||
$req_custom_settings = preg_split('/\r\n|\r|\n/', $this->input('saml_custom_settings'));
|
||||
$req_custom_settings = preg_split('/\r\n|\r|\n/', $this->input('saml_custom_settings', ''));
|
||||
$custom_settings = [];
|
||||
|
||||
foreach ($req_custom_settings as $custom_setting) {
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
|
||||
use App\Models\Labels\Label;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class StoreLabelSettings extends FormRequest
|
||||
{
|
||||
@@ -22,6 +25,10 @@ class StoreLabelSettings extends FormRequest
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
$names = Label::find()?->map(function ($label) {
|
||||
return $label->getName();
|
||||
})->values()->toArray();
|
||||
|
||||
return [
|
||||
'labels_per_page' => 'numeric',
|
||||
'labels_width' => 'numeric',
|
||||
@@ -36,6 +43,10 @@ class StoreLabelSettings extends FormRequest
|
||||
'labels_pagewidth' => 'numeric|nullable',
|
||||
'labels_pageheight' => 'numeric|nullable',
|
||||
'qr_text' => 'max:31|nullable',
|
||||
'label2_template' => [
|
||||
'required',
|
||||
Rule::in($names),
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +66,7 @@ class CategoriesTransformer
|
||||
'id' => (int) $category->adminuser->id,
|
||||
'name'=> e($category->adminuser->present()->fullName()),
|
||||
] : null,
|
||||
'notes' => Helper::parseEscapedMarkedownInline($category->notes),
|
||||
'created_at' => Helper::getFormattedDateObject($category->created_at, 'datetime'),
|
||||
'updated_at' => Helper::getFormattedDateObject($category->updated_at, 'datetime'),
|
||||
];
|
||||
|
||||
@@ -40,6 +40,7 @@ class CompaniesTransformer
|
||||
'id' => (int) $company->adminuser->id,
|
||||
'name'=> e($company->adminuser->present()->fullName()),
|
||||
] : null,
|
||||
'notes' => Helper::parseEscapedMarkedownInline($company->notes),
|
||||
'created_at' => Helper::getFormattedDateObject($company->created_at, 'datetime'),
|
||||
'updated_at' => Helper::getFormattedDateObject($company->updated_at, 'datetime'),
|
||||
];
|
||||
|
||||
@@ -44,6 +44,7 @@ class DepartmentsTransformer
|
||||
'name' => e($department->location->name),
|
||||
] : null,
|
||||
'users_count' => e($department->users_count),
|
||||
'notes' => Helper::parseEscapedMarkedownInline($department->notes),
|
||||
'created_at' => Helper::getFormattedDateObject($department->created_at, 'datetime'),
|
||||
'updated_at' => Helper::getFormattedDateObject($department->updated_at, 'datetime'),
|
||||
];
|
||||
|
||||
@@ -61,7 +61,7 @@ class DepreciationReportTransformer
|
||||
/**
|
||||
* Override the previously set null values if there is a valid model and associated depreciation
|
||||
*/
|
||||
if (($asset->model) && ($asset->model->depreciation)) {
|
||||
if (($asset->model) && ($asset->model->depreciation) && ($asset->model->depreciation->months !== 0)) {
|
||||
$depreciated_value = Helper::formatCurrencyOutput($asset->getDepreciatedValue());
|
||||
$monthly_depreciation =Helper::formatCurrencyOutput($asset->purchase_cost / $asset->model->depreciation->months);
|
||||
$diff = Helper::formatCurrencyOutput(($asset->purchase_cost - $asset->getDepreciatedValue()));
|
||||
|
||||
@@ -26,6 +26,7 @@ class GroupsTransformer
|
||||
'name' => e($group->name),
|
||||
'permissions' => json_decode($group->permissions),
|
||||
'users_count' => (int) $group->users_count,
|
||||
'notes' => Helper::parseEscapedMarkedownInline($group->notes),
|
||||
'created_by' => ($group->adminuser) ? [
|
||||
'id' => (int) $group->adminuser->id,
|
||||
'name'=> e($group->adminuser->present()->fullName()),
|
||||
|
||||
@@ -55,6 +55,7 @@ class LocationsTransformer
|
||||
'users_count' => (int) $location->users_count,
|
||||
'currency' => ($location->currency) ? e($location->currency) : null,
|
||||
'ldap_ou' => ($location->ldap_ou) ? e($location->ldap_ou) : null,
|
||||
'notes' => Helper::parseEscapedMarkedownInline($location->notes),
|
||||
'created_at' => Helper::getFormattedDateObject($location->created_at, 'datetime'),
|
||||
'updated_at' => Helper::getFormattedDateObject($location->updated_at, 'datetime'),
|
||||
'parent' => ($location->parent) ? [
|
||||
|
||||
@@ -37,6 +37,7 @@ class ManufacturersTransformer
|
||||
'consumables_count' => (int) $manufacturer->consumables_count,
|
||||
'accessories_count' => (int) $manufacturer->accessories_count,
|
||||
'components_count' => (int) $manufacturer->components_count,
|
||||
'notes' => Helper::parseEscapedMarkedownInline($manufacturer->notes),
|
||||
'created_by' => ($manufacturer->adminuser) ? [
|
||||
'id' => (int) $manufacturer->adminuser->id,
|
||||
'name'=> e($manufacturer->adminuser->present()->fullName()),
|
||||
|
||||
@@ -74,6 +74,8 @@ class LocationImporter extends ItemImporter
|
||||
$this->item['ldap_ou'] = trim($this->findCsvMatch($row, 'ldap_ou'));
|
||||
$this->item['manager'] = trim($this->findCsvMatch($row, 'manager'));
|
||||
$this->item['manager_username'] = trim($this->findCsvMatch($row, 'manager_username'));
|
||||
$this->item['notes'] = trim($this->findCsvMatch($row, 'notes'));
|
||||
|
||||
|
||||
if ($this->findCsvMatch($row, 'parent_location')) {
|
||||
$this->item['parent_id'] = $this->createOrFetchLocation(trim($this->findCsvMatch($row, 'parent_location')));
|
||||
|
||||
@@ -106,7 +106,13 @@ class CheckoutableListener
|
||||
}
|
||||
}
|
||||
} catch (ClientException $e) {
|
||||
Log::error("ClientException caught during checkin notification: " . $e->getMessage());
|
||||
if (strpos($e->getMessage(), 'channel_not_found') !== false) {
|
||||
Log::warning(Setting::getSettings()->webhook_selected." notification failed: " . $e->getMessage());
|
||||
return redirect()->back()->with('warning', ucfirst(Setting::getSettings()->webhook_selected) .trans('admin/settings/message.webhook.webhook_channel_not_found') );
|
||||
}
|
||||
else {
|
||||
Log::error("ClientException caught during checkin notification: " . $e->getMessage());
|
||||
}
|
||||
return redirect()->back()->with('warning', ucfirst(Setting::getSettings()->webhook_selected) .trans('admin/settings/message.webhook.webhook_fail') );
|
||||
} catch (Exception $e) {
|
||||
Log::error(ucfirst(Setting::getSettings()->webhook_selected) . ' webhook notification failed:', [
|
||||
@@ -156,7 +162,7 @@ class CheckoutableListener
|
||||
$ccEmails = array_filter($adminCcEmailsArray);
|
||||
$mailable = $this->getCheckinMailType($event);
|
||||
$notifiable = $this->getNotifiables($event);
|
||||
if ($event->checkedOutTo->locale){
|
||||
if ($event->checkedOutTo?->locale) {
|
||||
$mailable->locale($event->checkedOutTo->locale);
|
||||
}
|
||||
// Send email notifications
|
||||
@@ -196,8 +202,14 @@ class CheckoutableListener
|
||||
}
|
||||
}
|
||||
} catch (ClientException $e) {
|
||||
Log::error("ClientException caught during checkin notification: " . $e->getMessage());
|
||||
return redirect()->back()->with('warning', ucfirst(Setting::getSettings()->webhook_selected) .trans('admin/settings/message.webhook.webhook_fail'));
|
||||
if (strpos($e->getMessage(), 'channel_not_found') !== false) {
|
||||
Log::warning(Setting::getSettings()->webhook_selected." notification failed: " . $e->getMessage());
|
||||
return redirect()->back()->with('warning', ucfirst(Setting::getSettings()->webhook_selected) .trans('admin/settings/message.webhook.webhook_channel_not_found') );
|
||||
}
|
||||
else {
|
||||
Log::error("ClientException caught during checkin notification: " . $e->getMessage());
|
||||
return redirect()->back()->with('warning', ucfirst(Setting::getSettings()->webhook_selected) . trans('admin/settings/message.webhook.webhook_fail'));
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
Log::error(ucfirst(Setting::getSettings()->webhook_selected) . ' webhook notification failed:', [
|
||||
'error' => $e->getMessage(),
|
||||
|
||||
@@ -342,6 +342,7 @@ class Importer extends Component
|
||||
'manager_username' => trans('general.importer.manager_username'),
|
||||
'manager' => trans('general.importer.manager_full_name'),
|
||||
'parent_location' => trans('admin/locations/table.parent'),
|
||||
'notes' => trans('general.notes'),
|
||||
];
|
||||
|
||||
$this->assetmodels_fields = [
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Mail\Mailables\Address;
|
||||
use Illuminate\Mail\Mailables\Content;
|
||||
use Illuminate\Mail\Mailables\Envelope;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class ExpiringAssetsMail extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*/
|
||||
public function __construct($params, $threshold)
|
||||
{
|
||||
$this->assets = $params;
|
||||
$this->threshold = $threshold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message envelope.
|
||||
*/
|
||||
public function envelope(): Envelope
|
||||
{
|
||||
$from = new Address(config('mail.from.address'), config('mail.from.name'));
|
||||
|
||||
return new Envelope(
|
||||
from: $from,
|
||||
subject: trans('mail.Expiring_Assets_Report'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message content definition.
|
||||
*/
|
||||
public function content(): Content
|
||||
{
|
||||
return new Content(
|
||||
markdown: 'notifications.markdown.report-expiring-assets',
|
||||
with: [
|
||||
'assets' => $this->assets,
|
||||
'threshold' => $this->threshold,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the attachments for the message.
|
||||
*
|
||||
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
|
||||
*/
|
||||
public function attachments(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Mail\Mailables\Address;
|
||||
use Illuminate\Mail\Mailables\Content;
|
||||
use Illuminate\Mail\Mailables\Envelope;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class ExpiringLicenseMail extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*/
|
||||
public function __construct($params, $threshold)
|
||||
{
|
||||
$this->licenses = $params;
|
||||
$this->threshold = $threshold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message envelope.
|
||||
*/
|
||||
public function envelope(): Envelope
|
||||
{
|
||||
$from = new Address(config('mail.from.address'), config('mail.from.name'));
|
||||
|
||||
return new Envelope(
|
||||
from: $from,
|
||||
subject: trans('mail.Expiring_Licenses_Report'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message content definition.
|
||||
*/
|
||||
public function content(): Content
|
||||
{
|
||||
return new Content(
|
||||
markdown: 'notifications.markdown.report-expiring-licenses',
|
||||
with: [
|
||||
'licenses' => $this->licenses,
|
||||
'threshold' => $this->threshold,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the attachments for the message.
|
||||
*
|
||||
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
|
||||
*/
|
||||
public function attachments(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -71,6 +71,7 @@ class Category extends SnipeModel
|
||||
'require_acceptance',
|
||||
'use_default_eula',
|
||||
'created_by',
|
||||
'notes',
|
||||
];
|
||||
|
||||
use Searchable;
|
||||
@@ -80,7 +81,7 @@ class Category extends SnipeModel
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $searchableAttributes = ['name', 'category_type'];
|
||||
protected $searchableAttributes = ['name', 'category_type', 'notes'];
|
||||
|
||||
/**
|
||||
* The relations and their attributes that should be included when searching the model.
|
||||
|
||||
@@ -307,7 +307,7 @@ class CustomField extends Model
|
||||
public function formatFieldValuesAsArray()
|
||||
{
|
||||
$result = [];
|
||||
$arr = preg_split('/\\r\\n|\\r|\\n/', $this->field_values);
|
||||
$arr = preg_split('/\\r\\n|\\r|\\n/', $this->field_values ?? '');
|
||||
|
||||
if (($this->element != 'checkbox') && ($this->element != 'radio')) {
|
||||
$result[''] = 'Select '.strtolower($this->format);
|
||||
|
||||
@@ -18,7 +18,8 @@ class Group extends SnipeModel
|
||||
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'permissions'
|
||||
'permissions',
|
||||
'notes',
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -37,7 +38,7 @@ class Group extends SnipeModel
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $searchableAttributes = ['name', 'created_at'];
|
||||
protected $searchableAttributes = ['name', 'created_at', 'notes'];
|
||||
|
||||
/**
|
||||
* The relations and their attributes that should be included when searching the model.
|
||||
|
||||
@@ -411,14 +411,14 @@ abstract class Label
|
||||
/**
|
||||
* Checks the template is internally valid
|
||||
*/
|
||||
public final function validate() {
|
||||
public final function validate() : void {
|
||||
$this->validateUnits();
|
||||
$this->validateSize();
|
||||
$this->validateMargins();
|
||||
$this->validateSupport();
|
||||
}
|
||||
|
||||
private function validateUnits() {
|
||||
private function validateUnits() : void {
|
||||
$validUnits = [ 'pt', 'mm', 'cm', 'in' ];
|
||||
$unit = $this->getUnit();
|
||||
if (!in_array(strtolower($unit), $validUnits)) {
|
||||
@@ -430,7 +430,7 @@ abstract class Label
|
||||
}
|
||||
}
|
||||
|
||||
private function validateSize() {
|
||||
private function validateSize() : void {
|
||||
$width = $this->getWidth();
|
||||
if (!is_numeric($width) || is_string($width)) {
|
||||
throw new \UnexpectedValueException(trans('admin/labels/message.invalid_return_type', [
|
||||
@@ -450,7 +450,7 @@ abstract class Label
|
||||
}
|
||||
}
|
||||
|
||||
private function validateMargins() {
|
||||
private function validateMargins() : void {
|
||||
$marginTop = $this->getMarginTop();
|
||||
if (!is_numeric($marginTop) || is_string($marginTop)) {
|
||||
throw new \UnexpectedValueException(trans('admin/labels/message.invalid_return_type', [
|
||||
@@ -488,7 +488,7 @@ abstract class Label
|
||||
}
|
||||
}
|
||||
|
||||
private function validateSupport() {
|
||||
private function validateSupport() : void {
|
||||
$support1D = $this->getSupport1DBarcode();
|
||||
if (!is_bool($support1D)) {
|
||||
throw new \UnexpectedValueException(trans('admin/labels/message.invalid_return_type', [
|
||||
|
||||
@@ -72,6 +72,7 @@ class Location extends SnipeModel
|
||||
'currency',
|
||||
'manager_id',
|
||||
'image',
|
||||
'notes',
|
||||
];
|
||||
protected $hidden = ['user_id'];
|
||||
|
||||
@@ -82,7 +83,7 @@ class Location extends SnipeModel
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $searchableAttributes = ['name', 'address', 'city', 'state', 'zip', 'created_at', 'ldap_ou', 'phone', 'fax'];
|
||||
protected $searchableAttributes = ['name', 'address', 'city', 'state', 'zip', 'created_at', 'ldap_ou', 'phone', 'fax', 'notes'];
|
||||
|
||||
/**
|
||||
* The relations and their attributes that should be included when searching the model.
|
||||
|
||||
@@ -53,6 +53,7 @@ class Manufacturer extends SnipeModel
|
||||
'support_url',
|
||||
'url',
|
||||
'warranty_lookup_url',
|
||||
'notes',
|
||||
];
|
||||
|
||||
use Searchable;
|
||||
@@ -62,7 +63,7 @@ class Manufacturer extends SnipeModel
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $searchableAttributes = ['name', 'created_at'];
|
||||
protected $searchableAttributes = ['name', 'created_at', 'notes'];
|
||||
|
||||
/**
|
||||
* The relations and their attributes that should be included when searching the model.
|
||||
|
||||
+30
-31
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
@@ -339,6 +340,33 @@ class Setting extends Model
|
||||
return collect($ldapSettings);
|
||||
}
|
||||
|
||||
/**
|
||||
* For a particular cache-file, refresh it if the settings have
|
||||
* been updated more recently than the file. Then return the
|
||||
* full filepath
|
||||
*/
|
||||
public static function get_fresh_file_path($attribute, $path)
|
||||
{
|
||||
$full_path = storage_path().'/'.$path;
|
||||
$file_exists = file_exists($full_path);
|
||||
if ($file_exists) {
|
||||
$statblock = stat($full_path);
|
||||
}
|
||||
if (!$file_exists || Carbon::createFromTimestamp($statblock['mtime']) < Setting::getSettings()->updated_at) {
|
||||
if (Setting::getSettings()->{$attribute}) {
|
||||
file_put_contents($full_path, Setting::getSettings()->{$attribute});
|
||||
} else {
|
||||
//this doesn't fire when you might expect it to because a lot of the time we do something like:
|
||||
// if ($settings->ldap_client_tls_cert && ...
|
||||
// so we never get a chance to 'uncache' the file.
|
||||
if ($file_exists) {
|
||||
unlink($full_path);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $full_path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the filename for the client-side SSL cert
|
||||
*
|
||||
@@ -346,7 +374,7 @@ class Setting extends Model
|
||||
*/
|
||||
public static function get_client_side_cert_path()
|
||||
{
|
||||
return storage_path().'/ldap_client_tls.cert';
|
||||
return self::get_fresh_file_path('ldap_client_tls_cert', 'ldap_client_tls.cert');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -356,36 +384,7 @@ class Setting extends Model
|
||||
*/
|
||||
public static function get_client_side_key_path()
|
||||
{
|
||||
return storage_path().'/ldap_client_tls.key';
|
||||
return self::get_fresh_file_path('ldap_client_tls_key', 'ldap_client_tls.key');
|
||||
}
|
||||
|
||||
public function update_client_side_cert_files()
|
||||
{
|
||||
/**
|
||||
* I'm not sure if it makes sense to have a cert but no key
|
||||
* nor vice versa, but for now I'm just leaving it like this.
|
||||
*
|
||||
* Also, we could easily set this up with an event handler and
|
||||
* self::saved() or something like that but there's literally only
|
||||
* one place where we will do that, so I'll just explicitly call
|
||||
* this method at that spot instead. It'll be easier to debug and understand.
|
||||
*/
|
||||
if ($this->ldap_client_tls_cert) {
|
||||
file_put_contents(self::get_client_side_cert_path(), $this->ldap_client_tls_cert);
|
||||
} else {
|
||||
if (file_exists(self::get_client_side_cert_path())) {
|
||||
unlink(self::get_client_side_cert_path());
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->ldap_client_tls_key) {
|
||||
file_put_contents(self::get_client_side_key_path(), $this->ldap_client_tls_key);
|
||||
} else {
|
||||
if (file_exists(self::get_client_side_key_path())) {
|
||||
unlink(self::get_client_side_key_path());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -626,6 +626,8 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
|
||||
$username = str_slug(substr($first_name, 0, 1).'.'.str_slug($last_name));
|
||||
} elseif ($format == 'lastname_firstinitial') {
|
||||
$username = str_slug($last_name).'_'.str_slug(substr($first_name, 0, 1));
|
||||
} elseif ($format == 'lastname.firstinitial') {
|
||||
$username = str_slug($last_name).'.'.str_slug(substr($first_name, 0, 1));
|
||||
} elseif ($format == 'firstnamelastname') {
|
||||
$username = str_slug($first_name).str_slug($last_name);
|
||||
} elseif ($format == 'firstnamelastinitial') {
|
||||
|
||||
@@ -79,7 +79,7 @@ class CheckinAssetNotification extends Notification
|
||||
|
||||
$fields = [
|
||||
trans('general.administrator') => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>',
|
||||
trans('general.status') => $item->assetstatus->name,
|
||||
trans('general.status') => $item->assetstatus?->name,
|
||||
trans('general.location') => ($item->location) ? $item->location->name : '',
|
||||
];
|
||||
|
||||
@@ -106,9 +106,9 @@ class CheckinAssetNotification extends Notification
|
||||
->title(trans('mail.Asset_Checkin_Notification'))
|
||||
->addStartGroupToSection('activityText')
|
||||
->fact(htmlspecialchars_decode($item->present()->name), '', 'activityText')
|
||||
->fact(trans('mail.checked_into'), $item->location->name ? $item->location->name : '')
|
||||
->fact(trans('mail.checked_into'), ($item->location) ? $item->location->name : '')
|
||||
->fact(trans('mail.Asset_Checkin_Notification') . " by ", $admin->present()->fullName())
|
||||
->fact(trans('admin/hardware/form.status'), $item->assetstatus->name)
|
||||
->fact(trans('admin/hardware/form.status'), $item->assetstatus?->name)
|
||||
->fact(trans('mail.notes'), $note ?: '');
|
||||
}
|
||||
|
||||
@@ -116,9 +116,9 @@ class CheckinAssetNotification extends Notification
|
||||
$message = trans('mail.Asset_Checkin_Notification');
|
||||
$details = [
|
||||
trans('mail.asset') => htmlspecialchars_decode($item->present()->name),
|
||||
trans('mail.checked_into') => $item->location->name ? $item->location->name : '',
|
||||
trans('mail.checked_into') => ($item->location) ? $item->location->name : '',
|
||||
trans('mail.Asset_Checkin_Notification')." by " => $admin->present()->fullName(),
|
||||
trans('admin/hardware/form.status') => $item->assetstatus->name,
|
||||
trans('admin/hardware/form.status') => $item->assetstatus?->name,
|
||||
trans('mail.notes') => $note ?: '',
|
||||
];
|
||||
|
||||
@@ -142,8 +142,8 @@ class CheckinAssetNotification extends Notification
|
||||
Section::create(
|
||||
KeyValue::create(
|
||||
trans('mail.checked_into') ?: '',
|
||||
$item->location->name ? $item->location->name : '',
|
||||
trans('admin/hardware/form.status').": ".$item->assetstatus->name,
|
||||
($item->location) ? $item->location->name : '',
|
||||
trans('admin/hardware/form.status').": ".$item->assetstatus?->name,
|
||||
)
|
||||
->onClick(route('hardware.show', $item->id))
|
||||
)
|
||||
|
||||
@@ -48,7 +48,7 @@ class AssetObserver
|
||||
$changed = [];
|
||||
|
||||
foreach ($asset->getRawOriginal() as $key => $value) {
|
||||
if ($asset->getRawOriginal()[$key] != $asset->getAttributes()[$key]) {
|
||||
if ((array_key_exists($key, $asset->getAttributes())) && ($asset->getRawOriginal()[$key] != $asset->getAttributes()[$key])) {
|
||||
$changed[$key]['old'] = $asset->getRawOriginal()[$key];
|
||||
$changed[$key]['new'] = $asset->getAttributes()[$key];
|
||||
}
|
||||
|
||||
@@ -77,7 +77,13 @@ class CategoryPresenter extends Presenter
|
||||
"title" => trans('admin/categories/general.use_default_eula_column'),
|
||||
'visible' => true,
|
||||
"formatter" => 'trueFalseFormatter',
|
||||
],[
|
||||
], [
|
||||
'field' => 'notes',
|
||||
'searchable' => true,
|
||||
'sortable' => true,
|
||||
'visible' => false,
|
||||
'title' => trans('general.notes'),
|
||||
], [
|
||||
'field' => 'created_by',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
|
||||
@@ -105,7 +105,13 @@ class CompanyPresenter extends Presenter
|
||||
'title' => trans('general.components'),
|
||||
'visible' => true,
|
||||
'class' => 'css-component',
|
||||
],[
|
||||
], [
|
||||
'field' => 'notes',
|
||||
'searchable' => true,
|
||||
'sortable' => true,
|
||||
'visible' => false,
|
||||
'title' => trans('general.notes'),
|
||||
], [
|
||||
'field' => 'created_by',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
|
||||
@@ -184,6 +184,12 @@ class LocationPresenter extends Presenter
|
||||
'title' => trans('admin/users/table.manager'),
|
||||
'visible' => false,
|
||||
'formatter' => 'usersLinkObjFormatter',
|
||||
], [
|
||||
'field' => 'notes',
|
||||
'searchable' => true,
|
||||
'sortable' => true,
|
||||
'visible' => false,
|
||||
'title' => trans('general.notes'),
|
||||
], [
|
||||
'field' => 'created_at',
|
||||
'searchable' => true,
|
||||
|
||||
@@ -209,7 +209,7 @@ class Saml
|
||||
}
|
||||
}
|
||||
|
||||
$custom_settings = preg_split('/\r\n|\r|\n/', $setting->saml_custom_settings);
|
||||
$custom_settings = preg_split('/\r\n|\r|\n/', $setting->saml_custom_settings ?? '');
|
||||
if ($custom_settings) {
|
||||
foreach ($custom_settings as $custom_setting) {
|
||||
$split = explode('=', $custom_setting, 2);
|
||||
|
||||
@@ -26,17 +26,19 @@ class SnipeTranslator extends Translator {
|
||||
public function choice($key, $number, array $replace = [], $locale = null)
|
||||
{
|
||||
$line = $this->get(
|
||||
$key, $replace, $locale = $this->localeForChoice($locale)
|
||||
$key, [], $locale = $this->localeForChoice($key, $locale)
|
||||
);
|
||||
|
||||
// If the given "number" is actually an array or countable we will simply count the
|
||||
// number of elements in an instance. This allows developers to pass an array of
|
||||
// items without having to count it on their end first which gives bad syntax.
|
||||
if (is_array($number) || $number instanceof Countable) {
|
||||
if (is_countable($number)) {
|
||||
$number = count($number);
|
||||
}
|
||||
|
||||
$replace['count'] = $number;
|
||||
if (!isset($replace['count'])) {
|
||||
$replace['count'] = $number;
|
||||
}
|
||||
|
||||
$underscored_locale = str_replace("-","_",$locale); // OUR CHANGE.
|
||||
return $this->makeReplacements( // BELOW - that $underscored_locale is the *ONLY* modified part
|
||||
|
||||
+10
-6
@@ -7,6 +7,7 @@ use App\Models\Labels\Label as LabelModel;
|
||||
use App\Models\Labels\Sheet;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Traits\Macroable;
|
||||
use TCPDF;
|
||||
@@ -38,7 +39,7 @@ class Label implements View
|
||||
$settings = $this->data->get('settings');
|
||||
$assets = $this->data->get('assets');
|
||||
$offset = $this->data->get('offset');
|
||||
$template = LabelModel::find($settings->label2_template);
|
||||
|
||||
|
||||
// If disabled, pass to legacy view
|
||||
if ((!$settings->label2_enable)) {
|
||||
@@ -49,6 +50,12 @@ class Label implements View
|
||||
->with('count', $this->data->get('count'));
|
||||
}
|
||||
|
||||
$template = LabelModel::find($settings->label2_template);
|
||||
|
||||
if ($template === null) {
|
||||
return redirect()->route('settings.labels.index')->with('error', trans('admin/settings/message.labels.null_template'));
|
||||
}
|
||||
|
||||
$template->validate();
|
||||
|
||||
$pdf = new TCPDF(
|
||||
@@ -116,12 +123,9 @@ class Label implements View
|
||||
}
|
||||
}
|
||||
|
||||
if ($template->getSupport2DBarcode()) {
|
||||
if ($template->getSupport2DBarcode()) {
|
||||
$barcode2DType = $settings->label2_2d_type;
|
||||
$barcode2DType = ($barcode2DType == 'default') ?
|
||||
$settings->barcode_type :
|
||||
$barcode2DType;
|
||||
if (($barcode2DType != 'none') && (!is_null($barcode2DType))) {
|
||||
if (($barcode2DType != 'none') && (!is_null($barcode2DType))) {
|
||||
switch ($settings->label2_2d_target) {
|
||||
case 'ht_tag':
|
||||
$barcode2DTarget = route('ht/assetTag', $asset->asset_tag);
|
||||
|
||||
+13
-10
@@ -14,10 +14,14 @@
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/grokability/laravel-scim-server"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/grokability/html"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
"php": "^8.2",
|
||||
"ext-curl": "*",
|
||||
"ext-fileinfo": "*",
|
||||
"ext-iconv": "*",
|
||||
@@ -25,7 +29,7 @@
|
||||
"ext-mbstring": "*",
|
||||
"ext-pdo": "*",
|
||||
"alek13/slack": "^2.0",
|
||||
"arietimmerman/laravel-scim-server": "dev-master",
|
||||
"arietimmerman/laravel-scim-server": "dev-laravel_11_compatibility",
|
||||
"bacon/bacon-qr-code": "^2.0",
|
||||
"barryvdh/laravel-debugbar": "^3.13",
|
||||
"barryvdh/laravel-dompdf": "^2.0",
|
||||
@@ -40,20 +44,20 @@
|
||||
"javiereguiluz/easyslugger": "^1.0",
|
||||
"laravel-notification-channels/google-chat": "^3.0",
|
||||
"laravel-notification-channels/microsoft-teams": "^1.2",
|
||||
"laravel/framework": "^10.0",
|
||||
"laravel/framework": "^11.0",
|
||||
"laravel/helpers": "^1.4",
|
||||
"laravel/passport": "^11.0",
|
||||
"laravel/slack-notification-channel": "^2.3",
|
||||
"laravel/passport": "^12.0",
|
||||
"laravel/slack-notification-channel": "^3.4",
|
||||
"laravel/socialite": "^5.6",
|
||||
"laravel/tinker": "^2.6",
|
||||
"laravel/ui": "^4.0",
|
||||
"laravelcollective/html": "^6.2",
|
||||
"laravelcollective/html": "6.x-dev",
|
||||
"league/csv": "^9.7",
|
||||
"league/flysystem-aws-s3-v3": "^3.0",
|
||||
"livewire/livewire": "^3.5",
|
||||
"neitanod/forceutf8": "^2.0",
|
||||
"nesbot/carbon": "^2.32",
|
||||
"nunomaduro/collision": "^7.0",
|
||||
"nesbot/carbon": "^3.0",
|
||||
"nunomaduro/collision": "^8.1",
|
||||
"okvpn/clock-lts": "^1.0",
|
||||
"onelogin/php-saml": "^3.4",
|
||||
"onnov/detect-encoding": "^2.0",
|
||||
@@ -85,8 +89,7 @@
|
||||
"phpunit/phpunit": "^10.0",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"symfony/css-selector": "^4.4",
|
||||
"symfony/dom-crawler": "^4.4",
|
||||
"vimeo/psalm": "^5.13"
|
||||
"symfony/dom-crawler": "^4.4"
|
||||
},
|
||||
"extra": {
|
||||
"laravel": {
|
||||
|
||||
Generated
+1060
-1526
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -172,7 +172,7 @@ return [
|
||||
| More info: https://bootstrap-table.com/docs/extensions/cookie/#cookiestorage
|
||||
*/
|
||||
|
||||
'bs_table_storage' => env('BS_TABLE_STORAGE', 'cookieStorage'),
|
||||
'bs_table_storage' => env('BS_TABLE_STORAGE', 'localStorage'),
|
||||
|
||||
|
||||
/*
|
||||
|
||||
+1
-1
@@ -6,5 +6,5 @@ return array (
|
||||
'prerelease_version' => '',
|
||||
'hash_version' => 'gfb857ccf5',
|
||||
'full_hash' => 'v7.1.16-510-gfb857ccf5',
|
||||
'branch' => 'master',
|
||||
'branch' => 'develop',
|
||||
);
|
||||
@@ -30,6 +30,7 @@ class CategoryFactory extends Factory
|
||||
'require_acceptance' => false,
|
||||
'use_default_eula' => $this->faker->boolean(),
|
||||
'created_by' => User::factory()->superuser(),
|
||||
'notes' => 'Created by DB seeder',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ class CompanyFactory extends Factory
|
||||
return [
|
||||
'name' => $this->faker->unique()->company(),
|
||||
'created_by' => 1,
|
||||
'notes' => 'Created by DB seeder',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ class DepartmentFactory extends Factory
|
||||
'name' => $this->faker->unique()->word() . ' Department',
|
||||
'created_by' => User::factory()->superuser(),
|
||||
'location_id' => Location::factory(),
|
||||
'notes' => 'Created by DB seeder',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ class GroupFactory extends Factory
|
||||
return [
|
||||
'name' => $this->faker->name(),
|
||||
'permissions' => json_encode([]),
|
||||
'notes' => 'Created by DB seeder',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ class LocationFactory extends Factory
|
||||
'currency' => $this->faker->currencyCode(),
|
||||
'zip' => $this->faker->postcode(),
|
||||
'image' => rand(1, 9).'.jpg',
|
||||
'notes' => 'Created by DB seeder',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ class ManufacturerFactory extends Factory
|
||||
'support_phone' => $this->faker->phoneNumber(),
|
||||
'url' => $this->faker->url(),
|
||||
'support_email' => $this->faker->safeEmail(),
|
||||
'notes' => 'Created by DB seeder',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('locations', function (Blueprint $table) {
|
||||
$table->text('notes')->nullable()->default(null);
|
||||
});
|
||||
|
||||
Schema::table('companies', function (Blueprint $table) {
|
||||
$table->text('notes')->nullable()->default(null);
|
||||
});
|
||||
|
||||
Schema::table('categories', function (Blueprint $table) {
|
||||
$table->text('notes')->nullable()->default(null);
|
||||
});
|
||||
|
||||
Schema::table('manufacturers', function (Blueprint $table) {
|
||||
$table->text('notes')->nullable()->default(null);
|
||||
});
|
||||
|
||||
Schema::table('permission_groups', function (Blueprint $table) {
|
||||
$table->text('notes')->nullable()->default(null);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('locations', function (Blueprint $table) {
|
||||
$table->dropColumn('notes');
|
||||
});
|
||||
|
||||
Schema::table('companies', function (Blueprint $table) {
|
||||
$table->dropColumn('notes');
|
||||
});
|
||||
|
||||
Schema::table('categories', function (Blueprint $table) {
|
||||
$table->dropColumn('notes');
|
||||
});
|
||||
|
||||
Schema::table('manufacturers', function (Blueprint $table) {
|
||||
$table->dropColumn('notes');
|
||||
});
|
||||
|
||||
Schema::table('permission_groups', function (Blueprint $table) {
|
||||
$table->dropColumn('notes');
|
||||
});
|
||||
}
|
||||
};
|
||||
Generated
+4
-4
@@ -31,7 +31,7 @@
|
||||
"less-loader": "^6.0",
|
||||
"list.js": "^1.5.0",
|
||||
"morris.js": "github:morrisjs/morris.js",
|
||||
"papaparse": "5.4.1",
|
||||
"papaparse": "5.5.1",
|
||||
"select2": "4.0.13",
|
||||
"sheetjs": "^2.0.0",
|
||||
"signature_pad": "^4.2.0",
|
||||
@@ -8368,9 +8368,9 @@
|
||||
"license": "(MIT AND Zlib)"
|
||||
},
|
||||
"node_modules/papaparse": {
|
||||
"version": "5.4.1",
|
||||
"resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz",
|
||||
"integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw=="
|
||||
"version": "5.5.1",
|
||||
"resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.1.tgz",
|
||||
"integrity": "sha512-EuEKUhyxrHVozD7g3/ztsJn6qaKse8RPfR6buNB2dMJvdtXNhcw8jccVi/LxNEY3HVrV6GO6Z4OoeCG9Iy9wpA=="
|
||||
},
|
||||
"node_modules/param-case": {
|
||||
"version": "3.0.4",
|
||||
|
||||
+1
-1
@@ -51,7 +51,7 @@
|
||||
"less-loader": "^6.0",
|
||||
"list.js": "^1.5.0",
|
||||
"morris.js": "github:morrisjs/morris.js",
|
||||
"papaparse": "5.4.1",
|
||||
"papaparse": "5.5.1",
|
||||
"select2": "4.0.13",
|
||||
"sheetjs": "^2.0.0",
|
||||
"signature_pad": "^4.2.0",
|
||||
|
||||
+210
-105
@@ -1483,7 +1483,7 @@ var require_module_cjs = __commonJS({
|
||||
deferredMutations = deferredMutations.concat(mutations);
|
||||
return;
|
||||
}
|
||||
let addedNodes = /* @__PURE__ */ new Set();
|
||||
let addedNodes = [];
|
||||
let removedNodes = /* @__PURE__ */ new Set();
|
||||
let addedAttributes = /* @__PURE__ */ new Map();
|
||||
let removedAttributes = /* @__PURE__ */ new Map();
|
||||
@@ -1491,8 +1491,24 @@ var require_module_cjs = __commonJS({
|
||||
if (mutations[i].target._x_ignoreMutationObserver)
|
||||
continue;
|
||||
if (mutations[i].type === "childList") {
|
||||
mutations[i].addedNodes.forEach((node) => node.nodeType === 1 && addedNodes.add(node));
|
||||
mutations[i].removedNodes.forEach((node) => node.nodeType === 1 && removedNodes.add(node));
|
||||
mutations[i].removedNodes.forEach((node) => {
|
||||
if (node.nodeType !== 1)
|
||||
return;
|
||||
if (!node._x_marker)
|
||||
return;
|
||||
removedNodes.add(node);
|
||||
});
|
||||
mutations[i].addedNodes.forEach((node) => {
|
||||
if (node.nodeType !== 1)
|
||||
return;
|
||||
if (removedNodes.has(node)) {
|
||||
removedNodes.delete(node);
|
||||
return;
|
||||
}
|
||||
if (node._x_marker)
|
||||
return;
|
||||
addedNodes.push(node);
|
||||
});
|
||||
}
|
||||
if (mutations[i].type === "attributes") {
|
||||
let el = mutations[i].target;
|
||||
@@ -1525,29 +1541,15 @@ var require_module_cjs = __commonJS({
|
||||
onAttributeAddeds.forEach((i) => i(el, attrs));
|
||||
});
|
||||
for (let node of removedNodes) {
|
||||
if (addedNodes.has(node))
|
||||
if (addedNodes.some((i) => i.contains(node)))
|
||||
continue;
|
||||
onElRemoveds.forEach((i) => i(node));
|
||||
}
|
||||
addedNodes.forEach((node) => {
|
||||
node._x_ignoreSelf = true;
|
||||
node._x_ignore = true;
|
||||
});
|
||||
for (let node of addedNodes) {
|
||||
if (removedNodes.has(node))
|
||||
continue;
|
||||
if (!node.isConnected)
|
||||
continue;
|
||||
delete node._x_ignoreSelf;
|
||||
delete node._x_ignore;
|
||||
onElAddeds.forEach((i) => i(node));
|
||||
node._x_ignore = true;
|
||||
node._x_ignoreSelf = true;
|
||||
}
|
||||
addedNodes.forEach((node) => {
|
||||
delete node._x_ignoreSelf;
|
||||
delete node._x_ignore;
|
||||
});
|
||||
addedNodes = null;
|
||||
removedNodes = null;
|
||||
addedAttributes = null;
|
||||
@@ -2050,13 +2052,20 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
function interceptInit(callback) {
|
||||
initInterceptors2.push(callback);
|
||||
}
|
||||
var markerDispenser = 1;
|
||||
function initTree(el, walker = walk, intercept = () => {
|
||||
}) {
|
||||
if (findClosest(el, (i) => i._x_ignore))
|
||||
return;
|
||||
deferHandlingDirectives(() => {
|
||||
walker(el, (el2, skip) => {
|
||||
if (el2._x_marker)
|
||||
return;
|
||||
intercept(el2, skip);
|
||||
initInterceptors2.forEach((i) => i(el2, skip));
|
||||
directives(el2, el2.attributes).forEach((handle) => handle());
|
||||
if (!el2._x_ignore)
|
||||
el2._x_marker = markerDispenser++;
|
||||
el2._x_ignore && skip();
|
||||
});
|
||||
});
|
||||
@@ -2065,6 +2074,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
walker(root, (el) => {
|
||||
cleanupElement(el);
|
||||
cleanupAttributes(el);
|
||||
delete el._x_marker;
|
||||
});
|
||||
}
|
||||
function warnAboutMissingPlugins() {
|
||||
@@ -2853,7 +2863,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
});
|
||||
return obj;
|
||||
}
|
||||
var Alpine19 = {
|
||||
var Alpine20 = {
|
||||
get reactive() {
|
||||
return reactive;
|
||||
},
|
||||
@@ -2866,7 +2876,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
get raw() {
|
||||
return raw;
|
||||
},
|
||||
version: "3.14.3",
|
||||
version: "3.14.8",
|
||||
flushAndStopDeferringMutations,
|
||||
dontAutoEvaluateFunctions,
|
||||
disableEffectScheduling,
|
||||
@@ -2919,7 +2929,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
data,
|
||||
bind: bind2
|
||||
};
|
||||
var alpine_default = Alpine19;
|
||||
var alpine_default = Alpine20;
|
||||
var import_reactivity10 = __toESM2(require_reactivity());
|
||||
magic("nextTick", () => nextTick);
|
||||
magic("dispatch", (el) => dispatch3.bind(dispatch3, el));
|
||||
@@ -3066,7 +3076,6 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
placeInDom(clone2, target, modifiers);
|
||||
skipDuringClone(() => {
|
||||
initTree(clone2);
|
||||
clone2._x_ignore = true;
|
||||
})();
|
||||
});
|
||||
el._x_teleportPutBack = () => {
|
||||
@@ -3822,9 +3831,9 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
}
|
||||
});
|
||||
|
||||
// ../../../../usr/local/lib/node_modules/@alpinejs/collapse/dist/module.cjs.js
|
||||
// ../alpine/packages/collapse/dist/module.cjs.js
|
||||
var require_module_cjs2 = __commonJS({
|
||||
"../../../../usr/local/lib/node_modules/@alpinejs/collapse/dist/module.cjs.js"(exports, module) {
|
||||
"../alpine/packages/collapse/dist/module.cjs.js"(exports, module) {
|
||||
var __defProp2 = Object.defineProperty;
|
||||
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
||||
@@ -3848,8 +3857,8 @@ var require_module_cjs2 = __commonJS({
|
||||
default: () => module_default
|
||||
});
|
||||
module.exports = __toCommonJS(module_exports);
|
||||
function src_default(Alpine19) {
|
||||
Alpine19.directive("collapse", collapse3);
|
||||
function src_default(Alpine20) {
|
||||
Alpine20.directive("collapse", collapse3);
|
||||
collapse3.inline = (el, { modifiers }) => {
|
||||
if (!modifiers.includes("min"))
|
||||
return;
|
||||
@@ -3869,7 +3878,7 @@ var require_module_cjs2 = __commonJS({
|
||||
if (!el._x_isShown)
|
||||
el.style.overflow = "hidden";
|
||||
let setFunction = (el2, styles) => {
|
||||
let revertFunction = Alpine19.setStyles(el2, styles);
|
||||
let revertFunction = Alpine20.setStyles(el2, styles);
|
||||
return styles.height ? () => {
|
||||
} : revertFunction;
|
||||
};
|
||||
@@ -3892,12 +3901,12 @@ var require_module_cjs2 = __commonJS({
|
||||
if (current === full) {
|
||||
current = floor;
|
||||
}
|
||||
Alpine19.transition(el, Alpine19.setStyles, {
|
||||
Alpine20.transition(el, Alpine20.setStyles, {
|
||||
during: transitionStyles,
|
||||
start: { height: current + "px" },
|
||||
end: { height: full + "px" }
|
||||
}, () => el._x_isShown = true, () => {
|
||||
if (el.getBoundingClientRect().height == full) {
|
||||
if (Math.abs(el.getBoundingClientRect().height - full) < 1) {
|
||||
el.style.overflow = null;
|
||||
}
|
||||
});
|
||||
@@ -3906,7 +3915,7 @@ var require_module_cjs2 = __commonJS({
|
||||
}, after = () => {
|
||||
}) {
|
||||
let full = el.getBoundingClientRect().height;
|
||||
Alpine19.transition(el, setFunction, {
|
||||
Alpine20.transition(el, setFunction, {
|
||||
during: transitionStyles,
|
||||
start: { height: full + "px" },
|
||||
end: { height: floor + "px" }
|
||||
@@ -3943,9 +3952,9 @@ var require_module_cjs2 = __commonJS({
|
||||
}
|
||||
});
|
||||
|
||||
// ../../../../usr/local/lib/node_modules/@alpinejs/focus/dist/module.cjs.js
|
||||
// ../alpine/packages/focus/dist/module.cjs.js
|
||||
var require_module_cjs3 = __commonJS({
|
||||
"../../../../usr/local/lib/node_modules/@alpinejs/focus/dist/module.cjs.js"(exports, module) {
|
||||
"../alpine/packages/focus/dist/module.cjs.js"(exports, module) {
|
||||
var __create2 = Object.create;
|
||||
var __defProp2 = Object.defineProperty;
|
||||
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
||||
@@ -4742,14 +4751,14 @@ var require_module_cjs3 = __commonJS({
|
||||
module.exports = __toCommonJS(module_exports);
|
||||
var import_focus_trap = __toESM2(require_focus_trap());
|
||||
var import_tabbable = __toESM2(require_dist());
|
||||
function src_default(Alpine19) {
|
||||
function src_default(Alpine20) {
|
||||
let lastFocused;
|
||||
let currentFocused;
|
||||
window.addEventListener("focusin", () => {
|
||||
lastFocused = currentFocused;
|
||||
currentFocused = document.activeElement;
|
||||
});
|
||||
Alpine19.magic("focus", (el) => {
|
||||
Alpine20.magic("focus", (el) => {
|
||||
let within = el;
|
||||
return {
|
||||
__noscroll: false,
|
||||
@@ -4853,7 +4862,7 @@ var require_module_cjs3 = __commonJS({
|
||||
}
|
||||
};
|
||||
});
|
||||
Alpine19.directive("trap", Alpine19.skipDuringClone((el, { expression, modifiers }, { effect, evaluateLater, cleanup }) => {
|
||||
Alpine20.directive("trap", Alpine20.skipDuringClone((el, { expression, modifiers }, { effect, evaluateLater, cleanup }) => {
|
||||
let evaluator = evaluateLater(expression);
|
||||
let oldValue = false;
|
||||
let options = {
|
||||
@@ -4945,9 +4954,9 @@ var require_module_cjs3 = __commonJS({
|
||||
}
|
||||
});
|
||||
|
||||
// ../../../../usr/local/lib/node_modules/@alpinejs/persist/dist/module.cjs.js
|
||||
// ../alpine/packages/persist/dist/module.cjs.js
|
||||
var require_module_cjs4 = __commonJS({
|
||||
"../../../../usr/local/lib/node_modules/@alpinejs/persist/dist/module.cjs.js"(exports, module) {
|
||||
"../alpine/packages/persist/dist/module.cjs.js"(exports, module) {
|
||||
var __defProp2 = Object.defineProperty;
|
||||
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
||||
@@ -4971,7 +4980,7 @@ var require_module_cjs4 = __commonJS({
|
||||
persist: () => src_default
|
||||
});
|
||||
module.exports = __toCommonJS(module_exports);
|
||||
function src_default(Alpine19) {
|
||||
function src_default(Alpine20) {
|
||||
let persist3 = () => {
|
||||
let alias;
|
||||
let storage;
|
||||
@@ -4986,11 +4995,11 @@ var require_module_cjs4 = __commonJS({
|
||||
setItem: dummy.set.bind(dummy)
|
||||
};
|
||||
}
|
||||
return Alpine19.interceptor((initialValue, getter, setter, path, key) => {
|
||||
return Alpine20.interceptor((initialValue, getter, setter, path, key) => {
|
||||
let lookup = alias || `_x_${path}`;
|
||||
let initial = storageHas(lookup, storage) ? storageGet(lookup, storage) : initialValue;
|
||||
setter(initial);
|
||||
Alpine19.effect(() => {
|
||||
Alpine20.effect(() => {
|
||||
let value = getter();
|
||||
storageSet(lookup, value, storage);
|
||||
setter(value);
|
||||
@@ -5006,12 +5015,12 @@ var require_module_cjs4 = __commonJS({
|
||||
};
|
||||
});
|
||||
};
|
||||
Object.defineProperty(Alpine19, "$persist", { get: () => persist3() });
|
||||
Alpine19.magic("persist", persist3);
|
||||
Alpine19.persist = (key, { get, set }, storage = localStorage) => {
|
||||
Object.defineProperty(Alpine20, "$persist", { get: () => persist3() });
|
||||
Alpine20.magic("persist", persist3);
|
||||
Alpine20.persist = (key, { get, set }, storage = localStorage) => {
|
||||
let initial = storageHas(key, storage) ? storageGet(key, storage) : get();
|
||||
set(initial);
|
||||
Alpine19.effect(() => {
|
||||
Alpine20.effect(() => {
|
||||
let value = get();
|
||||
storageSet(key, value, storage);
|
||||
set(value);
|
||||
@@ -5034,9 +5043,9 @@ var require_module_cjs4 = __commonJS({
|
||||
}
|
||||
});
|
||||
|
||||
// ../../../../usr/local/lib/node_modules/@alpinejs/intersect/dist/module.cjs.js
|
||||
// ../alpine/packages/intersect/dist/module.cjs.js
|
||||
var require_module_cjs5 = __commonJS({
|
||||
"../../../../usr/local/lib/node_modules/@alpinejs/intersect/dist/module.cjs.js"(exports, module) {
|
||||
"../alpine/packages/intersect/dist/module.cjs.js"(exports, module) {
|
||||
var __defProp2 = Object.defineProperty;
|
||||
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
||||
@@ -5060,8 +5069,8 @@ var require_module_cjs5 = __commonJS({
|
||||
intersect: () => src_default
|
||||
});
|
||||
module.exports = __toCommonJS(module_exports);
|
||||
function src_default(Alpine19) {
|
||||
Alpine19.directive("intersect", Alpine19.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
|
||||
function src_default(Alpine20) {
|
||||
Alpine20.directive("intersect", Alpine20.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
|
||||
let evaluate = evaluateLater(expression);
|
||||
let options = {
|
||||
rootMargin: getRootMargin(modifiers),
|
||||
@@ -5142,8 +5151,8 @@ var require_module_cjs6 = __commonJS({
|
||||
resize: () => src_default
|
||||
});
|
||||
module.exports = __toCommonJS(module_exports);
|
||||
function src_default(Alpine19) {
|
||||
Alpine19.directive("resize", Alpine19.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
|
||||
function src_default(Alpine20) {
|
||||
Alpine20.directive("resize", Alpine20.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
|
||||
let evaluator = evaluateLater(expression);
|
||||
let evaluate = (width, height) => {
|
||||
evaluator(() => {
|
||||
@@ -6387,20 +6396,20 @@ var require_module_cjs7 = __commonJS({
|
||||
platform: platformWithCache
|
||||
});
|
||||
};
|
||||
function src_default(Alpine19) {
|
||||
Alpine19.magic("anchor", (el) => {
|
||||
function src_default(Alpine20) {
|
||||
Alpine20.magic("anchor", (el) => {
|
||||
if (!el._x_anchor)
|
||||
throw "Alpine: No x-anchor directive found on element using $anchor...";
|
||||
return el._x_anchor;
|
||||
});
|
||||
Alpine19.interceptClone((from, to) => {
|
||||
Alpine20.interceptClone((from, to) => {
|
||||
if (from && from._x_anchor && !to._x_anchor) {
|
||||
to._x_anchor = from._x_anchor;
|
||||
}
|
||||
});
|
||||
Alpine19.directive("anchor", Alpine19.skipDuringClone((el, { expression, modifiers, value }, { cleanup, evaluate: evaluate2 }) => {
|
||||
Alpine20.directive("anchor", Alpine20.skipDuringClone((el, { expression, modifiers, value }, { cleanup, evaluate: evaluate2 }) => {
|
||||
let { placement, offsetValue, unstyled } = getOptions(modifiers);
|
||||
el._x_anchor = Alpine19.reactive({ x: 0, y: 0 });
|
||||
el._x_anchor = Alpine20.reactive({ x: 0, y: 0 });
|
||||
let reference = evaluate2(expression);
|
||||
if (!reference)
|
||||
throw "Alpine: no element provided to x-anchor...";
|
||||
@@ -6852,6 +6861,7 @@ var require_module_cjs8 = __commonJS({
|
||||
let holdover = fromKeyHoldovers[toKey];
|
||||
from2.appendChild(holdover);
|
||||
currentFrom = holdover;
|
||||
fromKey = getKey(currentFrom);
|
||||
} else {
|
||||
if (!shouldSkip(adding, currentTo)) {
|
||||
let clone = currentTo.cloneNode(true);
|
||||
@@ -6925,6 +6935,7 @@ var require_module_cjs8 = __commonJS({
|
||||
if (fromKeys[toKey]) {
|
||||
currentFrom.replaceWith(fromKeys[toKey]);
|
||||
currentFrom = fromKeys[toKey];
|
||||
fromKey = getKey(currentFrom);
|
||||
}
|
||||
}
|
||||
if (toKey && fromKey) {
|
||||
@@ -6933,6 +6944,7 @@ var require_module_cjs8 = __commonJS({
|
||||
fromKeyHoldovers[fromKey] = currentFrom;
|
||||
currentFrom.replaceWith(fromKeyNode);
|
||||
currentFrom = fromKeyNode;
|
||||
fromKey = getKey(currentFrom);
|
||||
} else {
|
||||
fromKeyHoldovers[fromKey] = currentFrom;
|
||||
currentFrom = addNodeBefore(from2, currentTo, currentFrom);
|
||||
@@ -7078,19 +7090,21 @@ var require_module_cjs8 = __commonJS({
|
||||
let fromId = from && from._x_bindings && from._x_bindings.id;
|
||||
if (!fromId)
|
||||
return;
|
||||
if (!to.setAttribute)
|
||||
return;
|
||||
to.setAttribute("id", fromId);
|
||||
to.id = fromId;
|
||||
}
|
||||
function src_default(Alpine19) {
|
||||
Alpine19.morph = morph3;
|
||||
function src_default(Alpine20) {
|
||||
Alpine20.morph = morph3;
|
||||
}
|
||||
var module_default = src_default;
|
||||
}
|
||||
});
|
||||
|
||||
// ../../../../usr/local/lib/node_modules/@alpinejs/mask/dist/module.cjs.js
|
||||
// ../alpine/packages/mask/dist/module.cjs.js
|
||||
var require_module_cjs9 = __commonJS({
|
||||
"../../../../usr/local/lib/node_modules/@alpinejs/mask/dist/module.cjs.js"(exports, module) {
|
||||
"../alpine/packages/mask/dist/module.cjs.js"(exports, module) {
|
||||
var __defProp2 = Object.defineProperty;
|
||||
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
||||
@@ -7115,8 +7129,8 @@ var require_module_cjs9 = __commonJS({
|
||||
stripDown: () => stripDown
|
||||
});
|
||||
module.exports = __toCommonJS(module_exports);
|
||||
function src_default(Alpine19) {
|
||||
Alpine19.directive("mask", (el, { value, expression }, { effect, evaluateLater, cleanup }) => {
|
||||
function src_default(Alpine20) {
|
||||
Alpine20.directive("mask", (el, { value, expression }, { effect, evaluateLater, cleanup }) => {
|
||||
let templateFn = () => expression;
|
||||
let lastInputValue = "";
|
||||
queueMicrotask(() => {
|
||||
@@ -7125,7 +7139,7 @@ var require_module_cjs9 = __commonJS({
|
||||
effect(() => {
|
||||
templateFn = (input) => {
|
||||
let result;
|
||||
Alpine19.dontAutoEvaluateFunctions(() => {
|
||||
Alpine20.dontAutoEvaluateFunctions(() => {
|
||||
evaluator((value2) => {
|
||||
result = typeof value2 === "function" ? value2(input) : value2;
|
||||
}, { scope: {
|
||||
@@ -7140,8 +7154,13 @@ var require_module_cjs9 = __commonJS({
|
||||
} else {
|
||||
processInputValue(el, false);
|
||||
}
|
||||
if (el._x_model)
|
||||
if (el._x_model) {
|
||||
if (el._x_model.get() === el.value)
|
||||
return;
|
||||
if (el._x_model.get() === null && el.value === "")
|
||||
return;
|
||||
el._x_model.set(el.value);
|
||||
}
|
||||
});
|
||||
const controller = new AbortController();
|
||||
cleanup(() => {
|
||||
@@ -7356,9 +7375,7 @@ function dataGet(object, key) {
|
||||
if (key === "")
|
||||
return object;
|
||||
return key.split(".").reduce((carry, i) => {
|
||||
if (carry === void 0)
|
||||
return void 0;
|
||||
return carry[i];
|
||||
return carry?.[i];
|
||||
}, object);
|
||||
}
|
||||
function dataSet(object, key, value) {
|
||||
@@ -7485,6 +7502,9 @@ function handleFileUpload(el, property, component, cleanup) {
|
||||
if (value === null || value === "") {
|
||||
el.value = "";
|
||||
}
|
||||
if (el.multiple && Array.isArray(value) && value.length === 0) {
|
||||
el.value = "";
|
||||
}
|
||||
});
|
||||
let clearFileInputValue = () => {
|
||||
el.value = null;
|
||||
@@ -8171,6 +8191,7 @@ var aliases = {
|
||||
"get": "$get",
|
||||
"set": "$set",
|
||||
"call": "$call",
|
||||
"hook": "$hook",
|
||||
"commit": "$commit",
|
||||
"watch": "$watch",
|
||||
"entangle": "$entangle",
|
||||
@@ -8265,6 +8286,16 @@ wireProperty("$watch", (component) => (path, callback) => {
|
||||
wireProperty("$refresh", (component) => component.$wire.$commit);
|
||||
wireProperty("$commit", (component) => async () => await requestCommit(component));
|
||||
wireProperty("$on", (component) => (...params) => listen2(component, ...params));
|
||||
wireProperty("$hook", (component) => (name, callback) => {
|
||||
let unhook = on(name, ({ component: hookComponent, ...params }) => {
|
||||
if (hookComponent === void 0)
|
||||
return callback(params);
|
||||
if (hookComponent.id === component.id)
|
||||
return callback({ component: hookComponent, ...params });
|
||||
});
|
||||
component.addCleanup(unhook);
|
||||
return unhook;
|
||||
});
|
||||
wireProperty("$dispatch", (component) => (...params) => dispatch2(component, ...params));
|
||||
wireProperty("$dispatchSelf", (component) => (...params) => dispatchSelf(component, ...params));
|
||||
wireProperty("$dispatchTo", () => (...params) => dispatchTo(...params));
|
||||
@@ -8524,6 +8555,16 @@ function directive(name, callback) {
|
||||
}
|
||||
});
|
||||
}
|
||||
function globalDirective(name, callback) {
|
||||
if (customDirectiveNames.has(name))
|
||||
return;
|
||||
customDirectiveNames.add(name);
|
||||
on("directive.global.init", ({ el, directive: directive2, cleanup }) => {
|
||||
if (directive2.value === name) {
|
||||
callback({ el, directive: directive2, cleanup });
|
||||
}
|
||||
});
|
||||
}
|
||||
function getDirectives(el) {
|
||||
return new DirectiveManager(el);
|
||||
}
|
||||
@@ -9019,6 +9060,8 @@ function injectStyles() {
|
||||
|
||||
// js/plugins/navigate/popover.js
|
||||
function packUpPersistedPopovers(persistedEl) {
|
||||
if (!isPopoverSupported())
|
||||
return;
|
||||
persistedEl.querySelectorAll(":popover-open").forEach((el) => {
|
||||
el.setAttribute("data-navigate-popover-open", "");
|
||||
let animations = el.getAnimations();
|
||||
@@ -9037,6 +9080,8 @@ function packUpPersistedPopovers(persistedEl) {
|
||||
});
|
||||
}
|
||||
function unPackPersistedPopovers(persistedEl) {
|
||||
if (!isPopoverSupported())
|
||||
return;
|
||||
persistedEl.querySelectorAll("[data-navigate-popover-open]").forEach((el) => {
|
||||
el.removeAttribute("data-navigate-popover-open");
|
||||
queueMicrotask(() => {
|
||||
@@ -9054,6 +9099,9 @@ function unPackPersistedPopovers(persistedEl) {
|
||||
});
|
||||
});
|
||||
}
|
||||
function isPopoverSupported() {
|
||||
return typeof document.createElement("div").showPopover === "function";
|
||||
}
|
||||
|
||||
// js/plugins/navigate/page.js
|
||||
var oldBodyScriptTagHashes = [];
|
||||
@@ -9122,6 +9170,8 @@ function mergeNewHead(newHead) {
|
||||
child.remove();
|
||||
}
|
||||
for (let child of Array.from(newHead.children)) {
|
||||
if (child.tagName.toLowerCase() === "noscript")
|
||||
continue;
|
||||
document.head.appendChild(child);
|
||||
}
|
||||
return Promise.all(remoteScriptsPromises);
|
||||
@@ -9190,8 +9240,8 @@ var enablePersist = true;
|
||||
var showProgressBar = true;
|
||||
var restoreScroll = true;
|
||||
var autofocus = false;
|
||||
function navigate_default(Alpine19) {
|
||||
Alpine19.navigate = (url) => {
|
||||
function navigate_default(Alpine20) {
|
||||
Alpine20.navigate = (url) => {
|
||||
let destination = createUrlObjectFromString(url);
|
||||
let prevented = fireEventForOtherLibrariesToHookInto("alpine:navigate", {
|
||||
url: destination,
|
||||
@@ -9202,11 +9252,11 @@ function navigate_default(Alpine19) {
|
||||
return;
|
||||
navigateTo(destination);
|
||||
};
|
||||
Alpine19.navigate.disableProgressBar = () => {
|
||||
Alpine20.navigate.disableProgressBar = () => {
|
||||
showProgressBar = false;
|
||||
};
|
||||
Alpine19.addInitSelector(() => `[${Alpine19.prefixed("navigate")}]`);
|
||||
Alpine19.directive("navigate", (el, { modifiers }) => {
|
||||
Alpine20.addInitSelector(() => `[${Alpine20.prefixed("navigate")}]`);
|
||||
Alpine20.directive("navigate", (el, { modifiers }) => {
|
||||
let shouldPrefetchOnHover = modifiers.includes("hover");
|
||||
shouldPrefetchOnHover && whenThisLinkIsHoveredFor(el, 60, () => {
|
||||
let destination = extractDestinationFromLink(el);
|
||||
@@ -9243,7 +9293,7 @@ function navigate_default(Alpine19) {
|
||||
showProgressBar && finishAndHideProgressBar();
|
||||
cleanupAlpineElementsOnThePageThatArentInsideAPersistedElement();
|
||||
updateCurrentPageHtmlInHistoryStateForLaterBackButtonClicks();
|
||||
preventAlpineFromPickingUpDomChanges(Alpine19, (andAfterAllThis) => {
|
||||
preventAlpineFromPickingUpDomChanges(Alpine20, (andAfterAllThis) => {
|
||||
enablePersist && storePersistantElementsForLater((persistedEl) => {
|
||||
packUpPersistedTeleports(persistedEl);
|
||||
packUpPersistedPopovers(persistedEl);
|
||||
@@ -9265,7 +9315,7 @@ function navigate_default(Alpine19) {
|
||||
setTimeout(() => {
|
||||
autofocus && autofocusElementsWithTheAutofocusAttribute();
|
||||
});
|
||||
nowInitializeAlpineOnTheNewPage(Alpine19);
|
||||
nowInitializeAlpineOnTheNewPage(Alpine20);
|
||||
fireEventForOtherLibrariesToHookInto("alpine:navigated");
|
||||
});
|
||||
});
|
||||
@@ -9298,7 +9348,7 @@ function navigate_default(Alpine19) {
|
||||
storeScrollInformationInHtmlBeforeNavigatingAway();
|
||||
fireEventForOtherLibrariesToHookInto("alpine:navigating");
|
||||
updateCurrentPageHtmlInSnapshotCacheForLaterBackButtonClicks(currentPageUrl, currentPageKey);
|
||||
preventAlpineFromPickingUpDomChanges(Alpine19, (andAfterAllThis) => {
|
||||
preventAlpineFromPickingUpDomChanges(Alpine20, (andAfterAllThis) => {
|
||||
enablePersist && storePersistantElementsForLater((persistedEl) => {
|
||||
packUpPersistedTeleports(persistedEl);
|
||||
packUpPersistedPopovers(persistedEl);
|
||||
@@ -9313,7 +9363,7 @@ function navigate_default(Alpine19) {
|
||||
restoreScrollPositionOrScrollToTop();
|
||||
andAfterAllThis(() => {
|
||||
autofocus && autofocusElementsWithTheAutofocusAttribute();
|
||||
nowInitializeAlpineOnTheNewPage(Alpine19);
|
||||
nowInitializeAlpineOnTheNewPage(Alpine20);
|
||||
fireEventForOtherLibrariesToHookInto("alpine:navigated");
|
||||
});
|
||||
});
|
||||
@@ -9328,10 +9378,10 @@ function fetchHtmlOrUsePrefetchedHtml(fromDestination, callback) {
|
||||
fetchHtml(fromDestination, callback);
|
||||
});
|
||||
}
|
||||
function preventAlpineFromPickingUpDomChanges(Alpine19, callback) {
|
||||
Alpine19.stopObservingMutations();
|
||||
function preventAlpineFromPickingUpDomChanges(Alpine20, callback) {
|
||||
Alpine20.stopObservingMutations();
|
||||
callback((afterAllThis) => {
|
||||
Alpine19.startObservingMutations();
|
||||
Alpine20.startObservingMutations();
|
||||
queueMicrotask(() => {
|
||||
afterAllThis();
|
||||
});
|
||||
@@ -9346,8 +9396,8 @@ function fireEventForOtherLibrariesToHookInto(name, detail) {
|
||||
document.dispatchEvent(event);
|
||||
return event.defaultPrevented;
|
||||
}
|
||||
function nowInitializeAlpineOnTheNewPage(Alpine19) {
|
||||
Alpine19.initTree(document.body, void 0, (el, skip) => {
|
||||
function nowInitializeAlpineOnTheNewPage(Alpine20) {
|
||||
Alpine20.initTree(document.body, void 0, (el, skip) => {
|
||||
if (el._x_wasPersisted)
|
||||
skip();
|
||||
});
|
||||
@@ -9370,8 +9420,8 @@ function cleanupAlpineElementsOnThePageThatArentInsideAPersistedElement() {
|
||||
}
|
||||
|
||||
// js/plugins/history/index.js
|
||||
function history2(Alpine19) {
|
||||
Alpine19.magic("queryString", (el, { interceptor }) => {
|
||||
function history2(Alpine20) {
|
||||
Alpine20.magic("queryString", (el, { interceptor }) => {
|
||||
let alias;
|
||||
let alwaysShow = false;
|
||||
let usePush = false;
|
||||
@@ -9380,9 +9430,9 @@ function history2(Alpine19) {
|
||||
let { initial, replace: replace2, push: push2, pop } = track(queryKey, initialSeedValue, alwaysShow);
|
||||
setter(initial);
|
||||
if (!usePush) {
|
||||
Alpine19.effect(() => replace2(getter()));
|
||||
Alpine20.effect(() => replace2(getter()));
|
||||
} else {
|
||||
Alpine19.effect(() => push2(getter()));
|
||||
Alpine20.effect(() => push2(getter()));
|
||||
pop(async (newValue) => {
|
||||
setter(newValue);
|
||||
let tillTheEndOfTheMicrotaskQueue = () => Promise.resolve();
|
||||
@@ -9405,7 +9455,7 @@ function history2(Alpine19) {
|
||||
};
|
||||
});
|
||||
});
|
||||
Alpine19.history = { track };
|
||||
Alpine20.history = { track };
|
||||
}
|
||||
function track(name, initialSeedValue, alwaysShow = false, except = null) {
|
||||
let { has, get, set, remove } = queryStringUtils();
|
||||
@@ -9489,24 +9539,24 @@ function queryStringUtils() {
|
||||
let search = url.search;
|
||||
if (!search)
|
||||
return false;
|
||||
let data = fromQueryString(search);
|
||||
let data = fromQueryString(search, key);
|
||||
return Object.keys(data).includes(key);
|
||||
},
|
||||
get(url, key) {
|
||||
let search = url.search;
|
||||
if (!search)
|
||||
return false;
|
||||
let data = fromQueryString(search);
|
||||
let data = fromQueryString(search, key);
|
||||
return data[key];
|
||||
},
|
||||
set(url, key, value) {
|
||||
let data = fromQueryString(url.search);
|
||||
let data = fromQueryString(url.search, key);
|
||||
data[key] = stripNulls(unwrap(value));
|
||||
url.search = toQueryString(data);
|
||||
return url;
|
||||
},
|
||||
remove(url, key) {
|
||||
let data = fromQueryString(url.search);
|
||||
let data = fromQueryString(url.search, key);
|
||||
delete data[key];
|
||||
url.search = toQueryString(data);
|
||||
return url;
|
||||
@@ -9542,7 +9592,7 @@ function toQueryString(data) {
|
||||
let entries = buildQueryStringEntries(data);
|
||||
return Object.entries(entries).map(([key, value]) => `${key}=${value}`).join("&");
|
||||
}
|
||||
function fromQueryString(search) {
|
||||
function fromQueryString(search, queryKey) {
|
||||
search = search.replace("?", "");
|
||||
if (search === "")
|
||||
return {};
|
||||
@@ -9561,10 +9611,12 @@ function fromQueryString(search) {
|
||||
if (typeof value == "undefined")
|
||||
return;
|
||||
value = decodeURIComponent(value.replaceAll("+", "%20"));
|
||||
if (!key.includes("[")) {
|
||||
let decodedKey = decodeURIComponent(key);
|
||||
let shouldBeHandledAsArray = decodedKey.includes("[") && decodedKey.startsWith(queryKey);
|
||||
if (!shouldBeHandledAsArray) {
|
||||
data[key] = value;
|
||||
} else {
|
||||
let dotNotatedKey = key.replaceAll("[", ".").replaceAll("]", "");
|
||||
let dotNotatedKey = decodedKey.replaceAll("[", ".").replaceAll("]", "");
|
||||
insertDotNotatedValueIntoData(dotNotatedKey, value, data);
|
||||
}
|
||||
});
|
||||
@@ -9614,10 +9666,15 @@ function start() {
|
||||
destroyComponent(component2.id);
|
||||
});
|
||||
}
|
||||
let directives = Array.from(el.getAttributeNames()).filter((name) => matchesForLivewireDirective(name)).map((name) => extractDirective(el, name));
|
||||
directives.forEach((directive2) => {
|
||||
trigger("directive.global.init", { el, directive: directive2, cleanup: (callback) => {
|
||||
import_alpinejs5.default.onAttributeRemoved(el, directive2.raw, callback);
|
||||
} });
|
||||
});
|
||||
let component = closestComponent(el, false);
|
||||
if (component) {
|
||||
trigger("element.init", { el, component });
|
||||
let directives = Array.from(el.getAttributeNames()).filter((name) => matchesForLivewireDirective(name)).map((name) => extractDirective(el, name));
|
||||
directives.forEach((directive2) => {
|
||||
trigger("directive.init", { el, component, directive: directive2, cleanup: (callback) => {
|
||||
import_alpinejs5.default.onAttributeRemoved(el, directive2.raw, callback);
|
||||
@@ -9640,7 +9697,7 @@ function ensureLivewireScriptIsntMisplaced() {
|
||||
}
|
||||
|
||||
// js/index.js
|
||||
var import_alpinejs17 = __toESM(require_module_cjs());
|
||||
var import_alpinejs18 = __toESM(require_module_cjs());
|
||||
|
||||
// js/features/supportListeners.js
|
||||
on("effect", ({ component, effects }) => {
|
||||
@@ -10366,6 +10423,54 @@ directive("confirm", ({ el, directive: directive2 }) => {
|
||||
};
|
||||
});
|
||||
|
||||
// js/directives/wire-current.js
|
||||
var import_alpinejs14 = __toESM(require_module_cjs());
|
||||
import_alpinejs14.default.addInitSelector(() => `[wire\\:current]`);
|
||||
var onPageChanges = /* @__PURE__ */ new Map();
|
||||
document.addEventListener("livewire:navigated", () => {
|
||||
onPageChanges.forEach((i) => i(new URL(window.location.href)));
|
||||
});
|
||||
globalDirective("current", ({ el, directive: directive2, cleanup }) => {
|
||||
let expression = directive2.expression;
|
||||
let options = {
|
||||
exact: directive2.modifiers.includes("exact"),
|
||||
strict: directive2.modifiers.includes("strict")
|
||||
};
|
||||
if (expression.startsWith("#"))
|
||||
return;
|
||||
if (!el.hasAttribute("href"))
|
||||
return;
|
||||
let href = el.getAttribute("href");
|
||||
let hrefUrl = new URL(href, window.location.href);
|
||||
let classes = expression.split(" ").filter(String);
|
||||
let refreshCurrent = (url) => {
|
||||
if (pathMatches(hrefUrl, url, options)) {
|
||||
el.classList.add(...classes);
|
||||
} else {
|
||||
el.classList.remove(...classes);
|
||||
}
|
||||
};
|
||||
refreshCurrent(new URL(window.location.href));
|
||||
onPageChanges.set(el, refreshCurrent);
|
||||
cleanup(() => onPageChanges.delete(el));
|
||||
});
|
||||
function pathMatches(hrefUrl, actualUrl, options) {
|
||||
if (hrefUrl.hostname !== actualUrl.hostname)
|
||||
return false;
|
||||
let hrefPath = options.strict ? hrefUrl.pathname : hrefUrl.pathname.replace(/\/+$/, "");
|
||||
let actualPath = options.strict ? actualUrl.pathname : actualUrl.pathname.replace(/\/+$/, "");
|
||||
if (options.exact) {
|
||||
return hrefPath === actualPath;
|
||||
}
|
||||
let hrefPathSegments = hrefPath.split("/");
|
||||
let actualPathSegments = actualPath.split("/");
|
||||
for (let i = 0; i < hrefPathSegments.length; i++) {
|
||||
if (hrefPathSegments[i] !== actualPathSegments[i])
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// js/directives/shared.js
|
||||
function toggleBooleanStateDirective(el, directive2, isTruthy, cachedDisplay = null) {
|
||||
isTruthy = directive2.modifiers.includes("remove") ? !isTruthy : isTruthy;
|
||||
@@ -10637,8 +10742,8 @@ directive("ignore", ({ el, directive: directive2 }) => {
|
||||
|
||||
// js/directives/wire-dirty.js
|
||||
var refreshDirtyStatesByComponent = new WeakBag();
|
||||
on("commit", ({ component, respond }) => {
|
||||
respond(() => {
|
||||
on("commit", ({ component, succeed }) => {
|
||||
succeed(() => {
|
||||
setTimeout(() => {
|
||||
refreshDirtyStatesByComponent.each(component, (i) => i(false));
|
||||
});
|
||||
@@ -10685,7 +10790,7 @@ function dirtyTargets(el) {
|
||||
}
|
||||
|
||||
// js/directives/wire-model.js
|
||||
var import_alpinejs14 = __toESM(require_module_cjs());
|
||||
var import_alpinejs15 = __toESM(require_module_cjs());
|
||||
directive("model", ({ el, directive: directive2, component, cleanup }) => {
|
||||
let { expression, modifiers } = directive2;
|
||||
if (!expression) {
|
||||
@@ -10703,7 +10808,7 @@ directive("model", ({ el, directive: directive2, component, cleanup }) => {
|
||||
let isDebounced = modifiers.includes("debounce");
|
||||
let update = expression.startsWith("$parent") ? () => component.$wire.$parent.$commit() : () => component.$wire.$commit();
|
||||
let debouncedUpdate = isTextInput(el) && !isDebounced && isLive ? debounce(update, 150) : update;
|
||||
import_alpinejs14.default.bind(el, {
|
||||
import_alpinejs15.default.bind(el, {
|
||||
["@change"]() {
|
||||
isLazy && update();
|
||||
},
|
||||
@@ -10759,14 +10864,14 @@ function debounce(func, wait) {
|
||||
}
|
||||
|
||||
// js/directives/wire-init.js
|
||||
var import_alpinejs15 = __toESM(require_module_cjs());
|
||||
var import_alpinejs16 = __toESM(require_module_cjs());
|
||||
directive("init", ({ el, directive: directive2 }) => {
|
||||
let fullMethod = directive2.expression ?? "$refresh";
|
||||
import_alpinejs15.default.evaluate(el, `$wire.${fullMethod}`);
|
||||
import_alpinejs16.default.evaluate(el, `$wire.${fullMethod}`);
|
||||
});
|
||||
|
||||
// js/directives/wire-poll.js
|
||||
var import_alpinejs16 = __toESM(require_module_cjs());
|
||||
var import_alpinejs17 = __toESM(require_module_cjs());
|
||||
directive("poll", ({ el, directive: directive2 }) => {
|
||||
let interval = extractDurationFrom(directive2.modifiers, 2e3);
|
||||
let { start: start2, pauseWhile, throttleWhile, stopWhen } = poll(() => {
|
||||
@@ -10780,7 +10885,7 @@ directive("poll", ({ el, directive: directive2 }) => {
|
||||
stopWhen(() => theElementIsDisconnected(el));
|
||||
});
|
||||
function triggerComponentRequest(el, directive2) {
|
||||
import_alpinejs16.default.evaluate(el, directive2.expression ? "$wire." + directive2.expression : "$wire.$commit()");
|
||||
import_alpinejs17.default.evaluate(el, directive2.expression ? "$wire." + directive2.expression : "$wire.$commit()");
|
||||
}
|
||||
function poll(callback, interval = 2e3) {
|
||||
let pauseConditions = [];
|
||||
@@ -10883,7 +10988,7 @@ var Livewire2 = {
|
||||
dispatch: dispatchGlobal,
|
||||
on: on2,
|
||||
get navigate() {
|
||||
return import_alpinejs17.default.navigate;
|
||||
return import_alpinejs18.default.navigate;
|
||||
}
|
||||
};
|
||||
var warnAboutMultipleInstancesOf = (entity) => console.warn(`Detected multiple instances of ${entity} running`);
|
||||
@@ -10892,7 +10997,7 @@ if (window.Livewire)
|
||||
if (window.Alpine)
|
||||
warnAboutMultipleInstancesOf("Alpine");
|
||||
window.Livewire = Livewire2;
|
||||
window.Alpine = import_alpinejs17.default;
|
||||
window.Alpine = import_alpinejs18.default;
|
||||
if (window.livewireScriptConfig === void 0) {
|
||||
window.Alpine.__fromLivewire = true;
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
@@ -10902,7 +11007,7 @@ if (window.livewireScriptConfig === void 0) {
|
||||
Livewire2.start();
|
||||
});
|
||||
}
|
||||
var export_Alpine = import_alpinejs17.default;
|
||||
var export_Alpine = import_alpinejs18.default;
|
||||
export {
|
||||
export_Alpine as Alpine,
|
||||
Livewire2 as Livewire
|
||||
|
||||
+3
-3
File diff suppressed because one or more lines are too long
Vendored
+144
-40
@@ -370,9 +370,7 @@
|
||||
if (key === "")
|
||||
return object;
|
||||
return key.split(".").reduce((carry, i) => {
|
||||
if (carry === void 0)
|
||||
return void 0;
|
||||
return carry[i];
|
||||
return carry?.[i];
|
||||
}, object);
|
||||
}
|
||||
function dataSet(object, key, value) {
|
||||
@@ -499,6 +497,9 @@
|
||||
if (value === null || value === "") {
|
||||
el.value = "";
|
||||
}
|
||||
if (el.multiple && Array.isArray(value) && value.length === 0) {
|
||||
el.value = "";
|
||||
}
|
||||
});
|
||||
let clearFileInputValue = () => {
|
||||
el.value = null;
|
||||
@@ -901,7 +902,7 @@
|
||||
deferredMutations = deferredMutations.concat(mutations);
|
||||
return;
|
||||
}
|
||||
let addedNodes = /* @__PURE__ */ new Set();
|
||||
let addedNodes = [];
|
||||
let removedNodes = /* @__PURE__ */ new Set();
|
||||
let addedAttributes = /* @__PURE__ */ new Map();
|
||||
let removedAttributes = /* @__PURE__ */ new Map();
|
||||
@@ -909,8 +910,24 @@
|
||||
if (mutations[i].target._x_ignoreMutationObserver)
|
||||
continue;
|
||||
if (mutations[i].type === "childList") {
|
||||
mutations[i].addedNodes.forEach((node) => node.nodeType === 1 && addedNodes.add(node));
|
||||
mutations[i].removedNodes.forEach((node) => node.nodeType === 1 && removedNodes.add(node));
|
||||
mutations[i].removedNodes.forEach((node) => {
|
||||
if (node.nodeType !== 1)
|
||||
return;
|
||||
if (!node._x_marker)
|
||||
return;
|
||||
removedNodes.add(node);
|
||||
});
|
||||
mutations[i].addedNodes.forEach((node) => {
|
||||
if (node.nodeType !== 1)
|
||||
return;
|
||||
if (removedNodes.has(node)) {
|
||||
removedNodes.delete(node);
|
||||
return;
|
||||
}
|
||||
if (node._x_marker)
|
||||
return;
|
||||
addedNodes.push(node);
|
||||
});
|
||||
}
|
||||
if (mutations[i].type === "attributes") {
|
||||
let el = mutations[i].target;
|
||||
@@ -943,29 +960,15 @@
|
||||
onAttributeAddeds.forEach((i) => i(el, attrs));
|
||||
});
|
||||
for (let node of removedNodes) {
|
||||
if (addedNodes.has(node))
|
||||
if (addedNodes.some((i) => i.contains(node)))
|
||||
continue;
|
||||
onElRemoveds.forEach((i) => i(node));
|
||||
}
|
||||
addedNodes.forEach((node) => {
|
||||
node._x_ignoreSelf = true;
|
||||
node._x_ignore = true;
|
||||
});
|
||||
for (let node of addedNodes) {
|
||||
if (removedNodes.has(node))
|
||||
continue;
|
||||
if (!node.isConnected)
|
||||
continue;
|
||||
delete node._x_ignoreSelf;
|
||||
delete node._x_ignore;
|
||||
onElAddeds.forEach((i) => i(node));
|
||||
node._x_ignore = true;
|
||||
node._x_ignoreSelf = true;
|
||||
}
|
||||
addedNodes.forEach((node) => {
|
||||
delete node._x_ignoreSelf;
|
||||
delete node._x_ignore;
|
||||
});
|
||||
addedNodes = null;
|
||||
removedNodes = null;
|
||||
addedAttributes = null;
|
||||
@@ -1468,13 +1471,20 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
function interceptInit(callback) {
|
||||
initInterceptors2.push(callback);
|
||||
}
|
||||
var markerDispenser = 1;
|
||||
function initTree(el, walker = walk, intercept = () => {
|
||||
}) {
|
||||
if (findClosest(el, (i) => i._x_ignore))
|
||||
return;
|
||||
deferHandlingDirectives(() => {
|
||||
walker(el, (el2, skip) => {
|
||||
if (el2._x_marker)
|
||||
return;
|
||||
intercept(el2, skip);
|
||||
initInterceptors2.forEach((i) => i(el2, skip));
|
||||
directives(el2, el2.attributes).forEach((handle) => handle());
|
||||
if (!el2._x_ignore)
|
||||
el2._x_marker = markerDispenser++;
|
||||
el2._x_ignore && skip();
|
||||
});
|
||||
});
|
||||
@@ -1483,6 +1493,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
walker(root, (el) => {
|
||||
cleanupElement(el);
|
||||
cleanupAttributes(el);
|
||||
delete el._x_marker;
|
||||
});
|
||||
}
|
||||
function warnAboutMissingPlugins() {
|
||||
@@ -2284,7 +2295,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
get raw() {
|
||||
return raw;
|
||||
},
|
||||
version: "3.14.3",
|
||||
version: "3.14.8",
|
||||
flushAndStopDeferringMutations,
|
||||
dontAutoEvaluateFunctions,
|
||||
disableEffectScheduling,
|
||||
@@ -3131,7 +3142,6 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
placeInDom(clone2, target, modifiers);
|
||||
skipDuringClone(() => {
|
||||
initTree(clone2);
|
||||
clone2._x_ignore = true;
|
||||
})();
|
||||
});
|
||||
el._x_teleportPutBack = () => {
|
||||
@@ -4356,6 +4366,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
"get": "$get",
|
||||
"set": "$set",
|
||||
"call": "$call",
|
||||
"hook": "$hook",
|
||||
"commit": "$commit",
|
||||
"watch": "$watch",
|
||||
"entangle": "$entangle",
|
||||
@@ -4450,6 +4461,16 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
wireProperty("$refresh", (component) => component.$wire.$commit);
|
||||
wireProperty("$commit", (component) => async () => await requestCommit(component));
|
||||
wireProperty("$on", (component) => (...params) => listen2(component, ...params));
|
||||
wireProperty("$hook", (component) => (name, callback) => {
|
||||
let unhook = on2(name, ({ component: hookComponent, ...params }) => {
|
||||
if (hookComponent === void 0)
|
||||
return callback(params);
|
||||
if (hookComponent.id === component.id)
|
||||
return callback({ component: hookComponent, ...params });
|
||||
});
|
||||
component.addCleanup(unhook);
|
||||
return unhook;
|
||||
});
|
||||
wireProperty("$dispatch", (component) => (...params) => dispatch3(component, ...params));
|
||||
wireProperty("$dispatchSelf", (component) => (...params) => dispatchSelf(component, ...params));
|
||||
wireProperty("$dispatchTo", () => (...params) => dispatchTo(...params));
|
||||
@@ -4709,6 +4730,16 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
}
|
||||
});
|
||||
}
|
||||
function globalDirective(name, callback) {
|
||||
if (customDirectiveNames.has(name))
|
||||
return;
|
||||
customDirectiveNames.add(name);
|
||||
on2("directive.global.init", ({ el, directive: directive3, cleanup: cleanup2 }) => {
|
||||
if (directive3.value === name) {
|
||||
callback({ el, directive: directive3, cleanup: cleanup2 });
|
||||
}
|
||||
});
|
||||
}
|
||||
function getDirectives(el) {
|
||||
return new DirectiveManager(el);
|
||||
}
|
||||
@@ -4771,7 +4802,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
}
|
||||
};
|
||||
|
||||
// ../../../../usr/local/lib/node_modules/@alpinejs/collapse/dist/module.esm.js
|
||||
// ../alpine/packages/collapse/dist/module.esm.js
|
||||
function src_default2(Alpine3) {
|
||||
Alpine3.directive("collapse", collapse);
|
||||
collapse.inline = (el, { modifiers }) => {
|
||||
@@ -4821,7 +4852,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
start: { height: current + "px" },
|
||||
end: { height: full + "px" }
|
||||
}, () => el._x_isShown = true, () => {
|
||||
if (el.getBoundingClientRect().height == full) {
|
||||
if (Math.abs(el.getBoundingClientRect().height - full) < 1) {
|
||||
el.style.overflow = null;
|
||||
}
|
||||
});
|
||||
@@ -4865,7 +4896,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
}
|
||||
var module_default2 = src_default2;
|
||||
|
||||
// ../../../../usr/local/lib/node_modules/@alpinejs/focus/dist/module.esm.js
|
||||
// ../alpine/packages/focus/dist/module.esm.js
|
||||
var candidateSelectors = ["input", "select", "textarea", "a[href]", "button", "[tabindex]:not(slot)", "audio[controls]", "video[controls]", '[contenteditable]:not([contenteditable="false"])', "details>summary:first-of-type", "details"];
|
||||
var candidateSelector = /* @__PURE__ */ candidateSelectors.join(",");
|
||||
var NoElement = typeof Element === "undefined";
|
||||
@@ -5814,7 +5845,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
}
|
||||
var module_default3 = src_default3;
|
||||
|
||||
// ../../../../usr/local/lib/node_modules/@alpinejs/persist/dist/module.esm.js
|
||||
// ../alpine/packages/persist/dist/module.esm.js
|
||||
function src_default4(Alpine3) {
|
||||
let persist = () => {
|
||||
let alias;
|
||||
@@ -5876,7 +5907,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
}
|
||||
var module_default4 = src_default4;
|
||||
|
||||
// ../../../../usr/local/lib/node_modules/@alpinejs/intersect/dist/module.esm.js
|
||||
// ../alpine/packages/intersect/dist/module.esm.js
|
||||
function src_default5(Alpine3) {
|
||||
Alpine3.directive("intersect", Alpine3.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater: evaluateLater2, cleanup: cleanup2 }) => {
|
||||
let evaluate3 = evaluateLater2(expression);
|
||||
@@ -7633,6 +7664,8 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
|
||||
// js/plugins/navigate/popover.js
|
||||
function packUpPersistedPopovers(persistedEl) {
|
||||
if (!isPopoverSupported())
|
||||
return;
|
||||
persistedEl.querySelectorAll(":popover-open").forEach((el) => {
|
||||
el.setAttribute("data-navigate-popover-open", "");
|
||||
let animations = el.getAnimations();
|
||||
@@ -7651,6 +7684,8 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
});
|
||||
}
|
||||
function unPackPersistedPopovers(persistedEl) {
|
||||
if (!isPopoverSupported())
|
||||
return;
|
||||
persistedEl.querySelectorAll("[data-navigate-popover-open]").forEach((el) => {
|
||||
el.removeAttribute("data-navigate-popover-open");
|
||||
queueMicrotask(() => {
|
||||
@@ -7668,6 +7703,9 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
});
|
||||
});
|
||||
}
|
||||
function isPopoverSupported() {
|
||||
return typeof document.createElement("div").showPopover === "function";
|
||||
}
|
||||
|
||||
// js/plugins/navigate/page.js
|
||||
var oldBodyScriptTagHashes = [];
|
||||
@@ -7736,6 +7774,8 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
child.remove();
|
||||
}
|
||||
for (let child of Array.from(newHead.children)) {
|
||||
if (child.tagName.toLowerCase() === "noscript")
|
||||
continue;
|
||||
document.head.appendChild(child);
|
||||
}
|
||||
return Promise.all(remoteScriptsPromises);
|
||||
@@ -8103,24 +8143,24 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
let search = url.search;
|
||||
if (!search)
|
||||
return false;
|
||||
let data2 = fromQueryString(search);
|
||||
let data2 = fromQueryString(search, key);
|
||||
return Object.keys(data2).includes(key);
|
||||
},
|
||||
get(url, key) {
|
||||
let search = url.search;
|
||||
if (!search)
|
||||
return false;
|
||||
let data2 = fromQueryString(search);
|
||||
let data2 = fromQueryString(search, key);
|
||||
return data2[key];
|
||||
},
|
||||
set(url, key, value) {
|
||||
let data2 = fromQueryString(url.search);
|
||||
let data2 = fromQueryString(url.search, key);
|
||||
data2[key] = stripNulls(unwrap(value));
|
||||
url.search = toQueryString(data2);
|
||||
return url;
|
||||
},
|
||||
remove(url, key) {
|
||||
let data2 = fromQueryString(url.search);
|
||||
let data2 = fromQueryString(url.search, key);
|
||||
delete data2[key];
|
||||
url.search = toQueryString(data2);
|
||||
return url;
|
||||
@@ -8156,7 +8196,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
let entries = buildQueryStringEntries(data2);
|
||||
return Object.entries(entries).map(([key, value]) => `${key}=${value}`).join("&");
|
||||
}
|
||||
function fromQueryString(search) {
|
||||
function fromQueryString(search, queryKey) {
|
||||
search = search.replace("?", "");
|
||||
if (search === "")
|
||||
return {};
|
||||
@@ -8175,10 +8215,12 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
if (typeof value == "undefined")
|
||||
return;
|
||||
value = decodeURIComponent(value.replaceAll("+", "%20"));
|
||||
if (!key.includes("[")) {
|
||||
let decodedKey = decodeURIComponent(key);
|
||||
let shouldBeHandledAsArray = decodedKey.includes("[") && decodedKey.startsWith(queryKey);
|
||||
if (!shouldBeHandledAsArray) {
|
||||
data2[key] = value;
|
||||
} else {
|
||||
let dotNotatedKey = key.replaceAll("[", ".").replaceAll("]", "");
|
||||
let dotNotatedKey = decodedKey.replaceAll("[", ".").replaceAll("]", "");
|
||||
insertDotNotatedValueIntoData(dotNotatedKey, value, data2);
|
||||
}
|
||||
});
|
||||
@@ -8286,6 +8328,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
let holdover = fromKeyHoldovers[toKey];
|
||||
from2.appendChild(holdover);
|
||||
currentFrom = holdover;
|
||||
fromKey = getKey(currentFrom);
|
||||
} else {
|
||||
if (!shouldSkip(adding, currentTo)) {
|
||||
let clone2 = currentTo.cloneNode(true);
|
||||
@@ -8359,6 +8402,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
if (fromKeys[toKey]) {
|
||||
currentFrom.replaceWith(fromKeys[toKey]);
|
||||
currentFrom = fromKeys[toKey];
|
||||
fromKey = getKey(currentFrom);
|
||||
}
|
||||
}
|
||||
if (toKey && fromKey) {
|
||||
@@ -8367,6 +8411,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
fromKeyHoldovers[fromKey] = currentFrom;
|
||||
currentFrom.replaceWith(fromKeyNode);
|
||||
currentFrom = fromKeyNode;
|
||||
fromKey = getKey(currentFrom);
|
||||
} else {
|
||||
fromKeyHoldovers[fromKey] = currentFrom;
|
||||
currentFrom = addNodeBefore(from2, currentTo, currentFrom);
|
||||
@@ -8512,6 +8557,8 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
let fromId = from && from._x_bindings && from._x_bindings.id;
|
||||
if (!fromId)
|
||||
return;
|
||||
if (!to.setAttribute)
|
||||
return;
|
||||
to.setAttribute("id", fromId);
|
||||
to.id = fromId;
|
||||
}
|
||||
@@ -8520,7 +8567,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
}
|
||||
var module_default8 = src_default8;
|
||||
|
||||
// ../../../../usr/local/lib/node_modules/@alpinejs/mask/dist/module.esm.js
|
||||
// ../alpine/packages/mask/dist/module.esm.js
|
||||
function src_default9(Alpine3) {
|
||||
Alpine3.directive("mask", (el, { value, expression }, { effect: effect3, evaluateLater: evaluateLater2, cleanup: cleanup2 }) => {
|
||||
let templateFn = () => expression;
|
||||
@@ -8546,8 +8593,13 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
} else {
|
||||
processInputValue(el, false);
|
||||
}
|
||||
if (el._x_model)
|
||||
if (el._x_model) {
|
||||
if (el._x_model.get() === el.value)
|
||||
return;
|
||||
if (el._x_model.get() === null && el.value === "")
|
||||
return;
|
||||
el._x_model.set(el.value);
|
||||
}
|
||||
});
|
||||
const controller = new AbortController();
|
||||
cleanup2(() => {
|
||||
@@ -8725,10 +8777,15 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
destroyComponent(component2.id);
|
||||
});
|
||||
}
|
||||
let directives2 = Array.from(el.getAttributeNames()).filter((name) => matchesForLivewireDirective(name)).map((name) => extractDirective(el, name));
|
||||
directives2.forEach((directive3) => {
|
||||
trigger2("directive.global.init", { el, directive: directive3, cleanup: (callback) => {
|
||||
module_default.onAttributeRemoved(el, directive3.raw, callback);
|
||||
} });
|
||||
});
|
||||
let component = closestComponent(el, false);
|
||||
if (component) {
|
||||
trigger2("element.init", { el, component });
|
||||
let directives2 = Array.from(el.getAttributeNames()).filter((name) => matchesForLivewireDirective(name)).map((name) => extractDirective(el, name));
|
||||
directives2.forEach((directive3) => {
|
||||
trigger2("directive.init", { el, component, directive: directive3, cleanup: (callback) => {
|
||||
module_default.onAttributeRemoved(el, directive3.raw, callback);
|
||||
@@ -9466,6 +9523,53 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
};
|
||||
});
|
||||
|
||||
// js/directives/wire-current.js
|
||||
module_default.addInitSelector(() => `[wire\\:current]`);
|
||||
var onPageChanges = /* @__PURE__ */ new Map();
|
||||
document.addEventListener("livewire:navigated", () => {
|
||||
onPageChanges.forEach((i) => i(new URL(window.location.href)));
|
||||
});
|
||||
globalDirective("current", ({ el, directive: directive3, cleanup: cleanup2 }) => {
|
||||
let expression = directive3.expression;
|
||||
let options = {
|
||||
exact: directive3.modifiers.includes("exact"),
|
||||
strict: directive3.modifiers.includes("strict")
|
||||
};
|
||||
if (expression.startsWith("#"))
|
||||
return;
|
||||
if (!el.hasAttribute("href"))
|
||||
return;
|
||||
let href = el.getAttribute("href");
|
||||
let hrefUrl = new URL(href, window.location.href);
|
||||
let classes = expression.split(" ").filter(String);
|
||||
let refreshCurrent = (url) => {
|
||||
if (pathMatches(hrefUrl, url, options)) {
|
||||
el.classList.add(...classes);
|
||||
} else {
|
||||
el.classList.remove(...classes);
|
||||
}
|
||||
};
|
||||
refreshCurrent(new URL(window.location.href));
|
||||
onPageChanges.set(el, refreshCurrent);
|
||||
cleanup2(() => onPageChanges.delete(el));
|
||||
});
|
||||
function pathMatches(hrefUrl, actualUrl, options) {
|
||||
if (hrefUrl.hostname !== actualUrl.hostname)
|
||||
return false;
|
||||
let hrefPath = options.strict ? hrefUrl.pathname : hrefUrl.pathname.replace(/\/+$/, "");
|
||||
let actualPath = options.strict ? actualUrl.pathname : actualUrl.pathname.replace(/\/+$/, "");
|
||||
if (options.exact) {
|
||||
return hrefPath === actualPath;
|
||||
}
|
||||
let hrefPathSegments = hrefPath.split("/");
|
||||
let actualPathSegments = actualPath.split("/");
|
||||
for (let i = 0; i < hrefPathSegments.length; i++) {
|
||||
if (hrefPathSegments[i] !== actualPathSegments[i])
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// js/directives/shared.js
|
||||
function toggleBooleanStateDirective(el, directive3, isTruthy, cachedDisplay = null) {
|
||||
isTruthy = directive3.modifiers.includes("remove") ? !isTruthy : isTruthy;
|
||||
@@ -9737,8 +9841,8 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
|
||||
|
||||
// js/directives/wire-dirty.js
|
||||
var refreshDirtyStatesByComponent = new WeakBag();
|
||||
on2("commit", ({ component, respond }) => {
|
||||
respond(() => {
|
||||
on2("commit", ({ component, succeed }) => {
|
||||
succeed(() => {
|
||||
setTimeout(() => {
|
||||
refreshDirtyStatesByComponent.each(component, (i) => i(false));
|
||||
});
|
||||
|
||||
+6
-6
File diff suppressed because one or more lines are too long
+3
-3
File diff suppressed because one or more lines are too long
Vendored
+1
-1
@@ -1,2 +1,2 @@
|
||||
|
||||
{"/livewire.js":"38dc8241"}
|
||||
{"/livewire.js":"951e6947"}
|
||||
|
||||
@@ -109,8 +109,8 @@ return [
|
||||
'ldap_pword' => 'crwdns1453:0crwdne1453:0',
|
||||
'ldap_basedn' => 'crwdns1454:0crwdne1454:0',
|
||||
'ldap_filter' => 'crwdns1455:0crwdne1455:0',
|
||||
'ldap_pw_sync' => 'crwdns1692:0crwdne1692:0',
|
||||
'ldap_pw_sync_help' => 'crwdns1693:0crwdne1693:0',
|
||||
'ldap_pw_sync' => 'crwdns12882:0crwdne12882:0',
|
||||
'ldap_pw_sync_help' => 'crwdns12884:0crwdne12884:0',
|
||||
'ldap_username_field' => 'crwdns1456:0crwdne1456:0',
|
||||
'ldap_lname_field' => 'crwdns1457:0crwdne1457:0',
|
||||
'ldap_fname_field' => 'crwdns1458:0crwdne1458:0',
|
||||
@@ -330,6 +330,10 @@ return [
|
||||
'purge_help' => 'crwdns6469:0crwdne6469:0',
|
||||
'ldap_extension_warning' => 'crwdns6471:0crwdne6471:0',
|
||||
'ldap_ad' => 'crwdns6473:0crwdne6473:0',
|
||||
'ldap_test_label' => 'crwdns12892:0crwdne12892:0',
|
||||
'ldap_test_login' => 'crwdns12894:0crwdne12894:0',
|
||||
'ldap_username_placeholder' => 'crwdns12896:0crwdne12896:0',
|
||||
'ldap_password_placeholder' => 'crwdns12898:0crwdne12898:0',
|
||||
'employee_number' => 'crwdns6475:0crwdne6475:0',
|
||||
'create_admin_user' => 'crwdns6477:0crwdne6477:0',
|
||||
'create_admin_success' => 'crwdns6479:0crwdne6479:0',
|
||||
|
||||
@@ -36,6 +36,9 @@ return [
|
||||
'testing_authentication' => 'crwdns6729:0crwdne6729:0',
|
||||
'authentication_success' => 'crwdns6731:0crwdne6731:0'
|
||||
],
|
||||
'labels' => [
|
||||
'null_template' => 'crwdns12900:0crwdne12900:0',
|
||||
],
|
||||
'webhook' => [
|
||||
'sending' => 'crwdns11373:0crwdne11373:0',
|
||||
'success' => 'crwdns11841:0crwdne11841:0',
|
||||
@@ -46,5 +49,6 @@ return [
|
||||
'error_redirect' => 'crwdns11843:0crwdne11843:0',
|
||||
'error_misc' => 'crwdns11383:0crwdne11383:0',
|
||||
'webhook_fail' => 'crwdns12830:0crwdne12830:0',
|
||||
'webhook_channel_not_found' => 'crwdns12876:0crwdne12876:0'
|
||||
]
|
||||
];
|
||||
|
||||
@@ -92,6 +92,7 @@ return [
|
||||
'customize_report' => 'crwdns6115:0crwdne6115:0',
|
||||
'custom_report' => 'crwdns1139:0crwdne1139:0',
|
||||
'dashboard' => 'crwdns1202:0crwdne1202:0',
|
||||
'data_source' => 'crwdns12886:0crwdne12886:0',
|
||||
'days' => 'crwdns1917:0crwdne1917:0',
|
||||
'days_to_next_audit' => 'crwdns1918:0crwdne1918:0',
|
||||
'date' => 'crwdns1045:0crwdne1045:0',
|
||||
@@ -127,6 +128,7 @@ return [
|
||||
'firstname_lastname_underscore_format' => 'crwdns1995:0crwdne1995:0',
|
||||
'lastnamefirstinitial_format' => 'crwdns1999:0crwdne1999:0',
|
||||
'firstintial_dot_lastname_format' => 'crwdns5948:0crwdne5948:0',
|
||||
'lastname_dot_firstinitial_format' => 'crwdns12880:0crwdne12880:0',
|
||||
'firstname_lastname_display' => 'crwdns11779:0crwdne11779:0',
|
||||
'lastname_firstname_display' => 'crwdns11781:0crwdne11781:0',
|
||||
'name_display_format' => 'crwdns11783:0crwdne11783:0',
|
||||
@@ -217,6 +219,8 @@ return [
|
||||
'no' => 'crwdns1075:0crwdne1075:0',
|
||||
'notes' => 'crwdns1076:0crwdne1076:0',
|
||||
'note_added' => 'crwdns12858:0crwdne12858:0',
|
||||
'options' => 'crwdns12888:0crwdne12888:0',
|
||||
'preview' => 'crwdns12890:0crwdne12890:0',
|
||||
'add_note' => 'crwdns12860:0crwdne12860:0',
|
||||
'note_edited' => 'crwdns12862:0crwdne12862:0',
|
||||
'edit_note' => 'crwdns12864:0crwdne12864:0',
|
||||
@@ -560,6 +564,7 @@ return [
|
||||
'consumables' => 'crwdns12144:0crwdne12144:0',
|
||||
'components' => 'crwdns12146:0crwdne12146:0',
|
||||
],
|
||||
|
||||
'more_info' => 'crwdns12288:0crwdne12288:0',
|
||||
'quickscan_bulk_help' => 'crwdns12290:0crwdne12290:0',
|
||||
'whoops' => 'crwdns12304:0crwdne12304:0',
|
||||
@@ -576,4 +581,9 @@ return [
|
||||
'user_managed_passwords_disallow' => 'crwdns12872:0crwdne12872:0',
|
||||
'user_managed_passwords_allow' => 'crwdns12874:0crwdne12874:0',
|
||||
|
||||
// Add form placeholders here
|
||||
'placeholders' => [
|
||||
'notes' => 'crwdns12878:0crwdne12878:0',
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -109,8 +109,8 @@ return [
|
||||
'ldap_pword' => 'LDAP-koppel wagwoord',
|
||||
'ldap_basedn' => 'Base Bind DN',
|
||||
'ldap_filter' => 'LDAP Filter',
|
||||
'ldap_pw_sync' => 'LDAP-wagwoordsynkronisering',
|
||||
'ldap_pw_sync_help' => 'Verwyder hierdie vinkje as u nie LDAP-wagwoorde wil laat sinkroniseer met plaaslike wagwoorde nie. As u hierdie opsie uitskakel, beteken dit dat u gebruikers dalk nie kan aanmeld as u LDAP-bediener om een of ander rede onbereikbaar is nie.',
|
||||
'ldap_pw_sync' => 'Cache LDAP Passwords',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords cached as local hashed passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_username_field' => 'Gebruikernaam',
|
||||
'ldap_lname_field' => 'Van',
|
||||
'ldap_fname_field' => 'LDAP Voornaam',
|
||||
@@ -330,6 +330,10 @@ return [
|
||||
'purge_help' => 'Verwyder verwyderde rekords',
|
||||
'ldap_extension_warning' => 'It does not look like the LDAP extension is installed or enabled on this server. You can still save your settings, but you will need to enable the LDAP extension for PHP before LDAP syncing or login will work.',
|
||||
'ldap_ad' => 'LDAP/AD',
|
||||
'ldap_test_label' => 'Test LDAP Sync',
|
||||
'ldap_test_login' => ' Test LDAP Login',
|
||||
'ldap_username_placeholder' => 'LDAP Username',
|
||||
'ldap_password_placeholder' => 'LDAP Password',
|
||||
'employee_number' => 'Employee Number',
|
||||
'create_admin_user' => 'Create a User ::',
|
||||
'create_admin_success' => 'Success! Your admin user has been added!',
|
||||
|
||||
@@ -36,6 +36,9 @@ return [
|
||||
'testing_authentication' => 'Testing LDAP Authentication...',
|
||||
'authentication_success' => 'User authenticated against LDAP successfully!'
|
||||
],
|
||||
'labels' => [
|
||||
'null_template' => 'Label template not found. Please select a template.',
|
||||
],
|
||||
'webhook' => [
|
||||
'sending' => 'Sending :app test message...',
|
||||
'success' => 'Your :webhook_name Integration works!',
|
||||
@@ -46,5 +49,6 @@ return [
|
||||
'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. :( ',
|
||||
'webhook_fail' => ' webhook notification failed: Check to make sure the URL is still valid.',
|
||||
'webhook_channel_not_found' => ' webhook channel not found.'
|
||||
]
|
||||
];
|
||||
|
||||
@@ -92,6 +92,7 @@ return [
|
||||
'customize_report' => 'Customize Report',
|
||||
'custom_report' => 'Aangepaste bateverslag',
|
||||
'dashboard' => 'Dashboard',
|
||||
'data_source' => 'Data Source',
|
||||
'days' => 'dae',
|
||||
'days_to_next_audit' => 'Dae na Volgende Oudit',
|
||||
'date' => 'datum',
|
||||
@@ -127,6 +128,7 @@ return [
|
||||
'firstname_lastname_underscore_format' => 'First Name Last Name (jane_smith@example.com)',
|
||||
'lastnamefirstinitial_format' => 'Last Name First Initial (smithj@example.com)',
|
||||
'firstintial_dot_lastname_format' => 'First Initial Last Name (j.smith@example.com)',
|
||||
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j@example.com)',
|
||||
'firstname_lastname_display' => 'First Name Last Name (Jane Smith)',
|
||||
'lastname_firstname_display' => 'Last Name First Name (Smith Jane)',
|
||||
'name_display_format' => 'Name Display Format',
|
||||
@@ -217,6 +219,8 @@ return [
|
||||
'no' => 'Geen',
|
||||
'notes' => 'notas',
|
||||
'note_added' => 'Note Added',
|
||||
'options' => 'Options',
|
||||
'preview' => 'Preview',
|
||||
'add_note' => 'Add Note',
|
||||
'note_edited' => 'Note Edited',
|
||||
'edit_note' => 'Edit Note',
|
||||
@@ -561,6 +565,7 @@ return [
|
||||
'consumables' => ':count Consumable|:count Consumables',
|
||||
'components' => ':count Component|:count Components',
|
||||
],
|
||||
|
||||
'more_info' => 'Meer inligting',
|
||||
'quickscan_bulk_help' => 'Checking this box will edit the asset record to reflect this new location. Leaving it unchecked will simply note the location in the audit log. Note that if this asset is checked out, it will not change the location of the person, asset or location it is checked out to.',
|
||||
'whoops' => 'Whoops!',
|
||||
@@ -577,4 +582,9 @@ return [
|
||||
'user_managed_passwords_disallow' => 'Disallow users from managing their own passwords',
|
||||
'user_managed_passwords_allow' => 'Allow users to manage their own passwords',
|
||||
|
||||
// Add form placeholders here
|
||||
'placeholders' => [
|
||||
'notes' => 'Add a note',
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -109,8 +109,8 @@ return [
|
||||
'ldap_pword' => 'LDAP Bind Password',
|
||||
'ldap_basedn' => 'Base Bind DN',
|
||||
'ldap_filter' => 'LDAP Filter',
|
||||
'ldap_pw_sync' => 'LDAP Password Sync',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords synced with local passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_pw_sync' => 'Cache LDAP Passwords',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords cached as local hashed passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_username_field' => 'Username Field',
|
||||
'ldap_lname_field' => 'Last Name',
|
||||
'ldap_fname_field' => 'LDAP First Name',
|
||||
@@ -330,6 +330,10 @@ return [
|
||||
'purge_help' => 'Purge Deleted Records',
|
||||
'ldap_extension_warning' => 'It does not look like the LDAP extension is installed or enabled on this server. You can still save your settings, but you will need to enable the LDAP extension for PHP before LDAP syncing or login will work.',
|
||||
'ldap_ad' => 'LDAP/AD',
|
||||
'ldap_test_label' => 'Test LDAP Sync',
|
||||
'ldap_test_login' => ' Test LDAP Login',
|
||||
'ldap_username_placeholder' => 'LDAP Username',
|
||||
'ldap_password_placeholder' => 'LDAP Password',
|
||||
'employee_number' => 'Employee Number',
|
||||
'create_admin_user' => 'Create a User ::',
|
||||
'create_admin_success' => 'Success! Your admin user has been added!',
|
||||
|
||||
@@ -36,6 +36,9 @@ return [
|
||||
'testing_authentication' => 'Testing LDAP Authentication...',
|
||||
'authentication_success' => 'User authenticated against LDAP successfully!'
|
||||
],
|
||||
'labels' => [
|
||||
'null_template' => 'Label template not found. Please select a template.',
|
||||
],
|
||||
'webhook' => [
|
||||
'sending' => 'Sending :app test message...',
|
||||
'success' => 'Your :webhook_name Integration works!',
|
||||
@@ -46,5 +49,6 @@ return [
|
||||
'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. :( ',
|
||||
'webhook_fail' => ' webhook notification failed: Check to make sure the URL is still valid.',
|
||||
'webhook_channel_not_found' => ' webhook channel not found.'
|
||||
]
|
||||
];
|
||||
|
||||
@@ -92,6 +92,7 @@ return [
|
||||
'customize_report' => 'Customize Report',
|
||||
'custom_report' => 'Custom Asset Report',
|
||||
'dashboard' => 'Dashboard',
|
||||
'data_source' => 'Data Source',
|
||||
'days' => 'days',
|
||||
'days_to_next_audit' => 'Days to Next Audit',
|
||||
'date' => 'Date',
|
||||
@@ -127,6 +128,7 @@ return [
|
||||
'firstname_lastname_underscore_format' => 'First Name Last Name (jane_smith@example.com)',
|
||||
'lastnamefirstinitial_format' => 'Last Name First Initial (smithj@example.com)',
|
||||
'firstintial_dot_lastname_format' => 'First Initial Last Name (j.smith@example.com)',
|
||||
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j@example.com)',
|
||||
'firstname_lastname_display' => 'First Name Last Name (Jane Smith)',
|
||||
'lastname_firstname_display' => 'Last Name First Name (Smith Jane)',
|
||||
'name_display_format' => 'Name Display Format',
|
||||
@@ -217,6 +219,8 @@ return [
|
||||
'no' => 'No',
|
||||
'notes' => 'Notes',
|
||||
'note_added' => 'Note Added',
|
||||
'options' => 'Options',
|
||||
'preview' => 'Preview',
|
||||
'add_note' => 'Add Note',
|
||||
'note_edited' => 'Note Edited',
|
||||
'edit_note' => 'Edit Note',
|
||||
@@ -561,6 +565,7 @@ return [
|
||||
'consumables' => ':count Consumable|:count Consumables',
|
||||
'components' => ':count Component|:count Components',
|
||||
],
|
||||
|
||||
'more_info' => 'More Info',
|
||||
'quickscan_bulk_help' => 'Checking this box will edit the asset record to reflect this new location. Leaving it unchecked will simply note the location in the audit log. Note that if this asset is checked out, it will not change the location of the person, asset or location it is checked out to.',
|
||||
'whoops' => 'Whoops!',
|
||||
@@ -577,4 +582,9 @@ return [
|
||||
'user_managed_passwords_disallow' => 'Disallow users from managing their own passwords',
|
||||
'user_managed_passwords_allow' => 'Allow users to manage their own passwords',
|
||||
|
||||
// Add form placeholders here
|
||||
'placeholders' => [
|
||||
'notes' => 'Add a note',
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -109,8 +109,8 @@ return [
|
||||
'ldap_pword' => 'لداب ربط كلمة المرور',
|
||||
'ldap_basedn' => 'قاعدة ربط دن',
|
||||
'ldap_filter' => 'فلتر لداب',
|
||||
'ldap_pw_sync' => 'مزامنة كلمة مرور لداب',
|
||||
'ldap_pw_sync_help' => 'ألغ تحديد هذا المربع إذا كنت لا ترغب في الاحتفاظ بكلمات مرور لداب التي تمت مزامنتها مع كلمات المرور المحلية. ويعني تعطيل هذا أن المستخدمين قد لا يتمكنون من تسجيل الدخول إذا تعذر الوصول إلى خادم لداب لسبب ما.',
|
||||
'ldap_pw_sync' => 'Cache LDAP Passwords',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords cached as local hashed passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_username_field' => 'حقل اسم المستخدم',
|
||||
'ldap_lname_field' => 'الكنية',
|
||||
'ldap_fname_field' => 'لداب الاسم الأول',
|
||||
@@ -330,6 +330,10 @@ return [
|
||||
'purge_help' => 'تطهير السجلات المحذوفة',
|
||||
'ldap_extension_warning' => 'لا يبدو أن ملحق LDAP مثبت أو مفعّل على هذا الخادم. لا يزال بإمكانك حفظ الإعدادات الخاصة بك، ولكن ستحتاج إلى تمكين ملحق LDAP لـ PHP قبل أن تعمل مزامنة LDAP أو تسجيل الدخول.',
|
||||
'ldap_ad' => 'LDAP/AD',
|
||||
'ldap_test_label' => 'Test LDAP Sync',
|
||||
'ldap_test_login' => ' Test LDAP Login',
|
||||
'ldap_username_placeholder' => 'LDAP Username',
|
||||
'ldap_password_placeholder' => 'LDAP Password',
|
||||
'employee_number' => 'رقم الموظف',
|
||||
'create_admin_user' => 'إنشاء مستخدم ::',
|
||||
'create_admin_success' => 'نجاح! تم إضافة مستخدم المشرف الخاص بك!',
|
||||
|
||||
@@ -36,6 +36,9 @@ return [
|
||||
'testing_authentication' => 'اختبار مصادقة LDAP...',
|
||||
'authentication_success' => 'تمت المصادقة على المستخدم ضد LDAP بنجاح!'
|
||||
],
|
||||
'labels' => [
|
||||
'null_template' => 'Label template not found. Please select a template.',
|
||||
],
|
||||
'webhook' => [
|
||||
'sending' => 'إرسال رسالة اختبار :app ...',
|
||||
'success' => 'يعمل تكامل :webhook_name الخاص بك!',
|
||||
@@ -46,5 +49,6 @@ return [
|
||||
'error_redirect' => 'خطأ: 301/302 :endpoint يرجع إعادة توجيه. لأسباب أمنية، نحن لا نتابع إعادة التوجيه. الرجاء استخدام نقطة النهاية الفعلية.',
|
||||
'error_misc' => 'حدث خطأ ما. :( ',
|
||||
'webhook_fail' => ' webhook notification failed: Check to make sure the URL is still valid.',
|
||||
'webhook_channel_not_found' => ' webhook channel not found.'
|
||||
]
|
||||
];
|
||||
|
||||
@@ -92,6 +92,7 @@ return [
|
||||
'customize_report' => 'تخصيص التقرير',
|
||||
'custom_report' => 'تقرير مخصص للأصول',
|
||||
'dashboard' => 'لوحة القيادة',
|
||||
'data_source' => 'Data Source',
|
||||
'days' => 'أيام',
|
||||
'days_to_next_audit' => 'أيام إلى التدقيق التالي',
|
||||
'date' => 'التاريخ',
|
||||
@@ -127,6 +128,7 @@ return [
|
||||
'firstname_lastname_underscore_format' => 'الاسم الأول الاسم الأخير (jane_smith@example.com)',
|
||||
'lastnamefirstinitial_format' => 'اللقب والحرف الاول من الاسم (smithj@example.com)',
|
||||
'firstintial_dot_lastname_format' => 'الاسم الأخير الأول (jsmith@example.com)',
|
||||
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j@example.com)',
|
||||
'firstname_lastname_display' => 'الاسم الأول الاسم الأخير (جين سميث)',
|
||||
'lastname_firstname_display' => 'اسم العائلة الأول (ميث جاني)',
|
||||
'name_display_format' => 'تنسيق عرض الاسم',
|
||||
@@ -217,6 +219,8 @@ return [
|
||||
'no' => 'لا',
|
||||
'notes' => 'مُلاحظات',
|
||||
'note_added' => 'Note Added',
|
||||
'options' => 'Options',
|
||||
'preview' => 'Preview',
|
||||
'add_note' => 'Add Note',
|
||||
'note_edited' => 'Note Edited',
|
||||
'edit_note' => 'Edit Note',
|
||||
@@ -561,6 +565,7 @@ return [
|
||||
'consumables' => ':count مستهلكة<unk> :count مستهلك',
|
||||
'components' => ':count مكون<unk> :count مكونات',
|
||||
],
|
||||
|
||||
'more_info' => 'المزيد من المعلومات',
|
||||
'quickscan_bulk_help' => 'Checking this box will edit the asset record to reflect this new location. Leaving it unchecked will simply note the location in the audit log. Note that if this asset is checked out, it will not change the location of the person, asset or location it is checked out to.',
|
||||
'whoops' => 'Whoops!',
|
||||
@@ -577,4 +582,9 @@ return [
|
||||
'user_managed_passwords_disallow' => 'Disallow users from managing their own passwords',
|
||||
'user_managed_passwords_allow' => 'Allow users to manage their own passwords',
|
||||
|
||||
// Add form placeholders here
|
||||
'placeholders' => [
|
||||
'notes' => 'Add a note',
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -109,8 +109,8 @@ return [
|
||||
'ldap_pword' => 'LDAP парола на потребител за връзка',
|
||||
'ldap_basedn' => 'Базов DN',
|
||||
'ldap_filter' => 'LDAP филтър',
|
||||
'ldap_pw_sync' => 'LADP Password SYNC',
|
||||
'ldap_pw_sync_help' => 'Премахнете отметката в тази клетка ако не желаете да запазите LDAP паролите синхронизирани с локални пароли. Деактивиране на това означава, че вашите потребители може да не успеят да влязат използвайки LDAP сървъри ако са недостижими по някаква причина.',
|
||||
'ldap_pw_sync' => 'Cache LDAP Passwords',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords cached as local hashed passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_username_field' => 'Поле за потребителско име',
|
||||
'ldap_lname_field' => 'Фамилия',
|
||||
'ldap_fname_field' => 'LDAP собствено име',
|
||||
@@ -330,6 +330,10 @@ return [
|
||||
'purge_help' => 'Пречисти изтрити записи',
|
||||
'ldap_extension_warning' => 'Изглежда, че нямате инсталирани LDAP разширения или не са пуснати на сървъра. Вие можете все пак да запишите настройките, но ще трябва да включите LDAP разширенията за PHP преди да синхронизирате с LDAP, в противен случай няма да можете да се логнете.',
|
||||
'ldap_ad' => 'LDAP/AD',
|
||||
'ldap_test_label' => 'Test LDAP Sync',
|
||||
'ldap_test_login' => ' Test LDAP Login',
|
||||
'ldap_username_placeholder' => 'LDAP Username',
|
||||
'ldap_password_placeholder' => 'LDAP Password',
|
||||
'employee_number' => 'Номер на служител',
|
||||
'create_admin_user' => 'Нов потребител ::',
|
||||
'create_admin_success' => 'Готово! Вашият админ потребител беше добавен!',
|
||||
|
||||
@@ -36,6 +36,9 @@ return [
|
||||
'testing_authentication' => 'Тест LDAP Автентификация...',
|
||||
'authentication_success' => 'Потребителска Автентификация към LDAP успешна!'
|
||||
],
|
||||
'labels' => [
|
||||
'null_template' => 'Label template not found. Please select a template.',
|
||||
],
|
||||
'webhook' => [
|
||||
'sending' => 'Изпращане :app тест съобщение...',
|
||||
'success' => 'Вашата :webhook_name интеграция работи!',
|
||||
@@ -46,5 +49,6 @@ return [
|
||||
'error_redirect' => 'Грешка 301/302 :endpoint върна пренасочване. От съображения за сигурност, ние не отваряме пренасочванията. Моля ползвайте действителната крайна точка.',
|
||||
'error_misc' => 'Възникна грешка. :( ',
|
||||
'webhook_fail' => ' webhook notification failed: Check to make sure the URL is still valid.',
|
||||
'webhook_channel_not_found' => ' webhook channel not found.'
|
||||
]
|
||||
];
|
||||
|
||||
@@ -92,6 +92,7 @@ return [
|
||||
'customize_report' => 'Персонализиран отчет',
|
||||
'custom_report' => 'Потребителски справки за активи',
|
||||
'dashboard' => 'Табло',
|
||||
'data_source' => 'Data Source',
|
||||
'days' => 'дни',
|
||||
'days_to_next_audit' => 'Дни до следващия одит',
|
||||
'date' => 'Дата',
|
||||
@@ -127,6 +128,7 @@ return [
|
||||
'firstname_lastname_underscore_format' => 'Име Фамилия (jane.smith@example.com)',
|
||||
'lastnamefirstinitial_format' => 'Фамилно име Инициал на собствено (smithj@example.com)',
|
||||
'firstintial_dot_lastname_format' => 'Първа буква от името и Фамилия (i.ivanov@example.com)',
|
||||
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j@example.com)',
|
||||
'firstname_lastname_display' => 'Име Фамилия (Иван Иванов)',
|
||||
'lastname_firstname_display' => 'Фамилия Име (Иванов Иван)',
|
||||
'name_display_format' => 'Формат на показване на името',
|
||||
@@ -217,6 +219,8 @@ return [
|
||||
'no' => 'Не',
|
||||
'notes' => 'Бележки',
|
||||
'note_added' => 'Note Added',
|
||||
'options' => 'Options',
|
||||
'preview' => 'Preview',
|
||||
'add_note' => 'Add Note',
|
||||
'note_edited' => 'Note Edited',
|
||||
'edit_note' => 'Edit Note',
|
||||
@@ -561,6 +565,7 @@ return [
|
||||
'consumables' => ':count Консуматив|:count Консумативи',
|
||||
'components' => ':count Компонент|:count Компоненти',
|
||||
],
|
||||
|
||||
'more_info' => 'Повече информация',
|
||||
'quickscan_bulk_help' => 'Поставянето на отметка в това квадратче ще редактира записа на актива, за да отрази това ново местоположение. Оставянето му без отметка просто ще отбележи местоположението в журнала за проверка. Обърнете внимание, че ако този актив бъде извлечен, той няма да промени местоположението на лицето, актива или местоположението, към които е извлечен.',
|
||||
'whoops' => 'Упс!',
|
||||
@@ -577,4 +582,9 @@ return [
|
||||
'user_managed_passwords_disallow' => 'Disallow users from managing their own passwords',
|
||||
'user_managed_passwords_allow' => 'Allow users to manage their own passwords',
|
||||
|
||||
// Add form placeholders here
|
||||
'placeholders' => [
|
||||
'notes' => 'Add a note',
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -109,8 +109,8 @@ return [
|
||||
'ldap_pword' => 'LDAP Bind Password',
|
||||
'ldap_basedn' => 'Base Bind DN',
|
||||
'ldap_filter' => 'LDAP Filter',
|
||||
'ldap_pw_sync' => 'LDAP Password Sync',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords synced with local passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_pw_sync' => 'Cache LDAP Passwords',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords cached as local hashed passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_username_field' => 'Username Field',
|
||||
'ldap_lname_field' => 'Last Name',
|
||||
'ldap_fname_field' => 'LDAP First Name',
|
||||
@@ -330,6 +330,10 @@ return [
|
||||
'purge_help' => 'Purge Deleted Records',
|
||||
'ldap_extension_warning' => 'It does not look like the LDAP extension is installed or enabled on this server. You can still save your settings, but you will need to enable the LDAP extension for PHP before LDAP syncing or login will work.',
|
||||
'ldap_ad' => 'LDAP/AD',
|
||||
'ldap_test_label' => 'Test LDAP Sync',
|
||||
'ldap_test_login' => ' Test LDAP Login',
|
||||
'ldap_username_placeholder' => 'LDAP Username',
|
||||
'ldap_password_placeholder' => 'LDAP Password',
|
||||
'employee_number' => 'Employee Number',
|
||||
'create_admin_user' => 'Create a User ::',
|
||||
'create_admin_success' => 'Success! Your admin user has been added!',
|
||||
|
||||
@@ -36,6 +36,9 @@ return [
|
||||
'testing_authentication' => 'Testing LDAP Authentication...',
|
||||
'authentication_success' => 'User authenticated against LDAP successfully!'
|
||||
],
|
||||
'labels' => [
|
||||
'null_template' => 'Label template not found. Please select a template.',
|
||||
],
|
||||
'webhook' => [
|
||||
'sending' => 'Sending :app test message...',
|
||||
'success' => 'Your :webhook_name Integration works!',
|
||||
@@ -46,5 +49,6 @@ return [
|
||||
'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. :( ',
|
||||
'webhook_fail' => ' webhook notification failed: Check to make sure the URL is still valid.',
|
||||
'webhook_channel_not_found' => ' webhook channel not found.'
|
||||
]
|
||||
];
|
||||
|
||||
@@ -92,6 +92,7 @@ return [
|
||||
'customize_report' => 'Customize Report',
|
||||
'custom_report' => 'Informe de Recursos Personalitzat',
|
||||
'dashboard' => 'Dashboard',
|
||||
'data_source' => 'Data Source',
|
||||
'days' => 'days',
|
||||
'days_to_next_audit' => 'Days to Next Audit',
|
||||
'date' => 'Date',
|
||||
@@ -127,6 +128,7 @@ return [
|
||||
'firstname_lastname_underscore_format' => 'First Name Last Name (jane_smith@example.com)',
|
||||
'lastnamefirstinitial_format' => 'Last Name First Initial (smithj@example.com)',
|
||||
'firstintial_dot_lastname_format' => 'First Initial Last Name (j.smith@example.com)',
|
||||
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j@example.com)',
|
||||
'firstname_lastname_display' => 'First Name Last Name (Jane Smith)',
|
||||
'lastname_firstname_display' => 'Last Name First Name (Smith Jane)',
|
||||
'name_display_format' => 'Name Display Format',
|
||||
@@ -217,6 +219,8 @@ return [
|
||||
'no' => 'No',
|
||||
'notes' => 'Notes',
|
||||
'note_added' => 'Note Added',
|
||||
'options' => 'Options',
|
||||
'preview' => 'Preview',
|
||||
'add_note' => 'Add Note',
|
||||
'note_edited' => 'Note Edited',
|
||||
'edit_note' => 'Edit Note',
|
||||
@@ -561,6 +565,7 @@ return [
|
||||
'consumables' => ':count Consumable|:count Consumables',
|
||||
'components' => ':count Component|:count Components',
|
||||
],
|
||||
|
||||
'more_info' => 'More Info',
|
||||
'quickscan_bulk_help' => 'Checking this box will edit the asset record to reflect this new location. Leaving it unchecked will simply note the location in the audit log. Note that if this asset is checked out, it will not change the location of the person, asset or location it is checked out to.',
|
||||
'whoops' => 'Whoops!',
|
||||
@@ -577,4 +582,9 @@ return [
|
||||
'user_managed_passwords_disallow' => 'Disallow users from managing their own passwords',
|
||||
'user_managed_passwords_allow' => 'Allow users to manage their own passwords',
|
||||
|
||||
// Add form placeholders here
|
||||
'placeholders' => [
|
||||
'notes' => 'Add a note',
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -109,8 +109,8 @@ return [
|
||||
'ldap_pword' => 'LDAP Bind Password',
|
||||
'ldap_basedn' => 'Base Bind DN',
|
||||
'ldap_filter' => 'LDAP Filter',
|
||||
'ldap_pw_sync' => 'LDAP Password Sync',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords synced with local passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_pw_sync' => 'Cache LDAP Passwords',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords cached as local hashed passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_username_field' => 'Username Field',
|
||||
'ldap_lname_field' => 'Last Name',
|
||||
'ldap_fname_field' => 'LDAP First Name',
|
||||
@@ -330,6 +330,10 @@ return [
|
||||
'purge_help' => 'Purge Deleted Records',
|
||||
'ldap_extension_warning' => 'It does not look like the LDAP extension is installed or enabled on this server. You can still save your settings, but you will need to enable the LDAP extension for PHP before LDAP syncing or login will work.',
|
||||
'ldap_ad' => 'LDAP/AD',
|
||||
'ldap_test_label' => 'Test LDAP Sync',
|
||||
'ldap_test_login' => ' Test LDAP Login',
|
||||
'ldap_username_placeholder' => 'LDAP Username',
|
||||
'ldap_password_placeholder' => 'LDAP Password',
|
||||
'employee_number' => 'Employee Number',
|
||||
'create_admin_user' => 'Create a User ::',
|
||||
'create_admin_success' => 'Success! Your admin user has been added!',
|
||||
|
||||
@@ -36,6 +36,9 @@ return [
|
||||
'testing_authentication' => 'Testing LDAP Authentication...',
|
||||
'authentication_success' => 'User authenticated against LDAP successfully!'
|
||||
],
|
||||
'labels' => [
|
||||
'null_template' => 'Label template not found. Please select a template.',
|
||||
],
|
||||
'webhook' => [
|
||||
'sending' => 'Sending :app test message...',
|
||||
'success' => 'Your :webhook_name Integration works!',
|
||||
@@ -46,5 +49,6 @@ return [
|
||||
'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. :( ',
|
||||
'webhook_fail' => ' webhook notification failed: Check to make sure the URL is still valid.',
|
||||
'webhook_channel_not_found' => ' webhook channel not found.'
|
||||
]
|
||||
];
|
||||
|
||||
@@ -92,6 +92,7 @@ return [
|
||||
'customize_report' => 'Customize Report',
|
||||
'custom_report' => 'Custom Asset Report',
|
||||
'dashboard' => 'Dashboard',
|
||||
'data_source' => 'Data Source',
|
||||
'days' => 'days',
|
||||
'days_to_next_audit' => 'Days to Next Audit',
|
||||
'date' => 'Date',
|
||||
@@ -127,6 +128,7 @@ return [
|
||||
'firstname_lastname_underscore_format' => 'First Name Last Name (jane_smith@example.com)',
|
||||
'lastnamefirstinitial_format' => 'Last Name First Initial (smithj@example.com)',
|
||||
'firstintial_dot_lastname_format' => 'First Initial Last Name (j.smith@example.com)',
|
||||
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j@example.com)',
|
||||
'firstname_lastname_display' => 'First Name Last Name (Jane Smith)',
|
||||
'lastname_firstname_display' => 'Last Name First Name (Smith Jane)',
|
||||
'name_display_format' => 'Name Display Format',
|
||||
@@ -217,6 +219,8 @@ return [
|
||||
'no' => 'No',
|
||||
'notes' => 'Notes',
|
||||
'note_added' => 'Note Added',
|
||||
'options' => 'Options',
|
||||
'preview' => 'Preview',
|
||||
'add_note' => 'Add Note',
|
||||
'note_edited' => 'Note Edited',
|
||||
'edit_note' => 'Edit Note',
|
||||
@@ -561,6 +565,7 @@ return [
|
||||
'consumables' => ':count Consumable|:count Consumables',
|
||||
'components' => ':count Component|:count Components',
|
||||
],
|
||||
|
||||
'more_info' => 'More Info',
|
||||
'quickscan_bulk_help' => 'Checking this box will edit the asset record to reflect this new location. Leaving it unchecked will simply note the location in the audit log. Note that if this asset is checked out, it will not change the location of the person, asset or location it is checked out to.',
|
||||
'whoops' => 'Whoops!',
|
||||
@@ -577,4 +582,9 @@ return [
|
||||
'user_managed_passwords_disallow' => 'Disallow users from managing their own passwords',
|
||||
'user_managed_passwords_allow' => 'Allow users to manage their own passwords',
|
||||
|
||||
// Add form placeholders here
|
||||
'placeholders' => [
|
||||
'notes' => 'Add a note',
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -109,8 +109,8 @@ return [
|
||||
'ldap_pword' => 'LDAP heslo připojení',
|
||||
'ldap_basedn' => 'Základní svázání DN',
|
||||
'ldap_filter' => 'LDAP filtr',
|
||||
'ldap_pw_sync' => 'LDAP heslo synchronizace',
|
||||
'ldap_pw_sync_help' => 'Zrušte zaškrtnutí tohoto políčka, pokud si nepřejete zachovat hesla LDAP synchronizovaná s lokálními hesly. Pokud to zakážete znamená to, že se uživatelé nemusí přihlásit, pokud je váš LDAP server z nějakého důvodu nedostupný.',
|
||||
'ldap_pw_sync' => 'Cache LDAP Passwords',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords cached as local hashed passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_username_field' => 'Pole uživatelského jména',
|
||||
'ldap_lname_field' => 'Příjmení',
|
||||
'ldap_fname_field' => 'LDAP jméno',
|
||||
@@ -330,6 +330,10 @@ return [
|
||||
'purge_help' => 'Vymazat smazané záznamy',
|
||||
'ldap_extension_warning' => 'Nevypadá to, že LDAP rozšíření je nainstalováno nebo povoleno na tomto serveru. Stále můžete uložit vaše nastavení, ale budete muset povolit LDAP rozšíření pro PHP, než bude fungovat LDAP synchronizace nebo přihlášení.',
|
||||
'ldap_ad' => 'LDAP/AD',
|
||||
'ldap_test_label' => 'Test LDAP Sync',
|
||||
'ldap_test_login' => ' Test LDAP Login',
|
||||
'ldap_username_placeholder' => 'LDAP Username',
|
||||
'ldap_password_placeholder' => 'LDAP Password',
|
||||
'employee_number' => 'Osobní číslo',
|
||||
'create_admin_user' => 'Vytvořit uživatele ::',
|
||||
'create_admin_success' => 'Úspěch! Administrátorský účet byl přidán!',
|
||||
|
||||
@@ -36,6 +36,9 @@ return [
|
||||
'testing_authentication' => 'Testování LDAP ověření...',
|
||||
'authentication_success' => 'Uživatel byl úspěšně ověřen přes LDAP!'
|
||||
],
|
||||
'labels' => [
|
||||
'null_template' => 'Label template not found. Please select a template.',
|
||||
],
|
||||
'webhook' => [
|
||||
'sending' => 'Odesílání testovací zprávy :app...',
|
||||
'success' => 'Vaše integrace :webhook_name funguje!',
|
||||
@@ -46,5 +49,6 @@ return [
|
||||
'error_redirect' => 'CHYBA: 301/302 :endpoint vrací přesměrování. Z bezpečnostních důvodů nesledujeme přesměrování. Použijte prosím skutečný koncový bod.',
|
||||
'error_misc' => 'Něco se nepovedlo.',
|
||||
'webhook_fail' => ' webhook notification failed: Check to make sure the URL is still valid.',
|
||||
'webhook_channel_not_found' => ' webhook channel not found.'
|
||||
]
|
||||
];
|
||||
|
||||
@@ -92,6 +92,7 @@ return [
|
||||
'customize_report' => 'Přizpůsobit report',
|
||||
'custom_report' => 'Vlastní report majetku',
|
||||
'dashboard' => 'Nástěnka',
|
||||
'data_source' => 'Data Source',
|
||||
'days' => 'dnů',
|
||||
'days_to_next_audit' => 'Dny k dalšímu auditu',
|
||||
'date' => 'Datum',
|
||||
@@ -127,6 +128,7 @@ return [
|
||||
'firstname_lastname_underscore_format' => 'Jméno Příjmení (jan_novak@example.com)',
|
||||
'lastnamefirstinitial_format' => 'Příjmení první písmeno ze jména (novakj@example.com)',
|
||||
'firstintial_dot_lastname_format' => 'Iniciál Príjmení (j.novak@example.com)',
|
||||
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j@example.com)',
|
||||
'firstname_lastname_display' => 'Jméno příjmení (Jane Smith)',
|
||||
'lastname_firstname_display' => 'Příjmení (Smith Jane)',
|
||||
'name_display_format' => 'Formát zobrazení jména',
|
||||
@@ -217,6 +219,8 @@ return [
|
||||
'no' => 'Ne',
|
||||
'notes' => 'Poznámky',
|
||||
'note_added' => 'Note Added',
|
||||
'options' => 'Options',
|
||||
'preview' => 'Preview',
|
||||
'add_note' => 'Add Note',
|
||||
'note_edited' => 'Note Edited',
|
||||
'edit_note' => 'Edit Note',
|
||||
@@ -561,6 +565,7 @@ return [
|
||||
'consumables' => ':count Spotřební materiál|:count Spotřební materiál',
|
||||
'components' => ':count komponenta|:count komponenty',
|
||||
],
|
||||
|
||||
'more_info' => 'Více informací',
|
||||
'quickscan_bulk_help' => 'Checking this box will edit the asset record to reflect this new location. Leaving it unchecked will simply note the location in the audit log. Note that if this asset is checked out, it will not change the location of the person, asset or location it is checked out to.',
|
||||
'whoops' => 'Whoops!',
|
||||
@@ -577,4 +582,9 @@ return [
|
||||
'user_managed_passwords_disallow' => 'Disallow users from managing their own passwords',
|
||||
'user_managed_passwords_allow' => 'Allow users to manage their own passwords',
|
||||
|
||||
// Add form placeholders here
|
||||
'placeholders' => [
|
||||
'notes' => 'Add a note',
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -109,8 +109,8 @@ return [
|
||||
'ldap_pword' => 'Cyfrinair i cysylltu trwy LDAP',
|
||||
'ldap_basedn' => 'DN Cyswllt Sylfaenol',
|
||||
'ldap_filter' => 'Hidlydd LDAP',
|
||||
'ldap_pw_sync' => 'Sync cyfrinair LDAP',
|
||||
'ldap_pw_sync_help' => 'Tynnwch y tic o\'r focs yma os nad ydych am cadw cyfrineiriau LDAP mewn sync a cyfrineiriau lleol. Mae an-alluogi hyn yn feddwl ni ellith defnyddywr mewngofnodi os oes problem hefo\'r server LDAP.',
|
||||
'ldap_pw_sync' => 'Cache LDAP Passwords',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords cached as local hashed passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_username_field' => 'Maes Enw Defnyddiwr',
|
||||
'ldap_lname_field' => 'Enw Olaf',
|
||||
'ldap_fname_field' => 'Enw Cyntaf LDAP',
|
||||
@@ -330,6 +330,10 @@ return [
|
||||
'purge_help' => 'Clirio cofnodion sydd wedi\'i dileu',
|
||||
'ldap_extension_warning' => 'It does not look like the LDAP extension is installed or enabled on this server. You can still save your settings, but you will need to enable the LDAP extension for PHP before LDAP syncing or login will work.',
|
||||
'ldap_ad' => 'LDAP/AD',
|
||||
'ldap_test_label' => 'Test LDAP Sync',
|
||||
'ldap_test_login' => ' Test LDAP Login',
|
||||
'ldap_username_placeholder' => 'LDAP Username',
|
||||
'ldap_password_placeholder' => 'LDAP Password',
|
||||
'employee_number' => 'Employee Number',
|
||||
'create_admin_user' => 'Create a User ::',
|
||||
'create_admin_success' => 'Success! Your admin user has been added!',
|
||||
|
||||
@@ -36,6 +36,9 @@ return [
|
||||
'testing_authentication' => 'Testing LDAP Authentication...',
|
||||
'authentication_success' => 'User authenticated against LDAP successfully!'
|
||||
],
|
||||
'labels' => [
|
||||
'null_template' => 'Label template not found. Please select a template.',
|
||||
],
|
||||
'webhook' => [
|
||||
'sending' => 'Sending :app test message...',
|
||||
'success' => 'Your :webhook_name Integration works!',
|
||||
@@ -46,5 +49,6 @@ return [
|
||||
'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. :( ',
|
||||
'webhook_fail' => ' webhook notification failed: Check to make sure the URL is still valid.',
|
||||
'webhook_channel_not_found' => ' webhook channel not found.'
|
||||
]
|
||||
];
|
||||
|
||||
@@ -92,6 +92,7 @@ return [
|
||||
'customize_report' => 'Customize Report',
|
||||
'custom_report' => 'Adroddiad Asedau Addasedig',
|
||||
'dashboard' => 'Dashfwrdd',
|
||||
'data_source' => 'Data Source',
|
||||
'days' => 'dyddiau',
|
||||
'days_to_next_audit' => 'Dyddiau tan yr awdit nesaf',
|
||||
'date' => 'Dyddiad',
|
||||
@@ -127,6 +128,7 @@ return [
|
||||
'firstname_lastname_underscore_format' => 'Enw Cyntaf Enw Olaf (jane.smith@example.com)',
|
||||
'lastnamefirstinitial_format' => 'Enw Olaf Llythyren Cyntaf Enw Cyntaf (smithj@example.com)',
|
||||
'firstintial_dot_lastname_format' => 'Llythyren Cyntaf Enw Cyntaf Cyfenw (jsmith@example.com)',
|
||||
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j@example.com)',
|
||||
'firstname_lastname_display' => 'First Name Last Name (Jane Smith)',
|
||||
'lastname_firstname_display' => 'Last Name First Name (Smith Jane)',
|
||||
'name_display_format' => 'Name Display Format',
|
||||
@@ -217,6 +219,8 @@ return [
|
||||
'no' => 'Na',
|
||||
'notes' => 'Nodiadau',
|
||||
'note_added' => 'Note Added',
|
||||
'options' => 'Options',
|
||||
'preview' => 'Preview',
|
||||
'add_note' => 'Add Note',
|
||||
'note_edited' => 'Note Edited',
|
||||
'edit_note' => 'Edit Note',
|
||||
@@ -561,6 +565,7 @@ return [
|
||||
'consumables' => ':count Consumable|:count Consumables',
|
||||
'components' => ':count Component|:count Components',
|
||||
],
|
||||
|
||||
'more_info' => 'Mwy o wybodaeth',
|
||||
'quickscan_bulk_help' => 'Checking this box will edit the asset record to reflect this new location. Leaving it unchecked will simply note the location in the audit log. Note that if this asset is checked out, it will not change the location of the person, asset or location it is checked out to.',
|
||||
'whoops' => 'Whoops!',
|
||||
@@ -577,4 +582,9 @@ return [
|
||||
'user_managed_passwords_disallow' => 'Disallow users from managing their own passwords',
|
||||
'user_managed_passwords_allow' => 'Allow users to manage their own passwords',
|
||||
|
||||
// Add form placeholders here
|
||||
'placeholders' => [
|
||||
'notes' => 'Add a note',
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -109,8 +109,8 @@ return [
|
||||
'ldap_pword' => 'LDAP-bindingsadgangskode',
|
||||
'ldap_basedn' => 'Base Bind DN',
|
||||
'ldap_filter' => 'LDAP-filter',
|
||||
'ldap_pw_sync' => 'LDAP Password Sync',
|
||||
'ldap_pw_sync_help' => 'Fjern markeringen i dette felt, hvis du ikke vil beholde LDAP-adgangskoder synkroniseret med lokale adgangskoder. Deaktivering dette betyder, at dine brugere muligvis ikke kan logge ind, hvis din LDAP-server ikke er tilgængelig af en eller anden grund.',
|
||||
'ldap_pw_sync' => 'Cache LDAP Passwords',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords cached as local hashed passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_username_field' => 'Brugernavn felt',
|
||||
'ldap_lname_field' => 'Efternavn',
|
||||
'ldap_fname_field' => 'LDAP fornavn',
|
||||
@@ -330,6 +330,10 @@ return [
|
||||
'purge_help' => 'Ryd slettet poster',
|
||||
'ldap_extension_warning' => 'Det ser ikke ud som om LDAP- udvidelsen er installeret eller aktiveret på denne server. Du kan stadig gemme dine indstillinger, men du bliver nødt til at aktivere LDAP-udvidelsen til PHP, før LDAP-synkronisering eller login vil virke.',
|
||||
'ldap_ad' => 'LDAP/AD',
|
||||
'ldap_test_label' => 'Test LDAP Sync',
|
||||
'ldap_test_login' => ' Test LDAP Login',
|
||||
'ldap_username_placeholder' => 'LDAP Username',
|
||||
'ldap_password_placeholder' => 'LDAP Password',
|
||||
'employee_number' => 'Medarbejdernummer',
|
||||
'create_admin_user' => 'Opret en bruger ::',
|
||||
'create_admin_success' => 'Succes! Din admin bruger er blevet tilføjet!',
|
||||
|
||||
@@ -36,6 +36,9 @@ return [
|
||||
'testing_authentication' => 'Test LDAP Autentificering...',
|
||||
'authentication_success' => 'Bruger godkendt mod LDAP!'
|
||||
],
|
||||
'labels' => [
|
||||
'null_template' => 'Label template not found. Please select a template.',
|
||||
],
|
||||
'webhook' => [
|
||||
'sending' => 'Sender :app test besked...',
|
||||
'success' => 'Dine :webhook_name Integration virker!',
|
||||
@@ -46,5 +49,6 @@ return [
|
||||
'error_redirect' => 'FEJL: 301/302: endpoint returnerer en omdirigering. Af sikkerhedsmæssige årsager følger vi ikke omdirigeringer. Brug det faktiske slutpunkt.',
|
||||
'error_misc' => 'Noget gik galt. :( ',
|
||||
'webhook_fail' => ' webhook notification failed: Check to make sure the URL is still valid.',
|
||||
'webhook_channel_not_found' => ' webhook channel not found.'
|
||||
]
|
||||
];
|
||||
|
||||
@@ -92,6 +92,7 @@ return [
|
||||
'customize_report' => 'Tilpas rapport',
|
||||
'custom_report' => 'Tilpasset Aktiv Rapport',
|
||||
'dashboard' => 'Oversigtspanel',
|
||||
'data_source' => 'Data Source',
|
||||
'days' => 'dage',
|
||||
'days_to_next_audit' => 'Dage til næste revision',
|
||||
'date' => 'Dato',
|
||||
@@ -127,6 +128,7 @@ return [
|
||||
'firstname_lastname_underscore_format' => 'Fornavn Efternavn (jane_smith@example.com)',
|
||||
'lastnamefirstinitial_format' => 'Efternavn Første initial (smithj@example.com)',
|
||||
'firstintial_dot_lastname_format' => 'Første bogstav i fornavn efternavn (jsmith@example.com)',
|
||||
'lastname_dot_firstinitial_format' => 'Last Name First Initial (smith.j@example.com)',
|
||||
'firstname_lastname_display' => 'Fornavn Efternavn (Jane Smith)',
|
||||
'lastname_firstname_display' => 'Efternavn Fornavn (Smith Jane)',
|
||||
'name_display_format' => 'Navn Visningsformat',
|
||||
@@ -217,6 +219,8 @@ return [
|
||||
'no' => 'Nej',
|
||||
'notes' => 'Noter',
|
||||
'note_added' => 'Note Added',
|
||||
'options' => 'Options',
|
||||
'preview' => 'Preview',
|
||||
'add_note' => 'Add Note',
|
||||
'note_edited' => 'Note Edited',
|
||||
'edit_note' => 'Edit Note',
|
||||
@@ -561,6 +565,7 @@ return [
|
||||
'consumables' => ':count Forbrugsparti:count Forbrugsvarer',
|
||||
'components' => ':count Komponent:count Komponenter',
|
||||
],
|
||||
|
||||
'more_info' => 'Mere Info',
|
||||
'quickscan_bulk_help' => 'Checking this box will edit the asset record to reflect this new location. Leaving it unchecked will simply note the location in the audit log. Note that if this asset is checked out, it will not change the location of the person, asset or location it is checked out to.',
|
||||
'whoops' => 'Whoops!',
|
||||
@@ -577,4 +582,9 @@ return [
|
||||
'user_managed_passwords_disallow' => 'Disallow users from managing their own passwords',
|
||||
'user_managed_passwords_allow' => 'Allow users to manage their own passwords',
|
||||
|
||||
// Add form placeholders here
|
||||
'placeholders' => [
|
||||
'notes' => 'Add a note',
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -50,7 +50,7 @@ return array(
|
||||
|
||||
'checkin' => array(
|
||||
'error' => 'Lizenz wurde nicht zurückgenommen, bitte versuchen Sie es erneut.',
|
||||
'not_reassignable' => 'License not reassignable',
|
||||
'not_reassignable' => 'Lizenz nicht neu zuweisbar',
|
||||
'success' => 'Die Lizenz wurde erfolgreich zurückgenommen'
|
||||
),
|
||||
|
||||
|
||||
@@ -14,9 +14,9 @@ return [
|
||||
'user_country' => 'Land des Benutzers',
|
||||
'user_zip' => 'Postleitzahl des Benutzers'
|
||||
],
|
||||
'open_saved_template' => 'Open Saved Template',
|
||||
'save_template' => 'Save Template',
|
||||
'select_a_template' => 'Select a Template',
|
||||
'template_name' => 'Template Name',
|
||||
'update_template' => 'Update Template',
|
||||
'open_saved_template' => 'Gespeicherte Vorlage öffnen',
|
||||
'save_template' => 'Vorlage speichern',
|
||||
'select_a_template' => 'Wählen Sie eine Vorlage aus',
|
||||
'template_name' => 'Vorlagenname',
|
||||
'update_template' => 'Vorlage aktualisieren',
|
||||
];
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'about_templates' => 'About Saved Templates',
|
||||
'saving_templates_description' => 'Select your options, then enter the name of your template in the box above and click the \'Save Template\' button. Use the dropdown to select a previously saved template.',
|
||||
'about_templates' => 'Über gespeicherte Vorlagen',
|
||||
'saving_templates_description' => 'Wählen Sie Ihre Optionen aus, geben Sie dann den Namen Ihrer Vorlage in das Feld oben ein und klicken Sie auf die Schaltfläche „Vorlage speichern“. Verwenden Sie das Dropdown-Menü, um eine zuvor gespeicherte Vorlage auszuwählen.',
|
||||
'create' => [
|
||||
'success' => 'Template saved successfully',
|
||||
'success' => 'Vorlage erfolgreich gespeichert',
|
||||
],
|
||||
'update' => [
|
||||
'success' => 'Template updated successfully',
|
||||
'success' => 'Vorlage erfolgreich aktualisiert',
|
||||
],
|
||||
'delete' => [
|
||||
'success' => 'Template deleted',
|
||||
'no_delete_permission' => 'Template does not exist or you do not have permission to delete it.',
|
||||
'success' => 'Vorlage gelöscht',
|
||||
'no_delete_permission' => 'Die Vorlage existiert nicht oder Sie sind nicht berechtigt, sie zu löschen.',
|
||||
],
|
||||
];
|
||||
|
||||
@@ -55,7 +55,7 @@ return [
|
||||
'display_asset_name' => 'Zeige Assetname an',
|
||||
'display_checkout_date' => 'Zeige Herausgabedatum',
|
||||
'display_eol' => 'Zeige EOL in der Tabellenansicht',
|
||||
'display_qr' => 'Zeige 2D Barcode',
|
||||
'display_qr' => '2D-Barcode anzeigen',
|
||||
'display_alt_barcode' => 'Zeige 1D Barcode an',
|
||||
'email_logo' => 'E-Mail-Logo',
|
||||
'barcode_type' => '2D Barcode Typ',
|
||||
@@ -109,8 +109,8 @@ return [
|
||||
'ldap_pword' => 'LDAP Bind Passwort',
|
||||
'ldap_basedn' => 'Basis Bind DN',
|
||||
'ldap_filter' => 'LDAP Filter',
|
||||
'ldap_pw_sync' => 'LDAP Passwörter synchronisieren',
|
||||
'ldap_pw_sync_help' => 'Deaktivieren Sie diese Option, wenn Sie nicht möchten, dass LDAP-Passwörter mit lokalen Passwörtern synchronisiert werden. Wenn Sie dies deaktivieren, kann es sein, dass Benutzer sich möglicherweise nicht anmelden können falls der LDAP-Server aus irgendeinem Grund nicht erreichbar ist.',
|
||||
'ldap_pw_sync' => 'Cache LDAP Passwords',
|
||||
'ldap_pw_sync_help' => 'Uncheck this box if you do not wish to keep LDAP passwords cached as local hashed passwords. Disabling this means that your users may not be able to login if your LDAP server is unreachable for some reason.',
|
||||
'ldap_username_field' => 'Benutzername',
|
||||
'ldap_lname_field' => 'Nachname',
|
||||
'ldap_fname_field' => 'LDAP Vorname',
|
||||
@@ -326,10 +326,14 @@ return [
|
||||
'asset_tags_help' => 'Inkrementieren und Präfixe',
|
||||
'labels' => 'Etiketten',
|
||||
'labels_title' => 'Etiketten-Einstellungen aktualisieren',
|
||||
'labels_help' => 'Barcodes & label settings',
|
||||
'labels_help' => 'Barcodes & Etiketteneinstellungen',
|
||||
'purge_help' => 'Gelöschte Einträge bereinigen',
|
||||
'ldap_extension_warning' => 'Es sieht nicht so aus, als ob die LDAP-Erweiterung auf diesem Server installiert oder aktiviert ist. Sie können Ihre Einstellungen trotzdem speichern, aber Sie müssen die LDAP-Erweiterung für PHP aktivieren, bevor die LDAP-Synchronisierung oder der Login funktioniert.',
|
||||
'ldap_ad' => 'LDAP/AD',
|
||||
'ldap_test_label' => 'Test LDAP Sync',
|
||||
'ldap_test_login' => ' Test LDAP Login',
|
||||
'ldap_username_placeholder' => 'LDAP Username',
|
||||
'ldap_password_placeholder' => 'LDAP Password',
|
||||
'employee_number' => 'Mitarbeiternummer',
|
||||
'create_admin_user' => 'Benutzer erstellen ::',
|
||||
'create_admin_success' => 'Erfolgreich! Ihr Admin-Benutzer wurde hinzugefügt!',
|
||||
@@ -360,9 +364,9 @@ return [
|
||||
'label2_fields_help' => 'Felder können in der linken Spalte hinzugefügt, entfernt und neu sortiert werden. In jedem Feld können mehrere Optionen für Label und Datenquelle in der rechten Spalte hinzugefügt, entfernt und neu angeordnet werden.',
|
||||
'help_asterisk_bold' => 'Der eingegebene Text <code>**text**</code> wird in Fettschrift angezeigt',
|
||||
'help_blank_to_use' => 'Leer lassen, um den Wert von <code>:setting_name</code> zu verwenden',
|
||||
'help_default_will_use' => '<code>:default</code> will use the value from <code>:setting_name</code>. <br>Note that the value of the barcodes must comply with the respective barcode spec in order to be successfully generated. Please see <a href="https://snipe-it.readme.io/docs/barcodes">the documentation <i class="fa fa-external-link"></i></a> for more details. ',
|
||||
'asset_id' => 'Asset ID',
|
||||
'data' => 'Data',
|
||||
'help_default_will_use' => '<code>:default</code> verwendet den Wert aus <code>:setting_name</code>. <br>Beachten Sie, dass der Wert der Barcodes der jeweiligen Barcode-Spezifikation entsprechen muss, damit sie erfolgreich generiert werden können. Weitere Einzelheiten finden Sie in der <a href="https://snipe-it.readme.io/docs/barcodes">Dokumentation <i class="fa fa-external-link"></i></a>. ',
|
||||
'asset_id' => 'Asset-ID',
|
||||
'data' => 'Daten',
|
||||
'default' => 'Standard',
|
||||
'none' => 'Nichts',
|
||||
'google_callback_help' => 'Dies sollte als Callback-URL in den Google OAuth App-Einstellungen in deinem Unternehmen eingegeben werden's <strong><a href="https://console.cloud.google.com/" target="_blank">Google Developer Konsole <i class="fa fa-external-link" aria-hidden="true"></i></a></strong>.',
|
||||
@@ -387,13 +391,13 @@ return [
|
||||
|
||||
/* Keywords for settings overview help */
|
||||
'keywords' => [
|
||||
'brand' => 'Fußzeile, Logo, Druck, Theme, Skin, Header, Farben, Farbe, CSS',
|
||||
'general_settings' => 'Firmenunterstützung, Unterschrift, Akzeptanz, E-Mail-Format, Benutzernamenformat, Bilder, pro Seite, Vorschaubilder, EULA, Gravatar, TOS, Dashboard, Privatsphäre',
|
||||
'brand' => 'Fußzeile, Logo, Drucken, Thema, Oberflächendesign, Header, Farben, Farbe, CSS',
|
||||
'general_settings' => 'Firmensupport, Unterschrift, Akzeptanz, E-Mail-Format, Benutzernamenformat, Bilder, pro Seite, Miniaturansicht, EULA, Gravatar, Nutzungsbedingungen, Dashboard, Datenschutz',
|
||||
'groups' => 'Berechtigungen, Berechtigungsgruppen, Autorisierung',
|
||||
'labels' => 'labels, barcodes, barcode, sheets, print, upc, qr, 1d, 2d',
|
||||
'localization' => 'Lokalisierung, Währung, lokal, Lokal, Zeitzone, International, Internationalisierung, Sprache, Sprachen, Übersetzung',
|
||||
'php_overview' => 'php Info, System, Info',
|
||||
'purge' => 'Endgültig löschen',
|
||||
'labels' => 'Etiketten, Barcodes, Strichcode, Tabellen, Druck, UPC, QR, 1D, 2D',
|
||||
'localization' => 'Lokalisierung, Währung, lokal, Sprache, Zeitzone, Zeitzone, international, Internationalisierung, Sprache, Sprachen, Übersetzung',
|
||||
'php_overview' => 'PHP-Info, System, Info',
|
||||
'purge' => 'endgültig löschen',
|
||||
'security' => 'Passwort, Passwörter, Anforderungen, Zwei-Faktor, Zwei-Faktor, übliche Passwörter, Remote-Login, Logout, Authentifizierung',
|
||||
],
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user