Compare commits

...

71 Commits

Author SHA1 Message Date
snipe
391aa30da2 Bumped version 2025-11-10 13:49:26 +00:00
snipe
f92f76b48a Merge remote-tracking branch 'origin/develop' 2025-11-07 13:42:04 +00:00
snipe
83abfc9ca6 Updated language files 2025-11-07 13:41:46 +00:00
snipe
61b6d4dc47 Merge remote-tracking branch 'origin/develop'
# Conflicts:
#	public/css/dist/skins/_all-skins.css
#	public/css/dist/skins/_all-skins.css.map
#	public/css/dist/skins/_all-skins.min.css
#	public/css/dist/skins/skin-black-dark.css
#	public/css/dist/skins/skin-black-dark.css.map
#	public/css/dist/skins/skin-black-dark.min.css
#	public/css/dist/skins/skin-blue-dark.css
#	public/css/dist/skins/skin-blue-dark.css.map
#	public/css/dist/skins/skin-blue-dark.min.css
#	public/css/dist/skins/skin-green-dark.css
#	public/css/dist/skins/skin-green-dark.css.map
#	public/css/dist/skins/skin-green-dark.min.css
#	public/css/dist/skins/skin-orange-dark.css
#	public/css/dist/skins/skin-orange-dark.css.map
#	public/css/dist/skins/skin-orange-dark.min.css
#	public/css/dist/skins/skin-purple-dark.css
#	public/css/dist/skins/skin-purple-dark.css.map
#	public/css/dist/skins/skin-purple-dark.min.css
#	public/css/dist/skins/skin-red-dark.css
#	public/css/dist/skins/skin-red-dark.css.map
#	public/css/dist/skins/skin-red-dark.min.css
#	public/css/dist/skins/skin-yellow-dark.css
#	public/css/dist/skins/skin-yellow-dark.css.map
#	public/css/dist/skins/skin-yellow-dark.min.css
#	public/js/dist/all.js.map
#	public/mix-manifest.json
2025-11-07 13:26:23 +00:00
snipe
b42d6677cc Updated assets 2025-11-07 13:25:45 +00:00
snipe
e8c644a600 Merge pull request #18165 from Godmartinz/border-color-create-new-button-fix
Fixes #18140 Changes border color of create New in Dark modes
2025-11-07 13:21:52 +00:00
snipe
aa041e39eb Merge remote-tracking branch 'origin/develop'
# Conflicts:
#	public/js/dist/all.js
#	public/js/dist/all.js.map
#	public/mix-manifest.json
2025-11-06 21:12:42 +00:00
snipe
9f6a73b290 Merge pull request #18170 from grokability/fix-for-groups
Fixed #18157 - only partial information stored on group save if lower `max_input_vars` and/or `max_multipart_body_parts`
2025-11-06 21:09:42 +00:00
snipe
4d38bd1c62 Renamed variable 2025-11-06 21:07:52 +00:00
snipe
138262114d Added enctype back in 2025-11-06 21:04:55 +00:00
snipe
4073c9e638 Updated ordering 2025-11-06 21:01:20 +00:00
snipe
f1b4877a98 A few small tweaks for new groups 2025-11-06 20:36:51 +00:00
snipe
c39c92d0d7 Mash the ids into a string, fixed disclosure arrows 2025-11-06 20:12:25 +00:00
snipe
90fc48d959 Shim workaround to avoid max_input_vars and max_multipart_body_parts limits
max_input_vars = 2000
max_multipart_body_parts = 2048
2025-11-06 18:17:40 +00:00
Godfrey M
7f10a53105 dark blue 2025-11-05 12:47:10 -08:00
Godfrey M
7ae1b7a765 change border-color of create new 2025-11-05 12:40:29 -08:00
snipe
dea399398a Merge pull request #18161 from Godmartinz/TZE_24mm_E_adjustment
FD-50838: Fixes 24mm_E label sizing
2025-11-05 18:50:42 +00:00
Godfrey M
7434dd9458 final adjustments to 24mm_E label 2025-11-05 09:32:21 -08:00
snipe
723abca34a Merge remote-tracking branch 'origin/develop' 2025-11-05 15:28:40 +00:00
snipe
88e532dbc4 Fixed #18157 - reports permission glitch 2025-11-05 15:24:15 +00:00
snipe
32b28327e9 Merge remote-tracking branch 'origin/develop' 2025-11-04 21:42:05 +00:00
snipe
c5ad451c39 Merge pull request #18156 from grokability/#18119-fix-double-helpering-on-dates-for-asset-acceptance
Fixed #18119 - double formatting for acceptance/decline date
2025-11-04 21:40:58 +00:00
snipe
44bfceeb0f Fixed #18119 - double formatting for acceptance/decline date 2025-11-04 21:36:27 +00:00
snipe
c30131275f Merge remote-tracking branch 'origin/develop' 2025-11-04 21:23:14 +00:00
snipe
37eb63837b Merge pull request #18155 from grokability/#18021-fix-patch-api-with-unique-serial
Override unique_undeleted in the form request
2025-11-04 21:23:00 +00:00
snipe
4ada47e3b0 Use new setting variable since we already have it 2025-11-04 21:12:49 +00:00
snipe
e5c55c9ab3 Fixed typo in the comment 2025-11-04 21:11:54 +00:00
snipe
547b3df7b4 Added more commentary on why we’re intefering with the request 2025-11-04 21:08:48 +00:00
snipe
4100f2600c Override unique_undeleted in the form request 2025-11-04 20:43:31 +00:00
snipe
56218dfcb2 Merge remote-tracking branch 'origin/develop' 2025-11-04 19:39:52 +00:00
snipe
a9574e8fd6 Fixed #18133 - make the disabled toggle JS so it’s clearer 2025-11-04 19:39:35 +00:00
snipe
0d2a75db0a Merge remote-tracking branch 'origin/develop' 2025-11-04 19:04:25 +00:00
snipe
c6269d6bbc Merge pull request #18151 from MarvelousAnything/fixes/test_webhook_content_type
Fix Content-Type Header not being set correctly for testWebhook
2025-11-04 19:03:53 +00:00
snipe
eb9d066844 Merge remote-tracking branch 'origin/develop' 2025-11-04 18:56:15 +00:00
snipe
c1204a5301 Merge pull request #18152 from grokability/#18020-rework-pr
Re-apply #18020, fixed #15107 (mostly) - added prefix and more options to 2D barcodes
2025-11-04 18:55:54 +00:00
snipe
cc5ac65909 Re-apply #18020, fixed #15107 (mostly) - added prefix and more options to label 2D tags 2025-11-04 18:43:35 +00:00
Owen Voskuhl Hayes
9ddc48e3d7 fix the headers field for Guzzle request 2025-11-04 12:03:21 -05:00
snipe
029f3030a7 Merge remote-tracking branch 'origin/develop' 2025-11-04 16:06:35 +00:00
snipe
4a39d7c67a Use transformer for dept update responses 2025-11-04 16:06:19 +00:00
snipe
b7a6706591 Merge pull request #18150 from grokability/#18148-dept-api-request-user-count
Fixed #18148 and #17451 - return int for user_count, fixed validation
2025-11-04 16:05:42 +00:00
snipe
ddb031f091 Fixed #18148 and #17451 - return int for user_count, fixed validation 2025-11-04 15:56:23 +00:00
snipe
e906d25776 Merge pull request #16973 from spencerrlongg/bug/sc-29245
Adds Form Request for Creating Departments
2025-11-04 15:09:38 +00:00
snipe
8c59a8d405 Merged clipboard PR and generated prod assets 2025-11-03 17:39:41 +00:00
snipe
5d8905c997 Merge pull request #18143 from grokability/#18101-make-copy-to-clipboard-more-consistent
Fixed #18101: Make copy to clipboard alignment more consistent
2025-11-03 17:36:54 +00:00
snipe
517f4ce121 Fixed #18101: Make copy to clipboard alignment more consistent 2025-11-03 17:29:39 +00:00
snipe
6809bbd3d5 Merge pull request #18142 from grokability/#18136-copy-asset-name
Fixed #18136 - adds copy to clipbpard to asset name
2025-11-03 15:48:59 +00:00
snipe
ab555d05e1 Fixed #18136 - adds copy to clipbpard to asset name 2025-11-03 15:47:32 +00:00
snipe
30e16b6213 Added int 2025-11-03 14:10:36 +00:00
snipe
92b50ca7ae Addresses #17994, #16925 2025-11-03 14:10:27 +00:00
snipe
9ee36df979 Merge pull request #18139 from grokability/#18082-add-company-to-seat-view
Fixed #18082: Added user company to checked out licenses
2025-11-03 12:51:29 +00:00
snipe
46d1c14e1a Added user company to checked out licenses 2025-11-03 12:45:33 +00:00
snipe
61895011fb Merge pull request #18131 from Godmartinz/fix-inventory-alert-notification-misfire
Adds a null check for items and threshold in inventory alert notification
2025-10-30 20:11:24 +00:00
Godfrey M
32d43034bd add a null check for items and threshold in inventory alert notification 2025-10-30 10:47:17 -07:00
snipe
dfc6cdc127 Merge pull request #18128 from marcusmoore/fixes/17738-category-edit-form-fix
Fixed #17738 - accurately represent checkbox on category edit screen
2025-10-30 16:43:17 +00:00
snipe
16e93f9e18 Merge remote-tracking branch 'origin/master' into develop 2025-10-30 14:03:23 +00:00
snipe
7395b1a4eb Track permission changes 2025-10-30 13:40:24 +00:00
snipe
fa98557225 Check that the permissions are really an array
This accounts for weird data in the permissions column
2025-10-30 13:34:50 +00:00
Marcus Moore
894606b62e Remove old tests 2025-10-29 13:16:03 -07:00
Marcus Moore
f0a6a0026a Improve phrasing 2025-10-29 13:03:37 -07:00
Marcus Moore
070e0c93be Improve phrasing 2025-10-29 12:46:26 -07:00
Marcus Moore
2b27b733e5 Improve wording 2025-10-29 12:45:45 -07:00
Marcus Moore
0355c2b642 Dynamically adjust checkbox wording 2025-10-29 12:44:34 -07:00
Marcus Moore
3bad19fb56 Improve translation key name 2025-10-29 12:40:39 -07:00
Marcus Moore
0f84d51a48 Improve property name 2025-10-29 12:37:17 -07:00
Marcus Moore
2e8572d9c5 Use v3 syntax for computed properties 2025-10-29 12:35:30 -07:00
Marcus Moore
df53d5d966 Skip computing sendCheckInEmail 2025-10-29 12:32:01 -07:00
Marcus Moore
23838959ca Never disable email checkbox 2025-10-29 12:27:12 -07:00
spencerrlongg
1b397cd780 assertDbHas 2025-05-21 18:17:45 -05:00
spencerrlongg
120316bae0 wrong location import 2025-05-21 13:36:31 -05:00
spencerrlongg
7571ff007f add fillable properties to rules, some tests, move authorization to request 2025-05-21 12:51:21 -05:00
spencerrlongg
7afd7da2b4 initial work, more testing/tests needed 2025-05-21 11:44:54 -05:00
815 changed files with 36066 additions and 2295 deletions

View File

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Http\Requests\StoreDepartmentRequest;
use App\Http\Transformers\DepartmentsTransformer;
use App\Http\Transformers\SelectlistTransformer;
use App\Models\Department;
@@ -26,18 +27,19 @@ class DepartmentsController extends Controller
$allowed_columns = ['id', 'name', 'image', 'users_count', 'notes'];
$departments = Department::select(
'departments.id',
'departments.name',
'departments.phone',
'departments.fax',
'departments.location_id',
'departments.company_id',
'departments.manager_id',
'departments.created_at',
'departments.updated_at',
'departments.image',
'departments.notes',
)->with('users')->with('location')->with('manager')->with('company')->withCount('users as users_count');
[
'departments.id',
'departments.name',
'departments.phone',
'departments.fax',
'departments.location_id',
'departments.company_id',
'departments.manager_id',
'departments.created_at',
'departments.updated_at',
'departments.image',
'departments.notes'
])->with('users')->with('location')->with('manager')->with('company')->withCount('users as users_count');
if ($request->filled('search')) {
$departments = $departments->TextSearch($request->input('search'));
@@ -94,18 +96,17 @@ class DepartmentsController extends Controller
* @since [v4.0]
* @param \App\Http\Requests\ImageUploadRequest $request
*/
public function store(ImageUploadRequest $request) : JsonResponse
public function store(StoreDepartmentRequest $request): JsonResponse
{
$this->authorize('create', Department::class);
$department = new Department;
$department->fill($request->all());
$department->fill($request->validated());
$department = $request->handleImages($department);
$department->created_by = auth()->id();
$department->manager_id = ($request->filled('manager_id') ? $request->input('manager_id') : null);
if ($department->save()) {
return response()->json(Helper::formatStandardApiResponse('success', $department, trans('admin/departments/message.create.success')));
return response()->json(Helper::formatStandardApiResponse('success', (new DepartmentsTransformer)->transformDepartment($department), trans('admin/departments/message.create.success')));
}
return response()->json(Helper::formatStandardApiResponse('error', null, $department->getErrors()));
@@ -121,7 +122,7 @@ class DepartmentsController extends Controller
public function show($id) : array
{
$this->authorize('view', Department::class);
$department = Department::findOrFail($id);
$department = Department::withCount('users as users_count')->findOrFail($id);
return (new DepartmentsTransformer)->transformDepartment($department);
}
@@ -141,7 +142,7 @@ class DepartmentsController extends Controller
$department = $request->handleImages($department);
if ($department->save()) {
return response()->json(Helper::formatStandardApiResponse('success', $department, trans('admin/departments/message.update.success')));
return response()->json(Helper::formatStandardApiResponse('success', (new DepartmentsTransformer)->transformDepartment($department), trans('admin/departments/message.update.success')));
}
return response()->json(Helper::formatStandardApiResponse('error', null, $department->getErrors()));

View File

@@ -24,7 +24,7 @@ class GroupsController extends Controller
$this->authorize('view', Group::class);
$groups = Group::select('id', 'name', 'permissions', 'notes', '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'));
@@ -50,6 +50,7 @@ class GroupsController extends Controller
'id',
'name',
'created_at',
'updated_at',
'users_count',
];

View File

@@ -26,11 +26,11 @@ class LicenseSeatsController extends Controller
if ($license = License::find($licenseId)) {
$this->authorize('view', $license);
$seats = LicenseSeat::with('license', 'user', 'asset', 'user.department')
$seats = LicenseSeat::with('license', 'user', 'asset', 'user.department', 'user.company', 'asset.company')
->where('license_seats.license_id', $licenseId);
if ($request->input('status') == 'available') {
$seats->whereNull('license_seats.assigned_to');
$seats->whereNull('license_seats.assigned_to')->whereNull('license_seats.asset_id');
}
if ($request->input('status') == 'assigned') {
@@ -40,8 +40,10 @@ class LicenseSeatsController extends Controller
$order = $request->input('order') === 'asc' ? 'asc' : 'desc';
if ($request->input('sort') == 'department') {
if ($request->input('sort') == 'assigned_user.department') {
$seats->OrderDepartments($order);
} elseif ($request->input('sort') == 'assigned_user.company') {
$seats->OrderCompany($order);
} else {
$seats->orderBy('updated_at', $order);
}
@@ -83,7 +85,7 @@ class LicenseSeatsController extends Controller
return response()->json(Helper::formatStandardApiResponse('error', null, 'Seat not found'));
}
// 2. does the seat belong to the specified license?
if (! $license = $licenseSeat->license()->first() || $license->id != intval($licenseId)) {
if (! $licenseSeat = $licenseSeat->license()->first() || $licenseSeat->id != intval($licenseId)) {
return response()->json(Helper::formatStandardApiResponse('error', null, 'Seat does not belong to the specified license'));
}

View File

@@ -43,9 +43,12 @@ class GroupsController extends Controller
$permissions = config('permissions');
$groupPermissions = Helper::selectedPermissionsArray($permissions, $permissions);
$selectedPermissions = $request->old('permissions', $groupPermissions);
$users = \App\Models\User::orderBy('first_name', 'asc')->orderBy('last_name', 'asc')->get();
// Show the page
return view('groups/edit', compact('permissions', 'selectedPermissions', 'groupPermissions'))->with('group', $group);
return view('groups/edit', compact('permissions', 'selectedPermissions', 'groupPermissions'))
->with('group', $group)
->with('associated_users', [])
->with('unselected_users', $users);
}
/**
@@ -60,12 +63,23 @@ class GroupsController extends Controller
// create a new group instance
$group = new Group();
$group->name = $request->input('name');
if ($request->filled('permission')) {
$group->permissions = json_encode($request->array('permission'));
} else {
$group->permissions = null;
}
$group->permissions = json_encode($request->input('permission'));
$group->created_by = auth()->id();
$group->notes = $request->input('notes');
if ($group->save()) {
$group->users()->sync($request->input('associated_users'));
if ($request->filled('users_to_sync')) {
$associated_users = explode(',',$request->input('users_to_sync'));
$group->users()->sync($associated_users);
}
return redirect()->route('groups.index')->with('success', trans('admin/groups/message.success.create'));
}
@@ -89,10 +103,12 @@ class GroupsController extends Controller
$groupPermissions = [];
}
$selected_array = Helper::selectedPermissionsArray($permissions, $groupPermissions);
$associated_users = $group->users()->get();
$associated_users = $group->users()->orderBy('first_name', 'asc')->orderBy('last_name', 'asc')->get();
//dd($associated_users->toArray());
return view('groups.edit', compact('group', 'permissions', 'selected_array', 'groupPermissions'))->with('associated_users', $associated_users);
// Get the unselected users
$unselected_users = \App\Models\User::whereNotIn('id', $associated_users->pluck('id')->toArray())->orderBy('first_name', 'asc')->orderBy('last_name', 'asc')->get();
return view('groups.edit', compact('group', 'permissions', 'selected_array', 'groupPermissions'))->with('associated_users', $associated_users)->with('unselected_users', $unselected_users);
}
/**
@@ -106,13 +122,24 @@ class GroupsController extends Controller
public function update(Request $request, Group $group) : RedirectResponse
{
$group->name = $request->input('name');
$group->permissions = json_encode($request->input('permission'));
if ($request->filled('permission')) {
$group->permissions = json_encode($request->array('permission'));
} else {
$group->permissions = null;
}
$group->notes = $request->input('notes');
if (! config('app.lock_passwords')) {
if ($group->save()) {
$group->users()->sync($request->input('associated_users'));
if ($request->filled('users_to_sync')) {
$associated_users = explode(',',$request->input('users_to_sync'));
$group->users()->sync($associated_users);
}
return redirect()->route('groups.index')->with('success', trans('admin/groups/message.success.update'));
}

View File

@@ -772,6 +772,7 @@ class SettingsController extends Controller
$setting->label2_asset_logo = $request->input('label2_asset_logo');
$setting->label2_1d_type = $request->input('label2_1d_type');
$setting->label2_2d_type = $request->input('label2_2d_type');
$setting->label2_2d_prefix = $request->input('label2_2d_prefix');
$setting->label2_2d_target = $request->input('label2_2d_target');
$setting->label2_fields = $request->input('label2_fields');
$setting->label2_empty_row_count = $request->input('label2_empty_row_count');

View File

@@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests;
use App\Models\Department;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Gate;
class StoreDepartmentRequest extends ImageUploadRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return Gate::allows('create', new Department);
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
$modelRules = (new Department)->getRules();
return array_merge(
$modelRules,
);
}
}

View File

@@ -49,6 +49,7 @@ class StoreLabelSettings extends FormRequest
'labels_pagewidth' => 'numeric|nullable',
'labels_pageheight' => 'numeric|nullable',
'qr_text' => 'max:31|nullable',
'label2_2d_prefix' => 'nullable|max:191',
'label2_template' => [
'required',
Rule::in($names),

View File

@@ -28,23 +28,31 @@ class UpdateAssetRequest extends ImageUploadRequest
*/
public function rules()
{
$setting = Setting::getSettings();
$rules = array_merge(
parent::rules(),
(new Asset)->getRules(),
// this is to overwrite rulesets that include required, and rewrite unique_undeleted
// This overwrites the rulesets that are set at the model level (via Watson) but are not necessarily required at the request level when doing a PATCH update.
// Confusingly, this skips the unique_undeleted validator at the model level (and therefore the UniqueUndeletedTrait), so we have to re-add those
// rules here without the requiredness, since those values will already exist if you're updating an existing asset.
[
'model_id' => ['integer', 'exists:models,id,deleted_at,NULL', 'not_array'],
'status_id' => ['integer', 'exists:status_labels,id'],
'asset_tag' => [
'min:1', 'max:255', 'not_array',
Rule::unique('assets', 'asset_tag')->ignore($this->asset)->withoutTrashed()
Rule::unique('assets', 'asset_tag')->ignore($this->asset)->withoutTrashed(),
],
'serial' => [
'string', 'max:255', 'not_array',
$setting->unique_serial=='1' ? Rule::unique('assets', 'serial')->ignore($this->asset)->withoutTrashed() : 'nullable',
],
],
);
// if the purchase cost is passed in as a string **and** the digit_separator is ',' (as is common in the EU)
// then we tweak the purchase_cost rule to make it a string
if (Setting::getSettings()->digit_separator === '1.234,56' && is_string($this->input('purchase_cost'))) {
if ($setting->digit_separator === '1.234,56' && is_string($this->input('purchase_cost'))) {
$rules['purchase_cost'] = ['nullable', 'string'];
}

View File

@@ -43,7 +43,7 @@ class DepartmentsTransformer
'id' => (int) $department->location->id,
'name' => e($department->location->name),
] : null,
'users_count' => e($department->users_count),
'users_count' => (int) ($department->users_count),
'notes' => Helper::parseEscapedMarkedownInline($department->notes),
'created_at' => Helper::getFormattedDateObject($department->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($department->updated_at, 'datetime'),

View File

@@ -36,6 +36,12 @@ class LicenseSeatsTransformer
'name' => e($seat->user->department->name),
] : null,
'company'=> ($seat->user->company) ?
[
'id' => (int) $seat->user->company->id,
'name' => e($seat->user->company->name),
] : null,
'created_at' => Helper::getFormattedDateObject($seat->created_at, 'datetime'),
] : null,
'assigned_asset' => ($seat->asset) ? [

View File

@@ -2,6 +2,7 @@
namespace App\Livewire;
use Livewire\Attributes\Computed;
use Livewire\Component;
class CategoryEditForm extends Component
@@ -12,43 +13,25 @@ class CategoryEditForm extends Component
public $eulaText;
public $originalSendCheckInEmailValue;
public bool $requireAcceptance;
public bool $sendCheckInEmail;
public bool $useDefaultEula;
public function mount()
{
$this->originalSendCheckInEmailValue = $this->sendCheckInEmail;
if ($this->eulaText || $this->useDefaultEula) {
$this->sendCheckInEmail = 1;
}
}
public function render()
{
return view('livewire.category-edit-form');
}
public function updated($property, $value)
{
if (! in_array($property, ['eulaText', 'useDefaultEula'])) {
return;
}
$this->sendCheckInEmail = $this->eulaText || $this->useDefaultEula ? 1 : $this->originalSendCheckInEmailValue;
}
public function getShouldDisplayEmailMessageProperty(): bool
#[Computed]
public function emailWillBeSendDueToEula(): bool
{
return $this->eulaText || $this->useDefaultEula;
}
public function getEmailMessageProperty(): string
#[Computed]
public function emailMessage(): string
{
if ($this->useDefaultEula) {
return trans('admin/categories/general.email_will_be_sent_due_to_global_eula');
@@ -57,13 +40,9 @@ class CategoryEditForm extends Component
return trans('admin/categories/general.email_will_be_sent_due_to_category_eula');
}
public function getEulaTextDisabledProperty()
#[Computed]
public function eulaTextDisabled()
{
return (bool)$this->useDefaultEula;
}
public function getSendCheckInEmailDisabledProperty()
{
return $this->eulaText || $this->useDefaultEula;
}
}

View File

@@ -159,7 +159,7 @@ class SlackSettingsForm extends Component
]);
try {
$test = $webhook->post($this->webhook_endpoint, ['body' => $payload, ['headers' => ['Content-Type' => 'application/json']]]);
$test = $webhook->post($this->webhook_endpoint, ['body' => $payload, 'headers' => ['Content-Type' => 'application/json']]);
if(($test->getStatusCode() == 302)||($test->getStatusCode() == 301)){
return session()->flash('error' , trans('admin/settings/message.webhook.error_redirect', ['endpoint' => $this->webhook_endpoint]));

View File

@@ -360,7 +360,7 @@ class Actionlog extends SnipeModel
{
$now = Carbon::now();
$last_audit_date = $this->created_at; // this is the action log's created at, not the asset itself
$next_audit = $last_audit_date->addMonth($monthInterval); // this actually *modifies* the $last_audit_date
$next_audit = $last_audit_date->addMonth((int) $monthInterval); // this actually *modifies* the $last_audit_date
$next_audit_days = (int) round($now->diffInDays($next_audit, true));
$override_default_next = $next_audit;

View File

@@ -282,7 +282,7 @@ class Asset extends Depreciable
protected function warrantyExpires(): Attribute
{
return Attribute:: make(
get: fn(mixed $value, array $attributes) => ($attributes['warranty_months'] && $attributes['purchase_date']) ? Carbon::parse($attributes['purchase_date'])->addMonths($attributes['warranty_months']) : null,
get: fn(mixed $value, array $attributes) => ($attributes['warranty_months'] && $attributes['purchase_date']) ? Carbon::parse($attributes['purchase_date'])->addMonths((int)$attributes['warranty_months']) : null,
);
}

View File

@@ -31,10 +31,13 @@ class Department extends SnipeModel
];
protected $rules = [
'name' => 'required|max:255|is_unique_department',
'location_id' => 'numeric|nullable',
'company_id' => 'numeric|nullable',
'manager_id' => 'numeric|nullable',
'name' => 'required|max:255|is_unique_across_company_and_location:departments,name',
'location_id' => 'numeric|nullable|exists:locations,id',
'company_id' => 'numeric|nullable|exists:companies,id',
'manager_id' => 'numeric|nullable|exists:users,id',
'phone' => 'string|max:255|nullable',
'fax' => 'string|max:255|nullable',
'notes' => 'string|max:255|nullable',
];
/**

View File

@@ -4,15 +4,15 @@ namespace App\Models\Labels\Tapes\Brother;
class TZe_24mm_E extends TZe_24mm
{
private const BARCODE_MARGIN = 1.50;
private const BARCODE_MARGIN = 1.75;
private const TAG_SIZE = 2.00;
private const TITLE_SIZE = 2.80;
private const TITLE_MARGIN = 0.50;
private const LABEL_SIZE = 2.00;
private const LABEL_MARGIN = - 0.35;
private const LABEL_MARGIN = - 0.75;
private const FIELD_SIZE = 2.80;
private const FIELD_MARGIN = 0.15;
private const BARCODE1D_SIZE = - 1.00;
private const BARCODE1D_SIZE = - 2.25;
public function getUnit() { return 'mm'; }
public function getWidth() { return 45.0; }

View File

@@ -153,17 +153,24 @@ class LicenseSeat extends SnipeModel implements ICompanyableChild
}
public function scopeOrderCompany($query, $order)
{
return $query->leftJoin('users as license_seat_users', 'license_seats.assigned_to', '=', 'license_seat_users.id')
->leftJoin('companies as license_user_company', 'license_user_company.id', '=', 'license_seat_users.company_id')
->whereNotNull('license_seats.assigned_to')
->orderBy('license_user_company.name', $order);
}
public function scopeByAssigned($query)
{
return $query->where(
function ($query) {
$query->whereNotNull('assigned_to')
->orWhere(
function ($query) {
$query->whereNotNull('asset_id');
}
);
->orWhereNotNull('asset_id');
}
);

View File

@@ -237,11 +237,14 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
$permissions = json_decode($this->permissions, true);
}
foreach ($permissions as $permission) {
if ($permission != 0) {
return true;
if (($permissions) && (is_array($permissions))) {
foreach ($permissions as $permission) {
if ($permission != 0) {
return true;
}
}
}
return false;
}

View File

@@ -27,7 +27,7 @@ use Illuminate\Notifications\Notification;
$this->item_model = $params['item_model'];
$this->item_serial = $params['item_serial'];
$this->item_status = $params['item_status'];
$this->accepted_date = Helper::getFormattedDateObject($params['accepted_date'], 'datetime', false);
$this->accepted_date = $params['accepted_date'];
$this->assigned_to = $params['assigned_to'];
$this->company_name = $params['company_name'];
$this->settings = Setting::getSettings();

View File

@@ -25,7 +25,7 @@ class AcceptanceAssetDeclinedNotification extends Notification
$this->item_model = $params['item_model'];
$this->item_serial = $params['item_serial'];
$this->item_status = $params['item_status'];
$this->declined_date = Helper::getFormattedDateObject($params['declined_date'], 'date', false);
$this->declined_date = $params['declined_date'];
$this->note = $params['note'];
$this->assigned_to = $params['assigned_to'];
$this->company_name = $params['company_name'];

View File

@@ -2,10 +2,12 @@
namespace App\Notifications;
use AllowDynamicProperties;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
#[AllowDynamicProperties]
class InventoryAlert extends Notification
{
use Queueable;
@@ -32,9 +34,8 @@ class InventoryAlert extends Notification
*/
public function via()
{
$notifyBy = ['mail'];
return (!empty($this->items) && $this->threshold !== null) ? ['mail'] : [];
return $notifyBy;
}
/**

View File

@@ -49,7 +49,8 @@ class UserObserver
'end_date',
'autoassign_licenses',
'vip',
'password'
'password',
'permissions'
];
$changed = [];

View File

@@ -248,10 +248,20 @@ class LicensePresenter extends Presenter
'title' => trans('admin/users/table.email'),
'visible' => true,
'formatter' => 'emailFormatter',
], [
'field' => 'department',
],
[
'field' => 'assigned_user.company',
'searchable' => false,
'sortable' => true,
'sortable' => false,
'switchable' => true,
'title' => trans('general.company'),
'visible' => true,
'formatter' => 'companiesLinkObjFormatter',
],
[
'field' => 'assigned_user.department',
'searchable' => false,
'sortable' => false,
'switchable' => true,
'title' => trans('general.department'),
'visible' => false,

View File

@@ -283,41 +283,36 @@ class ValidationServiceProvider extends ServiceProvider
}
});
Validator::extend('is_unique_department', function ($attribute, $value, $parameters, $validator) {
/**
* Check that the 'name' field is unique in the table while within both company_id and location_id
* This is only used by Departments right now, but could be used elsewhere in the future.
*/
Validator::extend('is_unique_across_company_and_location', function ($attribute, $value, $parameters, $validator) {
$data = $validator->getData();
$table = array_get($parameters, 0);
if (
array_key_exists('location_id', $data) && $data['location_id'] !== null &&
array_key_exists('company_id', $data) && $data['company_id'] !== null
) {
//for updating existing departments
if(array_key_exists('id', $data) && $data['id'] !== null){
$count = Department::where('name', $data['name'])
->where('location_id', $data['location_id'])
->where('company_id', $data['company_id'])
->whereNotNull('company_id')
->whereNotNull('location_id')
->where('id', '!=', $data['id'])
->count('name');
$count = DB::table($table)->select($attribute)
->where($attribute, $value)
->whereNull('deleted_at');
return $count < 1;
}else // for entering in new departments
{
$count = Department::where('name', $data['name'])
->where('location_id', $data['location_id'])
->where('company_id', $data['company_id'])
->whereNotNull('company_id')
->whereNotNull('location_id')
->count('name');
return $count < 1;
if (array_key_exists('id', $data) && $data['id'] !== null) {
$count = $count->where('id', '!=', $data['id']);
}
}
else {
return true;
}
if (array_key_exists('location_id', $data) && $data['location_id'] !== null) {
$count = $count->where('location_id', $data['location_id']);
}
if (array_key_exists('company_id', $data) && $data['company_id'] !== null) {
$count = $count->where('company_id', $data['company_id']);
}
$count = $count->count('name');
return $count < 1;
});
Validator::extend('not_array', function ($attribute, $value, $parameters, $validator) {
return !is_array($value);
});

View File

@@ -140,18 +140,32 @@ class Label implements View
if ($template->getSupport2DBarcode()) {
$barcode2DType = $settings->label2_2d_type;
if (($barcode2DType != 'none') && (!is_null($barcode2DType))) {
$label2_2d_prefix = $settings->label2_2d_prefix ? e($settings->label2_2d_prefix) : '';
switch ($settings->label2_2d_target) {
case 'ht_tag':
$barcode2DTarget = route('ht/assetTag', $asset->asset_tag);
break;
case 'plain_asset_id':
$barcode2DTarget = (string) $asset->id;
$barcode2DTarget = $label2_2d_prefix.(string) $asset->id;
break;
case 'plain_asset_tag':
$barcode2DTarget = $asset->asset_tag;
$barcode2DTarget = $label2_2d_prefix.$asset->asset_tag;
break;
case 'plain_serial_number':
$barcode2DTarget = $asset->serial;
$barcode2DTarget = $label2_2d_prefix.$asset->serial;
break;
case 'plain_model_number':
$barcode2DTarget = $label2_2d_prefix.$asset->model->model_number ?? '';
break;
case 'plain_model_name':
$barcode2DTarget = $label2_2d_prefix.$asset->model->display_name ?? '';
break;
case 'plain_manufacturer_name':
$barcode2DTarget = $label2_2d_prefix.$asset->model->display_name;
break;
case 'plain_location_name':
$barcode2DTarget = $label2_2d_prefix.$asset->location->name;
break;
case 'location':
$barcode2DTarget = $asset->location_id

View File

@@ -1,10 +1,10 @@
<?php
return array (
'app_version' => 'v8.3.4',
'full_app_version' => 'v8.3.4 - build 20218-g3ab2e2011',
'build_version' => '20218',
'app_version' => 'v8.3.5',
'full_app_version' => 'v8.3.5 - build 20406-gf92f76b48',
'build_version' => '20406',
'prerelease_version' => '',
'hash_version' => 'g3ab2e2011',
'full_hash' => 'v8.3.4-149-g3ab2e2011',
'hash_version' => 'gf92f76b48',
'full_hash' => 'v8.3.5-183-gf92f76b48',
'branch' => 'master',
);

View File

@@ -0,0 +1,32 @@
<?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('settings', function (Blueprint $table) {
if (!Schema::hasColumn('settings', 'label2_2d_prefix')) {
$table->char('label2_2d_prefix', 191)->after('label2_2d_type')->nullable()->default(null);
}
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('settings', function (Blueprint $table) {
if (Schema::hasColumn('settings', 'label2_2d_prefix')) {
$table->dropColumn('label2_2d_prefix');
}
});
}
};

View File

@@ -68,7 +68,7 @@ class UserSeeder extends Seeder
]))
->create();
User::factory()->count(50)->viewAssets()
User::factory()->count(2000)->viewAssets()
->state(new Sequence(fn($sequence) => [
'company_id' => $companyIds->random(),
'department_id' => $departmentIds->random(),

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,25 +1,25 @@
{
"/js/dist/all.js": "/js/dist/all.js?id=6ffdb46d7dcfceb395f453e15cfbc4be",
"/css/dist/skins/skin-black-dark.css": "/css/dist/skins/skin-black-dark.css?id=bf1a348eae3e60c62b8879953f7df14c",
"/css/dist/skins/_all-skins.css": "/css/dist/skins/_all-skins.css?id=f712d11cfca345b58c1d8a35df03d38d",
"/css/build/overrides.css": "/css/build/overrides.css?id=f9623ce518286374061ab2e687625d44",
"/css/build/app.css": "/css/build/app.css?id=83eea8dd4d4fca629261df8b71025a77",
"/js/dist/all.js": "/js/dist/all.js?id=a84550e1cfe57870332e6a2e1b605707",
"/css/dist/skins/skin-black-dark.css": "/css/dist/skins/skin-black-dark.css?id=8d861085664e18a1407cce2d29762fa4",
"/css/dist/skins/_all-skins.css": "/css/dist/skins/_all-skins.css?id=2fea629e70002a51fb241703dd09371c",
"/css/build/overrides.css": "/css/build/overrides.css?id=dee88c73824aa75c0a01ecdc744b3095",
"/css/build/app.css": "/css/build/app.css?id=de48355100918a6ea593b6152964f15e",
"/css/build/AdminLTE.css": "/css/build/AdminLTE.css?id=bdf169bc2141f453390614c138cdce95",
"/css/dist/skins/skin-yellow.css": "/css/dist/skins/skin-yellow.css?id=e1e6e1c64cf14fc350585aaeb0e42f6b",
"/css/dist/skins/skin-yellow-dark.css": "/css/dist/skins/skin-yellow-dark.css?id=08ae1b3e66008966ce5d600ea3ad04a2",
"/css/dist/skins/skin-yellow-dark.css": "/css/dist/skins/skin-yellow-dark.css?id=69b5b9e2ae359f2871b8d6676d0a63f1",
"/css/dist/skins/skin-red.css": "/css/dist/skins/skin-red.css?id=fe8365eda6947fae76b6891d8de23e57",
"/css/dist/skins/skin-red-dark.css": "/css/dist/skins/skin-red-dark.css?id=4177acfe78a6a808fa7054cf99a93387",
"/css/dist/skins/skin-red-dark.css": "/css/dist/skins/skin-red-dark.css?id=ed73641edda768c85446aef73246e636",
"/css/dist/skins/skin-purple.css": "/css/dist/skins/skin-purple.css?id=0853b7f7da3d6bfda0738df5574d9892",
"/css/dist/skins/skin-purple-dark.css": "/css/dist/skins/skin-purple-dark.css?id=4bf29ed9f4b511b23eb9f5647371622c",
"/css/dist/skins/skin-purple-dark.css": "/css/dist/skins/skin-purple-dark.css?id=02ce0e67061be4447046ecb16301050f",
"/css/dist/skins/skin-orange.css": "/css/dist/skins/skin-orange.css?id=23f6b19fc0add02e020cbb9e4f6f9272",
"/css/dist/skins/skin-orange-dark.css": "/css/dist/skins/skin-orange-dark.css?id=71905ff04c78d92dc6f0b8354b458ffd",
"/css/dist/skins/skin-orange-dark.css": "/css/dist/skins/skin-orange-dark.css?id=90f07fa679d35cf937ac5009000f60c7",
"/css/dist/skins/skin-green.css": "/css/dist/skins/skin-green.css?id=d68df5bc23ddddc710f7acf2201b2caf",
"/css/dist/skins/skin-green-dark.css": "/css/dist/skins/skin-green-dark.css?id=436c77b84b2797f9683a7cdc4f8f6b8d",
"/css/dist/skins/skin-green-dark.css": "/css/dist/skins/skin-green-dark.css?id=7e4bd59d35004cb255983e8b282f2870",
"/css/dist/skins/skin-contrast.css": "/css/dist/skins/skin-contrast.css?id=fbd34e1e2d119358e781195c3fe26b69",
"/css/dist/skins/skin-blue.css": "/css/dist/skins/skin-blue.css?id=68a92d85c8e351dfb38a835307f126ec",
"/css/dist/skins/skin-blue-dark.css": "/css/dist/skins/skin-blue-dark.css?id=cbb20ad6182b658f34117bf96a621b63",
"/css/dist/skins/skin-blue-dark.css": "/css/dist/skins/skin-blue-dark.css?id=ed9df5188fc923bf67fa194b5dcf5c0c",
"/css/dist/skins/skin-black.css": "/css/dist/skins/skin-black.css?id=84e2ee950ae04444988b37038e5a3951",
"/css/dist/all.css": "/css/dist/all.css?id=b234d09cc37cdddb008d79d2a1f46660",
"/css/dist/all.css": "/css/dist/all.css?id=09fd1dac7d534c75004d7cd15382f756",
"/css/dist/signature-pad.css": "/css/dist/signature-pad.css?id=6a89d3cd901305e66ced1cf5f13147f7",
"/css/dist/signature-pad.min.css": "/css/dist/signature-pad.min.css?id=6a89d3cd901305e66ced1cf5f13147f7",
"/js/select2/i18n/af.js": "/js/select2/i18n/af.js?id=4f6fcd73488ce79fae1b7a90aceaecde",
@@ -93,21 +93,21 @@
"/js/dist/bootstrap-table-locale-all.min.js": "/js/dist/bootstrap-table-locale-all.min.js?id=d300041b9e5038b45b68e036add83be4",
"/js/dist/bootstrap-table-en-US.min.js": "/js/dist/bootstrap-table-en-US.min.js?id=6d0de12d91548ba2cd80b868838ce5fa",
"/js/dist/Chart.min.js": "/js/dist/Chart.min.js?id=9b1ae20c4c7048d6e4a1b2e1aee7fb31",
"/css/dist/skins/_all-skins.min.css": "/css/dist/skins/_all-skins.min.css?id=f712d11cfca345b58c1d8a35df03d38d",
"/css/dist/skins/skin-black-dark.min.css": "/css/dist/skins/skin-black-dark.min.css?id=bf1a348eae3e60c62b8879953f7df14c",
"/css/dist/skins/_all-skins.min.css": "/css/dist/skins/_all-skins.min.css?id=2fea629e70002a51fb241703dd09371c",
"/css/dist/skins/skin-black-dark.min.css": "/css/dist/skins/skin-black-dark.min.css?id=8d861085664e18a1407cce2d29762fa4",
"/css/dist/skins/skin-black.min.css": "/css/dist/skins/skin-black.min.css?id=84e2ee950ae04444988b37038e5a3951",
"/css/dist/skins/skin-blue-dark.min.css": "/css/dist/skins/skin-blue-dark.min.css?id=cbb20ad6182b658f34117bf96a621b63",
"/css/dist/skins/skin-blue-dark.min.css": "/css/dist/skins/skin-blue-dark.min.css?id=ed9df5188fc923bf67fa194b5dcf5c0c",
"/css/dist/skins/skin-blue.min.css": "/css/dist/skins/skin-blue.min.css?id=68a92d85c8e351dfb38a835307f126ec",
"/css/dist/skins/skin-contrast.min.css": "/css/dist/skins/skin-contrast.min.css?id=fbd34e1e2d119358e781195c3fe26b69",
"/css/dist/skins/skin-green-dark.min.css": "/css/dist/skins/skin-green-dark.min.css?id=436c77b84b2797f9683a7cdc4f8f6b8d",
"/css/dist/skins/skin-green-dark.min.css": "/css/dist/skins/skin-green-dark.min.css?id=7e4bd59d35004cb255983e8b282f2870",
"/css/dist/skins/skin-green.min.css": "/css/dist/skins/skin-green.min.css?id=d68df5bc23ddddc710f7acf2201b2caf",
"/css/dist/skins/skin-orange-dark.min.css": "/css/dist/skins/skin-orange-dark.min.css?id=71905ff04c78d92dc6f0b8354b458ffd",
"/css/dist/skins/skin-orange-dark.min.css": "/css/dist/skins/skin-orange-dark.min.css?id=90f07fa679d35cf937ac5009000f60c7",
"/css/dist/skins/skin-orange.min.css": "/css/dist/skins/skin-orange.min.css?id=23f6b19fc0add02e020cbb9e4f6f9272",
"/css/dist/skins/skin-purple-dark.min.css": "/css/dist/skins/skin-purple-dark.min.css?id=4bf29ed9f4b511b23eb9f5647371622c",
"/css/dist/skins/skin-purple-dark.min.css": "/css/dist/skins/skin-purple-dark.min.css?id=02ce0e67061be4447046ecb16301050f",
"/css/dist/skins/skin-purple.min.css": "/css/dist/skins/skin-purple.min.css?id=0853b7f7da3d6bfda0738df5574d9892",
"/css/dist/skins/skin-red-dark.min.css": "/css/dist/skins/skin-red-dark.min.css?id=4177acfe78a6a808fa7054cf99a93387",
"/css/dist/skins/skin-red-dark.min.css": "/css/dist/skins/skin-red-dark.min.css?id=ed73641edda768c85446aef73246e636",
"/css/dist/skins/skin-red.min.css": "/css/dist/skins/skin-red.min.css?id=fe8365eda6947fae76b6891d8de23e57",
"/css/dist/skins/skin-yellow-dark.min.css": "/css/dist/skins/skin-yellow-dark.min.css?id=08ae1b3e66008966ce5d600ea3ad04a2",
"/css/dist/skins/skin-yellow-dark.min.css": "/css/dist/skins/skin-yellow-dark.min.css?id=69b5b9e2ae359f2871b8d6676d0a63f1",
"/css/dist/skins/skin-yellow.min.css": "/css/dist/skins/skin-yellow.min.css?id=e1e6e1c64cf14fc350585aaeb0e42f6b",
"/css/dist/bootstrap-table.css": "/css/dist/bootstrap-table.css?id=9def0b5d3b891ac3669b3b7aa7e805ce",
"/js/dist/bootstrap-table.js": "/js/dist/bootstrap-table.js?id=ed9dc2e13cf495675067c4c7091b325a"

View File

@@ -625,35 +625,29 @@ $('.header-row input:radio').change(function() {
// Generic toggleable callouts with remember state
$(".remember-toggle").on("click",function(){
var toggleable_callout_id = $(this).attr('id');
var toggle_content_class = 'toggle-content-'+$(this).attr('id');
var toggle_arrow = '#toggle-arrow-' + toggleable_callout_id;
var toggle_cookie_name='toggle_state_'+toggleable_callout_id;
console.log('Callout ID: ' + toggleable_callout_id);
console.log('Content ID: '+toggle_content_class);
console.log('Arrow ID: '+toggle_arrow);
console.log('Cookie Name: '+toggle_cookie_name);
$('.'+toggle_content_class).fadeToggle(100);
$(toggle_arrow).toggleClass('fa-caret-right fa-caret-down');
var toggle_open = $(toggle_arrow).hasClass('fa-caret-down');
console.log('Cookie will set open state to: '+toggle_open);
document.cookie=toggle_cookie_name+"="+toggle_open+';path=/';
});
var all_cookies = document.cookie.split(';')
for (var i in all_cookies) {
var trimmed_cookie = all_cookies[i].trim(' ')
elems = all_cookies[i].split('=', 2);
elems = trimmed_cookie.split('=', 2);
// We have to do more here since we don't know the name of the selector
if (trimmed_cookie.startsWith('toggle_state_')) {
console.log(trimmed_cookie + ' matches toggle_state_');
var toggle_selector_name = elems[0].replace(' toggle_state_','');
if (elems[1] == 'true') {
console.log('Selector name for cookie click trigger: '+toggle_selector_name);
var toggle_selector_name = elems[0].replace('toggle_state_','');
if (elems[1] != "true") {
$('#'+toggle_selector_name+'.remember-toggle').trigger('click')
}
}
@@ -714,3 +708,80 @@ $(".admin").change(function() {
}
});
// Handle the select/deselect of the select boxes with the button from right to left
$(function () {
function moveItems(origin, dest) {
$(origin).find(':selected').appendTo(dest);
$(dest).attr('selected', true);
$(dest).sort_select_box();
}
function moveAllItems(origin, dest) {
$(origin).children("option:visible").appendTo(dest);
$(dest).attr('selected', true);
$(dest).sort_select_box();
}
$('.left').on('click', function () {
var container = $(this).closest('.addremove-multiselect');
moveItems($(container).find('select.multiselect.selected'), $(container).find('select.multiselect.available'));
});
$('.right').on('click', function () {
var container = $(this).closest('.addremove-multiselect');
moveItems($(container).find('select.multiselect.available'), $(container).find('select.multiselect.selected'));
});
$('.leftall').on('click', function () {
var container = $(this).closest('.addremove-multiselect');
moveAllItems($(container).find('select.multiselect.selected'), $(container).find('select.multiselect.available'));
});
$('.rightall').on('click', function () {
var container = $(this).closest('.addremove-multiselect');
moveAllItems($(container).find('select.multiselect.available'), $(container).find('select.multiselect.selected'));
});
$('select.multiselect.selected').on('dblclick keyup',function(e){
if(e.which == 13 || e.type == 'dblclick') {
var container = $(this).closest('.addremove-multiselect');
moveItems($(container).find('select.multiselect.selected'), $(container).find('select.multiselect.available'));
}
});
$('select.multiselect.available').on('dblclick keyup',function(e){
if(e.which == 13 || e.type == 'dblclick') {
var container = $(this).closest('.addremove-multiselect');
moveItems($(container).find('select.multiselect.available'), $(container).find('select.multiselect.selected'));
$('#hidden_ids_box').val($('#selected-select').val());
}
});
});
$.fn.sort_select_box = function(){
// Get options from select box
var selected_options = $(this).children('option');
// sort alphabetically
selected_options.sort(function(a,b) {
if (a.text > b.text) return 1;
else if (a.text < b.text) return -1;
else return 0
})
//replace with sorted my_options;
$(this).empty().append(selected_options);
var selected_in_box = $('#selected-select option').toArray().map(item => item.value).join();
$('#hidden_ids_box').empty().val(selected_in_box);
$('#count_selected_box').html($('#selected-select option').length);
$('#count_unselected_box').html($('#available-select option').length);
// clearing any selections
$("#"+this.attr('id')+" option").attr('selected', true);
}

View File

@@ -1175,11 +1175,6 @@ input[type="radio"]:checked::before {
display: table-row !important;
}
.form-control-static {
padding-top: 0px;
}
td.text-right.text-padding-number-cell {
padding-right: 30px !important;
white-space: nowrap;
@@ -1366,3 +1361,7 @@ Radio toggle styles for permission settings and check/uncheck all
.remember-toggle {
cursor: pointer;
}
.js-copy-link {
color: grey;
}

View File

@@ -91,7 +91,9 @@
color: #fff;
}
}
.btn-info {
border-color: #fff;
}
/**
The dropdown is white, so use a darker color
*/

View File

@@ -86,6 +86,9 @@
color: #fff;
}
}
.btn-info {
border-color: #fff;
}
/**
The dropdown is white, so use a darker color

View File

@@ -86,7 +86,9 @@
color: #FFF;
}
}
.btn-info {
border-color: #fff;
}
/**
The dropdown is white, so use a darker color
*/

View File

@@ -86,7 +86,9 @@
color: #fff;
}
}
.btn-info {
border-color: #fff;
}
/**
The dropdown is white, so use a darker color
*/

View File

@@ -86,7 +86,9 @@
color: #fff;
}
}
.btn-info {
border-color: #fff;
}
/**
The dropdown is white, so use a darker color

View File

@@ -84,7 +84,9 @@
color: #fff;
}
}
.btn-info {
border-color: #fff;
}
/**
The dropdown is white, so use a darker color

View File

@@ -75,6 +75,9 @@
color: #545454;
}
}
.btn-info {
border-color: #fff;
}
a.actions {
color:#fff !important;
}

View File

@@ -3,14 +3,15 @@
return array(
'asset_categories' => 'crwdns636:0crwdne636:0',
'category_name' => 'crwdns637:0crwdne637:0',
'checkin_email' => 'crwdns2034:0crwdne2034:0',
'email_to_user_upon_checkin' => 'crwdns14264:0crwdne14264:0',
'email_to_user_upon_checkin_and_checkout' => 'crwdns14266:0crwdne14266:0',
'email_to_initiator' => 'crwdns13442:0crwdne13442:0',
'checkin_email_notification' => 'crwdns2035:0crwdne2035:0',
'clone' => 'crwdns1239:0crwdne1239:0',
'create' => 'crwdns638:0crwdne638:0',
'edit' => 'crwdns1240:0crwdne1240:0',
'email_will_be_sent_due_to_global_eula' => 'crwdns11697:0crwdne11697:0',
'email_will_be_sent_due_to_category_eula' => 'crwdns11699:0crwdne11699:0',
'email_will_be_sent_due_to_global_eula' => 'crwdns14268:0crwdne14268:0',
'email_will_be_sent_due_to_category_eula' => 'crwdns14270:0crwdne14270:0',
'eula_text' => 'crwdns1241:0crwdne1241:0',
'eula_text_help' => 'crwdns1242:0crwdne1242:0',
'name' => 'crwdns1835:0crwdne1835:0',

View File

@@ -5,7 +5,7 @@ return [
'manage' => 'crwdns6501:0crwdne6501:0',
'field' => 'crwdns1487:0crwdne1487:0',
'about_fieldsets_title' => 'crwdns1488:0crwdne1488:0',
'about_fieldsets_text' => 'crwdns13838:0crwdne13838:0',
'about_fieldsets_text' => 'crwdns13896:0crwdne13896:0',
'custom_format' => 'crwdns6505:0crwdne6505:0',
'encrypt_field' => 'crwdns1792:0crwdne1792:0',
'encrypt_field_help' => 'crwdns1683:0crwdne1683:0',
@@ -67,4 +67,5 @@ return [
'checkbox' => 'crwdns13266:0crwdne13266:0',
'radio' => 'crwdns13268:0crwdne13268:0',
],
'general_help_text' => 'crwdns13902:0crwdne13902:0',
];

View File

@@ -18,7 +18,7 @@ return [
'alert_email' => 'crwdns1198:0crwdne1198:0',
'alert_email_help' => 'crwdns13160:0crwdne13160:0',
'alerts_enabled' => 'crwdns1623:0crwdne1623:0',
'alert_interval' => 'crwdns1624:0crwdne1624:0',
'alert_interval' => 'crwdns13904:0crwdne13904:0',
'alert_inv_threshold' => 'crwdns1625:0crwdne1625:0',
'allow_user_skin' => 'crwdns6048:0crwdne6048:0',
'allow_user_skin_help_text' => 'crwdns6050:0crwdne6050:0',
@@ -94,10 +94,12 @@ return [
'ldap_settings' => 'crwdns1450:0crwdne1450:0',
'ldap_client_tls_cert_help' => 'crwdns6091:0crwdne6091:0',
'ldap_location' => 'crwdns13698:0crwdne13698:0',
'ldap_location_help' => 'crwdns13700:0crwdne13700:0',
'ldap_location_help' => 'crwdns13700:0crwdne13700:0',
'ldap_login_test_help' => 'crwdns1968:0crwdne1968:0',
'ldap_login_sync_help' => 'crwdns13742:0crwdne13742:0',
'ldap_manager' => 'crwdns13702:0crwdne13702:0',
'ldap_mapping_help' => 'crwdns13898:0crwdne13898:0',
'save_ldap_first' => 'crwdns13900:0crwdne13900:0',
'ldap_server' => 'crwdns1451:0crwdne1451:0',
'ldap_server_help' => 'crwdns12578:0crwdne12578:0',
'ldap_server_cert' => 'crwdns1475:0crwdne1475:0',
@@ -345,6 +347,7 @@ return [
'asset_tags_help' => 'crwdns6457:0crwdne6457:0',
'labels' => 'crwdns6459:0crwdne6459:0',
'labels_title' => 'crwdns6461:0crwdne6461:0',
'labels_title_help' => 'crwdns14274:0crwdne14274:0',
'labels_help' => 'crwdns12840:0crwdne12840:0',
'purge_help' => 'crwdns6469:0crwdne6469:0',
'ldap_extension_warning' => 'crwdns6471:0crwdne6471:0',
@@ -379,14 +382,17 @@ return [
'label2_1d_type_help' => 'crwdns11743:0crwdne11743:0',
'label2_2d_type' => 'crwdns11745:0crwdne11745:0',
'label2_2d_type_help' => 'crwdns11747:0crwdne11747:0',
'label2_2d_target' => 'crwdns11749:0crwdne11749:0',
'label2_2d_target_help' => 'crwdns12832:0crwdne12832:0',
'label2_2d_prefix' => 'crwdns14276:0crwdne14276:0',
'label2_2d_prefix_help' => 'crwdns14278:0crwdne14278:0',
'label2_2d_target' => 'crwdns14280:0crwdne14280:0',
'label2_2d_target_help' => 'crwdns14282:0crwdne14282:0',
'select_template' => 'crwdns14284:0crwdne14284:0',
'label2_fields' => 'crwdns11753:0crwdne11753:0',
'label2_fields_help' => 'crwdns11755:0crwdne11755:0',
'label2_fields_help' => 'crwdns14286:0crwdne14286:0',
'purge_barcodes' => 'crwdns12985:0crwdne12985:0',
'help_asterisk_bold' => 'crwdns11757:0crwdne11757:0',
'help_blank_to_use' => 'crwdns11759:0crwdne11759:0',
'help_default_will_use' => 'crwdns12834:0crwdne12834:0',
'help_default_will_use' => 'crwdns14288:0crwdne14288:0',
'asset_id' => 'crwdns12836:0crwdne12836:0',
'data' => 'crwdns12838:0crwdne12838:0',
'default' => 'crwdns11763:0crwdne11763:0',
@@ -414,6 +420,9 @@ return [
'manager_view' => 'crwdns13418:0crwdne13418:0',
'manager_view_enabled_text' => 'crwdns13420:0crwdne13420:0',
'manager_view_enabled_help' => 'crwdns13422:0crwdne13422:0',
'redirect_url' => 'crwdns14258:0crwdne14258:0',
'client_secret' => 'crwdns14260:0crwdne14260:0',
'client_id' => 'crwdns14262:0crwdne14262:0',
'username_formats' => [
'username_format' => 'crwdns13090:0crwdne13090:0',
@@ -487,6 +496,7 @@ return [
'server' => 'crwdns13740:0crwdne13740:0',
'scoping' => 'crwdns13192:0crwdne13192:0',
'security' => 'crwdns13218:0crwdne13218:0',
'passwords' => 'crwdns13906:0crwdne13906:0',
],

View File

@@ -15,7 +15,8 @@ return [
'info' => 'crwdns1848:0crwdne1848:0',
'restore_user' => 'crwdns1912:0crwdne1912:0',
'last_login' => 'crwdns1130:0crwdne1130:0',
'ldap_config_text' => 'crwdns1580:0crwdne1580:0',
'ldap_config_text' => 'crwdns14248:0crwdne14248:0',
'ldap_sync_intro' => 'crwdns14250:0crwdne14250:0',
'print_assigned' => 'crwdns1993:0crwdne1993:0',
'email_assigned' => 'crwdns10484:0crwdne10484:0',
'user_notified' => 'crwdns10486:0crwdne10486:0',
@@ -53,4 +54,6 @@ return [
'all_assigned_list_generation' => 'crwdns11415:0crwdne11415:0',
'email_user_creds_on_create' => 'crwdns11517:0crwdne11517:0',
'department_manager' => 'crwdns13408:0crwdne13408:0',
'generate_password' => 'crwdns13908:0crwdne13908:0',
'individual_override' => 'crwdns13910:0crwdne13910:0',
];

View File

@@ -2,8 +2,8 @@
return array(
'accepted' => 'crwdns1344:0crwdne1344:0',
'declined' => 'crwdns1345:0crwdne1345:0',
'accepted' => 'crwdns14254:0crwdne14254:0',
'declined' => 'crwdns14256:0crwdne14256:0',
'bulk_manager_warn' => 'crwdns1849:0crwdne1849:0',
'user_exists' => 'crwdns787:0crwdne787:0',
'user_not_found' => 'crwdns12744:0crwdne12744:0',

View File

@@ -350,6 +350,7 @@ return [
'login_disabled' => 'crwdns13618:0crwdne13618:0',
'audit_due' => 'crwdns5986:0crwdne5986:0',
'audit_due_days' => 'crwdns12910:0crwdne12910:0',
'audit_due_days_view_all' => 'crwdns14238:0crwdne14238:0',
'checkin_due' => 'crwdns12176:0crwdne12176:0',
'checkin_overdue' => 'crwdns12178:0crwdne12178:0',
'checkin_due_days' => 'crwdns12912:0crwdne12912:0',
@@ -383,6 +384,14 @@ return [
'bulk_edit_about_to' => 'crwdns6193:0crwdne6193:0',
'checked_out' => 'crwdns6195:0crwdne6195:0',
'checked_out_to' => 'crwdns6197:0crwdne6197:0',
'available_users' => 'crwdns14290:0crwdne14290:0',
'add_users_to_group' => 'crwdns14292:0crwdne14292:0',
'users_to_add_to_group' => 'crwdns14294:0crwdne14294:0',
'add_all_users_to_group' => 'crwdns14296:0crwdne14296:0',
'add_selected_users_to_group' => 'crwdns14298:0crwdne14298:0',
'remove_selected_users_from_group' => 'crwdns14300:0crwdne14300:0',
'remove_all_users_from_group' => 'crwdns14302:0crwdne14302:0',
'add_users_to_group_help' => 'crwdns14304:0crwdne14304:0',
'fields' => 'crwdns6199:0crwdne6199:0',
'last_checkout' => 'crwdns6201:0crwdne6201:0',
'due_to_checkin' => 'crwdns6203:0crwdne6203:0',
@@ -390,6 +399,7 @@ return [
'reminder_checked_out_items' => 'crwdns6207:0crwdne6207:0',
'changed' => 'crwdns6209:0crwdne6209:0',
'to' => 'crwdns6211:0crwdne6211:0',
'to_user' => 'crwdns14244:0crwdne14244:0',
'report_fields_info' => 'crwdns6213:0crwdne6213:0',
'range' => 'crwdns6215:0crwdne6215:0',
'bom_remark' => 'crwdns6217:0crwdne6217:0',
@@ -614,6 +624,8 @@ return [
'user_managed_passwords_allow' => 'crwdns12874:0crwdne12874:0',
'from' => 'crwdns13170:0crwdne13170:0',
'by' => 'crwdns13172:0crwdne13172:0',
'by_user' => 'crwdns14246:0crwdne14246:0',
'ldap_sync_location' => 'crwdns14252:0crwdne14252:0',
'version' => 'crwdns13278:0crwdne13278:0',
'build' => 'crwdns13280:0crwdne13280:0',
'use_cloned_image' => 'crwdns13522:0crwdne13522:0',

View File

@@ -100,7 +100,8 @@ return [
'the_following_item' => 'crwdns1761:0crwdne1761:0',
'to_reset' => 'crwdns1763:0crwdne1763:0',
'type' => 'crwdns1764:0crwdne1764:0',
'upcoming-audits' => 'crwdns6002:0crwdne6002:0',
'upcoming-audits' => 'crwdns14240:0crwdne14240:0',
'upcoming-audits_click' => 'crwdns14242:0crwdne14242:0',
'user' => 'crwdns2032:0crwdne2032:0',
'username' => 'crwdns2033:0crwdne2033:0',
'unaccepted_asset_reminder' => 'crwdns13011:0crwdne13011:0',

View File

@@ -0,0 +1,424 @@
<?php
return array(
/*
|--------------------------------------------------------------------------
| Permissions
|--------------------------------------------------------------------------
| The following language lines are used in the user permissions system.
| Each permission has a 'name' and a 'note' that describes
| the permission in detail.
|
| DO NOT edit the keys (left-hand side) of each permission as these are
| used throughout the system for translations.
|---------------------------------------------------------------------------
*/
"superuser" => [
'name' => 'crwdns13912:0crwdne13912:0',
'note' => 'crwdns13914:0crwdne13914:0',
],
'admin' => [
'name' => 'crwdns13916:0crwdne13916:0',
'note' => 'crwdns13918:0crwdne13918:0',
],
'import' => [
'name' => 'crwdns13920:0crwdne13920:0',
'note' => 'crwdns13922:0crwdne13922:0',
],
'reports' => [
'name' => 'crwdns13924:0crwdne13924:0',
'note' => 'crwdns13926:0crwdne13926:0',
],
'assets' =>
[
'name' => 'crwdns13928:0crwdne13928:0',
'note' => 'crwdns13930:0crwdne13930:0',
],
'assetsview' => [
'name' => 'crwdns13932:0crwdne13932:0',
],
'assetscreate' => [
'name' => 'crwdns13934:0crwdne13934:0',
],
'assetsedit' => [
'name' => 'crwdns13936:0crwdne13936:0',
],
'assetsdelete' => [
'name' => 'crwdns13938:0crwdne13938:0',
],
'assetscheckin' => [
'name' => 'crwdns13940:0crwdne13940:0',
'note' => 'crwdns13942:0crwdne13942:0',
],
'assetscheckout' => [
'name' => 'crwdns13944:0crwdne13944:0',
'note' => 'crwdns13946:0crwdne13946:0',
],
'assetsaudit' => [
'name' => 'crwdns13948:0crwdne13948:0',
'note' => 'crwdns13950:0crwdne13950:0',
],
'assetsviewrequestable' => [
'name' => 'crwdns13952:0crwdne13952:0',
'note' => 'crwdns13954:0crwdne13954:0',
],
'assetsviewencrypted-custom-fields' => [
'name' => 'crwdns13956:0crwdne13956:0',
'note' => 'crwdns13958:0crwdne13958:0',
],
'accessories' => [
'name' => 'crwdns13960:0crwdne13960:0',
'note' => 'crwdns13962:0crwdne13962:0',
],
'accessoriesview' => [
'name' => 'crwdns13964:0crwdne13964:0',
],
'accessoriescreate' => [
'name' => 'crwdns13966:0crwdne13966:0',
],
'accessoriesedit' => [
'name' => 'crwdns13968:0crwdne13968:0',
],
'accessoriesdelete' => [
'name' => 'crwdns13970:0crwdne13970:0',
],
'accessoriescheckout' => [
'name' => 'crwdns13972:0crwdne13972:0',
'note' => 'crwdns13974:0crwdne13974:0',
],
'accessoriescheckin' => [
'name' => 'crwdns13976:0crwdne13976:0',
'note' => 'crwdns13978:0crwdne13978:0',
],
'accessoriesfiles' => [
'name' => 'crwdns13980:0crwdne13980:0',
'note' => 'crwdns13982:0crwdne13982:0',
],
'consumables' => [
'name' => 'crwdns13984:0crwdne13984:0',
'note' => 'crwdns13986:0crwdne13986:0',
],
'consumablesview' => [
'name' => 'crwdns13988:0crwdne13988:0',
],
'consumablescreate' => [
'name' => 'crwdns13990:0crwdne13990:0',
],
'consumablesedit' => [
'name' => 'crwdns13992:0crwdne13992:0',
],
'consumablesdelete' => [
'name' => 'crwdns13994:0crwdne13994:0',
],
'consumablescheckout' => [
'name' => 'crwdns13996:0crwdne13996:0',
'note' => 'crwdns13998:0crwdne13998:0',
],
'consumablesfiles' => [
'name' => 'crwdns14000:0crwdne14000:0',
'note' => 'crwdns14002:0crwdne14002:0',
],
'licenses' => [
'name' => 'crwdns14004:0crwdne14004:0',
'note' => 'crwdns14006:0crwdne14006:0',
],
'licensesview' => [
'name' => 'crwdns14008:0crwdne14008:0',
],
'licensescreate' => [
'name' => 'crwdns14010:0crwdne14010:0',
],
'licensesedit' => [
'name' => 'crwdns14012:0crwdne14012:0',
],
'licensesdelete' => [
'name' => 'crwdns14014:0crwdne14014:0',
],
'licensescheckout' => [
'name' => 'crwdns14016:0crwdne14016:0',
'note' => 'crwdns14018:0crwdne14018:0',
],
'licensescheckin' => [
'name' => 'crwdns14020:0crwdne14020:0',
'note' => 'crwdns14022:0crwdne14022:0',
],
'licensesfiles' => [
'name' => 'crwdns14024:0crwdne14024:0',
'note' => 'crwdns14026:0crwdne14026:0',
],
'licenseskeys' => [
'name' => 'crwdns14028:0crwdne14028:0',
'note' => 'crwdns14030:0crwdne14030:0',
],
'components' => [
'name' => 'crwdns14032:0crwdne14032:0',
'note' => 'crwdns14034:0crwdne14034:0',
],
'componentsview' => [
'name' => 'crwdns14036:0crwdne14036:0',
],
'componentscreate' => [
'name' => 'crwdns14038:0crwdne14038:0',
],
'componentsedit' => [
'name' => 'crwdns14040:0crwdne14040:0',
],
'componentsdelete' => [
'name' => 'crwdns14042:0crwdne14042:0',
],
'componentsfiles' => [
'name' => 'crwdns14044:0crwdne14044:0',
'note' => 'crwdns14046:0crwdne14046:0',
],
'componentscheckout' => [
'name' => 'crwdns14048:0crwdne14048:0',
'note' => 'crwdns14050:0crwdne14050:0',
],
'componentscheckin' => [
'name' => 'crwdns14052:0crwdne14052:0',
'note' => 'crwdns14054:0crwdne14054:0',
],
'kits' => [
'name' => 'crwdns14056:0crwdne14056:0',
'note' => 'crwdns14058:0crwdne14058:0',
],
'kitsview' => [
'name' => 'crwdns14060:0crwdne14060:0',
],
'kitscreate' => [
'name' => 'crwdns14062:0crwdne14062:0',
],
'kitsedit' => [
'name' => 'crwdns14064:0crwdne14064:0',
],
'kitsdelete' => [
'name' => 'crwdns14066:0crwdne14066:0',
],
'users' => [
'name' => 'crwdns14068:0crwdne14068:0',
'note' => 'crwdns14070:0crwdne14070:0',
],
'usersview' => [
'name' => 'crwdns14072:0crwdne14072:0',
],
'userscreate' => [
'name' => 'crwdns14074:0crwdne14074:0',
],
'usersedit' => [
'name' => 'crwdns14076:0crwdne14076:0',
],
'usersdelete' => [
'name' => 'crwdns14078:0crwdne14078:0',
],
'models' => [
'name' => 'crwdns14080:0crwdne14080:0',
'note' => 'crwdns14082:0crwdne14082:0',
],
'modelsview' => [
'name' => 'crwdns14084:0crwdne14084:0',
],
'modelscreate' => [
'name' => 'crwdns14086:0crwdne14086:0',
],
'modelsedit' => [
'name' => 'crwdns14088:0crwdne14088:0',
],
'modelsdelete' => [
'name' => 'crwdns14090:0crwdne14090:0',
],
'categories' => [
'name' => 'crwdns14092:0crwdne14092:0',
'note' => 'crwdns14094:0crwdne14094:0',
],
'categoriesview' => [
'name' => 'crwdns14096:0crwdne14096:0',
],
'categoriescreate' => [
'name' => 'crwdns14098:0crwdne14098:0',
],
'categoriesedit' => [
'name' => 'crwdns14100:0crwdne14100:0',
],
'categoriesdelete' => [
'name' => 'crwdns14102:0crwdne14102:0',
],
'departments' => [
'name' => 'crwdns14104:0crwdne14104:0',
'note' => 'crwdns14106:0crwdne14106:0',
],
'departmentsview' => [
'name' => 'crwdns14108:0crwdne14108:0',
],
'departmentscreate' => [
'name' => 'crwdns14110:0crwdne14110:0',
],
'departmentsedit' => [
'name' => 'crwdns14112:0crwdne14112:0',
],
'departmentsdelete' => [
'name' => 'crwdns14114:0crwdne14114:0',
],
'locations' => [
'name' => 'crwdns14116:0crwdne14116:0',
'note' => 'crwdns14118:0crwdne14118:0',
],
'locationsview' => [
'name' => 'crwdns14120:0crwdne14120:0',
],
'locationscreate' => [
'name' => 'crwdns14122:0crwdne14122:0',
],
'locationsedit' => [
'name' => 'crwdns14124:0crwdne14124:0',
],
'locationsdelete' => [
'name' => 'crwdns14126:0crwdne14126:0',
],
'status-labels' => [
'name' => 'crwdns14128:0crwdne14128:0',
'note' => 'crwdns14130:0crwdne14130:0',
],
'statuslabelsview' => [
'name' => 'crwdns14132:0crwdne14132:0',
],
'statuslabelscreate' => [
'name' => 'crwdns14134:0crwdne14134:0',
],
'statuslabelsedit' => [
'name' => 'crwdns14136:0crwdne14136:0',
],
'statuslabelsdelete' => [
'name' => 'crwdns14138:0crwdne14138:0',
],
'custom-fields' => [
'name' => 'crwdns14140:0crwdne14140:0',
'note' => 'crwdns14142:0crwdne14142:0',
],
'customfieldsview' => [
'name' => 'crwdns14144:0crwdne14144:0',
],
'customfieldscreate' => [
'name' => 'crwdns14146:0crwdne14146:0',
],
'customfieldsedit' => [
'name' => 'crwdns14148:0crwdne14148:0',
],
'customfieldsdelete' => [
'name' => 'crwdns14150:0crwdne14150:0',
],
'suppliers' => [
'name' => 'crwdns14152:0crwdne14152:0',
'note' => 'crwdns14154:0crwdne14154:0',
],
'suppliersview' => [
'name' => 'crwdns14156:0crwdne14156:0',
],
'supplierscreate' => [
'name' => 'crwdns14158:0crwdne14158:0',
],
'suppliersedit' => [
'name' => 'crwdns14160:0crwdne14160:0',
],
'suppliersdelete' => [
'name' => 'crwdns14162:0crwdne14162:0',
],
'manufacturers' => [
'name' => 'crwdns14164:0crwdne14164:0',
'note' => 'crwdns14166:0crwdne14166:0',
],
'manufacturersview' => [
'name' => 'crwdns14168:0crwdne14168:0',
],
'manufacturerscreate' => [
'name' => 'crwdns14170:0crwdne14170:0',
],
'manufacturersedit' => [
'name' => 'crwdns14172:0crwdne14172:0',
],
'manufacturersdelete' => [
'name' => 'crwdns14174:0crwdne14174:0',
],
'companies' => [
'name' => 'crwdns14176:0crwdne14176:0',
'note' => 'crwdns14178:0crwdne14178:0',
],
'companiesview' => [
'name' => 'crwdns14180:0crwdne14180:0',
],
'companiescreate' => [
'name' => 'crwdns14182:0crwdne14182:0',
],
'companiesedit' => [
'name' => 'crwdns14184:0crwdne14184:0',
],
'companiesdelete' => [
'name' => 'crwdns14186:0crwdne14186:0',
],
'user-self-accounts' => [
'name' => 'crwdns14188:0crwdne14188:0',
'note' => 'crwdns14190:0crwdne14190:0',
],
'selftwo-factor' => [
'name' => 'crwdns14192:0crwdne14192:0',
'note' => 'crwdns14194:0crwdne14194:0',
],
'selfapi' => [
'name' => 'crwdns14196:0crwdne14196:0',
'note' => 'crwdns14198:0crwdne14198:0',
],
'selfedit-location' => [
'name' => 'crwdns14200:0crwdne14200:0',
'note' => 'crwdns14202:0crwdne14202:0',
],
'selfcheckout-assets' => [
'name' => 'crwdns14204:0crwdne14204:0',
'note' => 'crwdns14206:0crwdne14206:0',
],
'selfview-purchase-cost' => [
'name' => 'crwdns14208:0crwdne14208:0',
'note' => 'crwdns14210:0crwdne14210:0',
],
'depreciations' => [
'name' => 'crwdns14212:0crwdne14212:0',
'note' => 'crwdns14214:0crwdne14214:0',
],
'depreciationsview' => [
'name' => 'crwdns14216:0crwdne14216:0',
],
'depreciationsedit' => [
'name' => 'crwdns14218:0crwdne14218:0',
],
'depreciationsdelete' => [
'name' => 'crwdns14220:0crwdne14220:0',
],
'depreciationscreate' => [
'name' => 'crwdns14222:0crwdne14222:0',
],
'grant_all' => 'crwdns14224:0crwdne14224:0',
'deny_all' => 'crwdns14226:0crwdne14226:0',
'inherit_all' => 'crwdns14228:0crwdne14228:0',
'grant' => 'crwdns14230:0crwdne14230:0',
'deny' => 'crwdns14232:0crwdne14232:0',
'inherit' => 'crwdns14234:0crwdne14234:0',
'use_groups' => 'crwdns14236:0crwdne14236:0'
);

View File

@@ -174,7 +174,7 @@ return [
'ulid' => 'crwdns12552:0crwdne12552:0',
'uuid' => 'crwdns12554:0crwdne12554:0',
'fmcs_location' => 'crwdns13232:0crwdne13232:0',
'is_unique_across_company_and_location' => 'crwdns14272:0crwdne14272:0',
/*
|--------------------------------------------------------------------------

View File

@@ -3,14 +3,15 @@
return array(
'asset_categories' => 'Bate kategorieë',
'category_name' => 'Kategorie Naam',
'checkin_email' => 'Stuur e-pos aan gebruiker by aanmelding/afmelding.',
'email_to_user_upon_checkin' => 'Send email to user upon checkin.',
'email_to_user_upon_checkin_and_checkout' => 'Send email to user upon checkin/checkout.',
'email_to_initiator' => 'Send email to you when user accepts or declines checkout.',
'checkin_email_notification' => 'Hierdie gebruiker sal \'n e-pos gestuur word by aanmelding/afmelding.',
'clone' => 'Klone Kategorie',
'create' => 'Skep Kategorie',
'edit' => 'Wysig Kategorie',
'email_will_be_sent_due_to_global_eula' => 'An email will be sent to the user because the global EULA is being used.',
'email_will_be_sent_due_to_category_eula' => 'An email will be sent to the user because a EULA is set for this category.',
'email_will_be_sent_due_to_global_eula' => 'An email will be sent to the user upon checkout because the global EULA is being used.',
'email_will_be_sent_due_to_category_eula' => 'An email will be sent to the user upon checkout because a EULA is set for this category.',
'eula_text' => 'Kategorie EULA',
'eula_text_help' => 'Hierdie veld laat u toe om u EULA\'s vir spesifieke soorte bates aan te pas. As u slegs een EULA vir al u bates het, kan u die onderstaande boks selekteer om die primêre standaard te gebruik.',
'name' => 'Kategorie Naam',

View File

@@ -5,7 +5,7 @@ return [
'manage' => 'Manage',
'field' => 'veld',
'about_fieldsets_title' => 'Oor Fieldsets',
'about_fieldsets_text' => 'Veldstelle stel jou in staat om groepe van persoonlike velde te skep wat gereeld hergebruik word vir spesifieke tipe bates.',
'about_fieldsets_text' => 'Fieldsets allow you to create groups of custom fields that are frequently re-used for specific asset model types.',
'custom_format' => 'Custom Regex format...',
'encrypt_field' => 'Enkripteer die waarde van hierdie veld in die databasis',
'encrypt_field_help' => 'WAARSKUWING: Om \'n veld te enkripteer, maak dit onondersoekbaar.',
@@ -67,4 +67,5 @@ return [
'checkbox' => 'Checkbox',
'radio' => 'Radio Buttons',
],
'general_help_text' => 'Custom fields store additional information not covered by the default asset fields. <a href="https://snipe-it.readme.io/docs/custom-fields#/"><i class="fa fa-external-link"></i></a>.',
];

View File

@@ -18,7 +18,7 @@ return [
'alert_email' => 'Stuur kennisgewings aan',
'alert_email_help' => 'Email addresses or distribution lists you want alerts to be sent to, comma separated.',
'alerts_enabled' => 'Alerts aangeskakel',
'alert_interval' => 'Uitgaande Alert Drempel (in dae)',
'alert_interval' => 'Expiring Alerts Threshold',
'alert_inv_threshold' => 'Voorraadwaarskuwingsdrempel',
'allow_user_skin' => 'Allow User Skin',
'allow_user_skin_help_text' => 'Checking this box will allow a user to override the UI skin with a different one.',
@@ -94,10 +94,12 @@ return [
'ldap_settings' => 'LDAP-instellings',
'ldap_client_tls_cert_help' => 'Client-Side TLS Certificate and Key for LDAP connections are usually only useful in Google Workspace configurations with "Secure LDAP." Both are required.',
'ldap_location' => 'LDAP Location Field',
'ldap_location_help' => 'The LDAP Location field should be used if <strong>an OU is not being used in the Base Bind DN.</strong> Leave this blank if an OU search is being used.',
'ldap_location_help' => 'The LDAP Location field should be used if <strong>an OU is not being used in the Base Bind DN.</strong> Leave this blank if an OU search is being used.',
'ldap_login_test_help' => 'Enter a valid LDAP username and password from the base DN you specified above to test whether your LDAP login is configured correctly. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
'ldap_login_sync_help' => 'This only tests that LDAP can sync and that your fields are mapped correctly. If your LDAP Authentication query is not correct, users may still not be able to login. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
'ldap_manager' => 'LDAP Manager Field',
'ldap_mapping_help' => 'If your fields are not syncing correctly, try using the <strong>lower-case version</strong> of the field names. Display Name (<code>displayName</code>) in your LDAP/AD should be mapped here as <code>displayname</code>, <code>givenName</code> should be <code>givenname</code>, <code>sAMAccountName</code> as <code>samaccountname</code>, etc. <a href="https://snipe-it.readme.io/docs/ldap-sync-login#field-mapping-for-syncing"><i class="fa fa-external-link"></i></a>',
'save_ldap_first' => 'You must save your LDAP settings before testing. Save your settings on this page and then reload to test LDAP login and/or sync.',
'ldap_server' => 'LDAP-bediener',
'ldap_server_help' => 'This should start with ldap:// (for unencrypted) or ldaps:// (for TLS or SSL)',
'ldap_server_cert' => 'LDAP SSL-sertifikaat-validering',
@@ -345,6 +347,7 @@ return [
'asset_tags_help' => 'Incrementing and prefixes',
'labels' => 'Labels',
'labels_title' => 'Update Label Settings',
'labels_title_help' => 'Changes made here must be saved before they will be reflected in the labels or the preview below.',
'labels_help' => 'Barcodes &amp; label settings',
'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.',
@@ -379,14 +382,17 @@ return [
'label2_1d_type_help' => 'Format for 1D barcodes',
'label2_2d_type' => '2D Barcode Type',
'label2_2d_type_help' => 'Format for 2D barcodes',
'label2_2d_target' => '2D Barcode Target',
'label2_2d_target_help' => 'The data that will be contained in the 2D barcode',
'label2_2d_prefix' => '2D Barcode Prefix',
'label2_2d_prefix_help' => 'This text will be prepended to the 2D Barcode Target value selected below when the 2D code is scanned. This can be used to prepend an external URL or any other value that you might need.',
'label2_2d_target' => '2D Barcode Content',
'label2_2d_target_help' => 'The data that will be contained in the 2D barcode. This can link to the asset directly in Snipe-IT or can be one of the non-linked field values. If you use the prefix above, it will be prepended to this value.',
'select_template' => 'Select a Template',
'label2_fields' => 'Field Definitions',
'label2_fields_help' => 'Fields can be added, removed, and reordered in the left column. For each field, multiple options for Label and DataSource can be added, removed, and reordered in the right column.',
'label2_fields_help' => 'Fields can be added, removed, and reordered in the left column. For each field, multiple options for Label and DataSource can be added, removed, and reordered in the right column. Field changes made here will be reflected immediately in the preview below but must be saved for them to apply to new labels.',
'purge_barcodes' => 'Purge Barcodes',
'help_asterisk_bold' => 'Text entered as <code>**text**</code> will be displayed as bold',
'help_blank_to_use' => 'Leave blank to use the value from <code>:setting_name</code>',
'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. ',
'help_default_will_use' => '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',
'default' => 'Default',
@@ -414,6 +420,9 @@ return [
'manager_view' => 'Manager View',
'manager_view_enabled_text' => 'Enable Manager View',
'manager_view_enabled_help' => 'Allow managers to view assigned items to their direct and indirect reports in their account view.',
'redirect_url' => 'Redirect URL',
'client_secret' => 'Client Secret',
'client_id' => 'Client ID',
'username_formats' => [
'username_format' => 'Gebruikernaam',
@@ -487,6 +496,7 @@ return [
'server' => 'Server Settings',
'scoping' => 'Scoping',
'security' => 'Security Preferences',
'passwords' => 'Password Security Preferences',
],

View File

@@ -15,7 +15,8 @@ return [
'info' => 'info',
'restore_user' => 'Klik hier om dit te herstel.',
'last_login' => 'Laaste Aanmelding',
'ldap_config_text' => 'LDAP-konfigurasie-instellings kan Admin> Instellings gevind word. Die (opsionele) gekose ligging sal vir alle ingevoerde gebruikers gestel word.',
'ldap_config_text' => 'The selected location will be set for ALL imported users. This will overwrite their existing location, and is an unusual use-case, so leaving this blank is typically best.',
'ldap_sync_intro' => 'Click on the button below to manually sync your LDAP users. To learn more about configuring LDAP sync to run automatically, please see the <a href=":link" target="_blank">documentation <i class="fa fa-external-link"></i></a> .',
'print_assigned' => 'Print All Assigned',
'email_assigned' => 'Email List of All Assigned',
'user_notified' => 'User has been emailed a list of their currently assigned items.',
@@ -53,4 +54,6 @@ return [
'all_assigned_list_generation' => 'Generated on:',
'email_user_creds_on_create' => 'Email this user their credentials?',
'department_manager' => 'Department Manager',
'generate_password' => 'Generate random password',
'individual_override' => 'This user has at least one individual permission set, which may override group permissions.',
];

View File

@@ -2,8 +2,8 @@
return array(
'accepted' => 'U het hierdie bate suksesvol aanvaar.',
'declined' => 'Jy het hierdie bate suksesvol geweier.',
'accepted' => 'You have successfully accepted this item.',
'declined' => 'You have successfully declined this item.',
'bulk_manager_warn' => 'Jou gebruikers is suksesvol opgedateer, maar jou bestuurderinskrywing is nie gestoor nie, want die bestuurder wat jy gekies het, was ook in die gebruikerslys om geredigeer te word, en gebruikers mag nie hul eie bestuurder wees nie. Kies asseblief u gebruikers weer, behalwe die bestuurder.',
'user_exists' => 'Gebruiker bestaan reeds!',
'user_not_found' => 'User does not exist or you do not have permission view them.',

View File

@@ -350,6 +350,7 @@ return [
'login_disabled' => 'Login Disabled',
'audit_due' => 'Due for Audit',
'audit_due_days' => '{}Assets Due or Overdue for Audit|[1]Assets Due or Overdue for Audit Within a Day|[2,*]Assets Due or Overdue for Audit Within :days Days',
'audit_due_days_view_all' => '{}Assets Due or Overdue for Audit|[1]View All Assets Due or Overdue for Audit Within a Day|[2,*]View All Assets Due or Overdue for Audit Within :days Days',
'checkin_due' => 'Due for Checkin',
'checkin_overdue' => 'Overdue for Checkin',
'checkin_due_days' => '{}Due for Checkin|[1]Assets Due for Checkin Within :days Day|[2,*]Assets Due for Checkin Within :days Days',
@@ -383,6 +384,14 @@ return [
'bulk_edit_about_to' => 'You are about to edit the following: ',
'checked_out' => 'Gekontroleer',
'checked_out_to' => 'Checked out to',
'available_users' => 'Available Users to Add',
'add_users_to_group' => 'Add Users to Group',
'users_to_add_to_group' => 'Users to Add',
'add_all_users_to_group' => 'Add all users to group',
'add_selected_users_to_group' => 'Add selected users to group',
'remove_selected_users_from_group' => 'Remove selected users from group',
'remove_all_users_from_group' => 'Remove all users from group',
'add_users_to_group_help' => 'Use the arrows to add or remove users from this group. You can select multiple users by holding down the Ctrl (Windows) or Command (Mac) key while clicking.',
'fields' => 'Fields',
'last_checkout' => 'Last Checkout',
'due_to_checkin' => 'The following :count items are due to be checked in soon:',
@@ -390,6 +399,7 @@ return [
'reminder_checked_out_items' => 'This is a reminder of the items currently checked out to you. If you feel this list is inaccurate (something is missing, or something appears here that you believe you never received), please email :reply_to_name at :reply_to_address.',
'changed' => 'Changed',
'to' => 'To',
'to_user' => 'To',
'report_fields_info' => '<p>Select the fields you would like to include in your custom report, and click Generate. The file (custom-asset-report-YYYY-mm-dd.csv) will download automatically, and you can open it in Excel.</p>
<p>If you would like to export only certain assets, use the options below to fine-tune your results.</p>',
'range' => 'Range',
@@ -615,6 +625,8 @@ return [
'user_managed_passwords_allow' => 'Allow users to manage their own passwords',
'from' => 'From',
'by' => 'deur',
'by_user' => 'deur',
'ldap_sync_location' => 'Sync All Users to This Location (Optional)',
'version' => 'Version',
'build' => 'build',
'use_cloned_image' => 'Clone image from original',

View File

@@ -100,7 +100,8 @@ return [
'the_following_item' => 'Die volgende item is nagegaan:',
'to_reset' => 'Om jou webadres te herstel, voltooi hierdie vorm:',
'type' => 'tipe',
'upcoming-audits' => 'There is :count asset that is coming up for audit within :threshold days.|There are :count assets that are coming up for audit within :threshold days.',
'upcoming-audits' => 'There is :count asset that is coming up for audit within :threshold days.|There are :count assets that are coming up for audit within :threshold days. ',
'upcoming-audits_click' => 'This email may not contain the full list so as not to exceed email size limits. Click on the button below to view all assets due for audit.',
'user' => 'gebruiker',
'username' => 'Gebruikersnaam',
'unaccepted_asset_reminder' => 'Reminder: You have Unaccepted Assets.',

View File

@@ -0,0 +1,424 @@
<?php
return array(
/*
|--------------------------------------------------------------------------
| Permissions
|--------------------------------------------------------------------------
| The following language lines are used in the user permissions system.
| Each permission has a 'name' and a 'note' that describes
| the permission in detail.
|
| DO NOT edit the keys (left-hand side) of each permission as these are
| used throughout the system for translations.
|---------------------------------------------------------------------------
*/
"superuser" => [
'name' => 'Super User',
'note' => 'Determines whether the user has full access to all aspects of the admin. This setting overrides ALL more specific and restrictive permissions throughout the system. ',
],
'admin' => [
'name' => 'Admin Access',
'note' => 'Determines whether the user has access to most aspects of the system EXCEPT the System Admin Settings. These users will be able to manage users, locations, categories, etc, but ARE constrained by Full Multiple Company Support if it is enabled.',
],
'import' => [
'name' => 'CSV Import',
'note' => 'This will allow users to import even if access to users, assets, etc is denied elsewhere.',
],
'reports' => [
'name' => 'Reports Access',
'note' => 'Determines whether the user has access to the Reports section of the application.',
],
'assets' =>
[
'name' => 'bates',
'note' => 'Grants access to the Assets section of the application.',
],
'assetsview' => [
'name' => 'View Assets',
],
'assetscreate' => [
'name' => 'Create New Assets',
],
'assetsedit' => [
'name' => 'Edit Assets',
],
'assetsdelete' => [
'name' => 'Delete Assets',
],
'assetscheckin' => [
'name' => 'Check In',
'note' => 'Check assets back into inventory that are currently checked out.',
],
'assetscheckout' => [
'name' => 'Check Out',
'note' => 'Assign assets in inventory by checking them out.',
],
'assetsaudit' => [
'name' => 'Audit Assets',
'note' => 'Allows the user to mark an asset as physically inventoried.',
],
'assetsviewrequestable' => [
'name' => 'View Requestable Assets',
'note' => 'Allows the user to view assets that are marked as requestable.',
],
'assetsviewencrypted-custom-fields' => [
'name' => 'View Encrypted Custom Fields',
'note' => 'Allows the user to view and modify encrypted custom fields on assets.',
],
'accessories' => [
'name' => 'bykomstighede',
'note' => 'Grants access to the Accessories section of the application.',
],
'accessoriesview' => [
'name' => 'View Accessories',
],
'accessoriescreate' => [
'name' => 'Create New Accessories',
],
'accessoriesedit' => [
'name' => 'Edit Accessories',
],
'accessoriesdelete' => [
'name' => 'Delete Accessories',
],
'accessoriescheckout' => [
'name' => 'Check Out Accessories',
'note' => 'Assign accessories in inventory by checking them out.',
],
'accessoriescheckin' => [
'name' => 'Check In Accessories',
'note' => 'Check accessories back into inventory that are currently checked out.',
],
'accessoriesfiles' => [
'name' => 'Manage Accessory Files',
'note' => 'Allows the user to upload, download, and delete files associated with accessories.',
],
'consumables' => [
'name' => 'Consumables',
'note' => 'Grants access to the Consumables section of the application.',
],
'consumablesview' => [
'name' => 'View Consumables',
],
'consumablescreate' => [
'name' => 'Create New Consumables',
],
'consumablesedit' => [
'name' => 'Edit Consumables',
],
'consumablesdelete' => [
'name' => 'Delete Consumables',
],
'consumablescheckout' => [
'name' => 'Check Out Consumables',
'note' => 'Assign consumables in inventory by checking them out.',
],
'consumablesfiles' => [
'name' => 'Manage Consumable Files',
'note' => 'Allows the user to upload, download, and delete files associated with consumables.',
],
'licenses' => [
'name' => 'lisensies',
'note' => 'Grants access to the Licenses section of the application.',
],
'licensesview' => [
'name' => 'View Licenses',
],
'licensescreate' => [
'name' => 'Create New Licenses',
],
'licensesedit' => [
'name' => 'Edit Licenses',
],
'licensesdelete' => [
'name' => 'Delete Licenses',
],
'licensescheckout' => [
'name' => 'Assign Licenses',
'note' => 'Allows the user to assign licenses to assets or users.',
],
'licensescheckin' => [
'name' => 'Unassign Licenses',
'note' => 'Allows the user to unassign licenses from assets or users.',
],
'licensesfiles' => [
'name' => 'Manage License Files',
'note' => 'Allows the user to upload, download, and delete files associated with licenses.',
],
'licenseskeys' => [
'name' => 'Manage License Keys',
'note' => 'Allows the user to view product keys associated with licenses.',
],
'components' => [
'name' => 'komponente',
'note' => 'Grants access to the Components section of the application.',
],
'componentsview' => [
'name' => 'View Components',
],
'componentscreate' => [
'name' => 'Create New Components',
],
'componentsedit' => [
'name' => 'Edit Components',
],
'componentsdelete' => [
'name' => 'Delete Components',
],
'componentsfiles' => [
'name' => 'Manage Component Files',
'note' => 'Allows the user to upload, download, and delete files associated with components.',
],
'componentscheckout' => [
'name' => 'Check Out Components',
'note' => 'Assign components in inventory by checking them out.',
],
'componentscheckin' => [
'name' => 'Check In Components',
'note' => 'Check components back into inventory that are currently checked out.',
],
'kits' => [
'name' => 'Predefined Kits',
'note' => 'Grants access to the Predefined Kits section of the application.',
],
'kitsview' => [
'name' => 'View Predefined Kits',
],
'kitscreate' => [
'name' => 'Create New Predefined Kits',
],
'kitsedit' => [
'name' => 'Edit Predefined Kits',
],
'kitsdelete' => [
'name' => 'Delete Predefined Kits',
],
'users' => [
'name' => 'gebruikers',
'note' => 'Grants access to the Users section of the application.',
],
'usersview' => [
'name' => 'Bekyk gebruikers',
],
'userscreate' => [
'name' => 'Create New Users',
],
'usersedit' => [
'name' => 'Edit Users',
],
'usersdelete' => [
'name' => 'Delete Users',
],
'models' => [
'name' => 'Models',
'note' => 'Grants access to the Models section of the application.',
],
'modelsview' => [
'name' => 'Kyk Modelle',
],
'modelscreate' => [
'name' => 'Create New Models',
],
'modelsedit' => [
'name' => 'Edit Models',
],
'modelsdelete' => [
'name' => 'Delete Models',
],
'categories' => [
'name' => 'kategorieë',
'note' => 'Grants access to the Categories section of the application.',
],
'categoriesview' => [
'name' => 'View Categories',
],
'categoriescreate' => [
'name' => 'Create New Categories',
],
'categoriesedit' => [
'name' => 'Edit Categories',
],
'categoriesdelete' => [
'name' => 'Delete Categories',
],
'departments' => [
'name' => 'departemente',
'note' => 'Grants access to the Departments section of the application.',
],
'departmentsview' => [
'name' => 'View Departments',
],
'departmentscreate' => [
'name' => 'Create New Departments',
],
'departmentsedit' => [
'name' => 'Edit Departments',
],
'departmentsdelete' => [
'name' => 'Delete Departments',
],
'locations' => [
'name' => 'plekke',
'note' => 'Grants access to the Locations section of the application.',
],
'locationsview' => [
'name' => 'View Locations',
],
'locationscreate' => [
'name' => 'Create New Locations',
],
'locationsedit' => [
'name' => 'Edit Locations',
],
'locationsdelete' => [
'name' => 'Delete Locations',
],
'status-labels' => [
'name' => 'Status etikette',
'note' => 'Grants access to the Status Labels section of the application used by Assets.',
],
'statuslabelsview' => [
'name' => 'View Status Labels',
],
'statuslabelscreate' => [
'name' => 'Create New Status Labels',
],
'statuslabelsedit' => [
'name' => 'Edit Status Labels',
],
'statuslabelsdelete' => [
'name' => 'Delete Status Labels',
],
'custom-fields' => [
'name' => 'Aangepaste velde',
'note' => 'Grants access to the Custom Fields section of the application used by Assets.',
],
'customfieldsview' => [
'name' => 'View Custom Fields',
],
'customfieldscreate' => [
'name' => 'Create New Custom Fields',
],
'customfieldsedit' => [
'name' => 'Edit Custom Fields',
],
'customfieldsdelete' => [
'name' => 'Delete Custom Fields',
],
'suppliers' => [
'name' => 'Verskaffers',
'note' => 'Grants access to the Suppliers section of the application.',
],
'suppliersview' => [
'name' => 'View Suppliers',
],
'supplierscreate' => [
'name' => 'Create New Suppliers',
],
'suppliersedit' => [
'name' => 'Edit Suppliers',
],
'suppliersdelete' => [
'name' => 'Delete Suppliers',
],
'manufacturers' => [
'name' => 'vervaardigers',
'note' => 'Grants access to the Manufacturers section of the application.',
],
'manufacturersview' => [
'name' => 'View Manufacturers',
],
'manufacturerscreate' => [
'name' => 'Create New Manufacturers',
],
'manufacturersedit' => [
'name' => 'Edit Manufacturers',
],
'manufacturersdelete' => [
'name' => 'Delete Manufacturers',
],
'companies' => [
'name' => 'maatskappye',
'note' => 'Grants access to the Companies section of the application.',
],
'companiesview' => [
'name' => 'View Companies',
],
'companiescreate' => [
'name' => 'Create New Companies',
],
'companiesedit' => [
'name' => 'Edit Companies',
],
'companiesdelete' => [
'name' => 'Delete Companies',
],
'user-self-accounts' => [
'name' => 'User Self Accounts',
'note' => 'Grants non-admin users the ability to manage certain aspects of their own user accounts.',
],
'selftwo-factor' => [
'name' => 'Manage Two-Factor Authentication',
'note' => 'Allows users to enable, disable, and manage two-factor authentication for their own accounts.',
],
'selfapi' => [
'name' => 'Manage API Tokens',
'note' => 'Allows users to create, view, and revoke their own API tokens. User tokens will have the same permissions as the user who created them.',
],
'selfedit-location' => [
'name' => 'Edit Location',
'note' => 'Allows users to edit the location associated with their own user account.',
],
'selfcheckout-assets' => [
'name' => 'Self Check Out Assets',
'note' => 'Allows users to check out assets to themselves without admin intervention.',
],
'selfview-purchase-cost' => [
'name' => 'View Purchase Cost',
'note' => 'Allows users to view the purchase cost of items in their account view.',
],
'depreciations' => [
'name' => 'Depreciation Management',
'note' => 'Allows users to manage and view asset depreciation details.',
],
'depreciationsview' => [
'name' => 'View Depreciation Details',
],
'depreciationsedit' => [
'name' => 'Edit Depreciation Settings',
],
'depreciationsdelete' => [
'name' => 'Delete Depreciation Records',
],
'depreciationscreate' => [
'name' => 'Create Depreciation Records',
],
'grant_all' => 'Grant all permissions for :area',
'deny_all' => 'Deny all permissions for :area',
'inherit_all' => 'Inherit all permissions for :area from permission groups',
'grant' => 'Grant Permission for :area',
'deny' => 'Deny Permission for :area',
'inherit' => 'Inherit Permission for :area from permission groups',
'use_groups' => 'We strongly suggest using Permission Groups instead of assigning individual permissions for easier management.'
);

View File

@@ -174,7 +174,7 @@ return [
'ulid' => 'The :attribute field must be a valid ULID.',
'uuid' => 'The :attribute field must be a valid UUID.',
'fmcs_location' => 'Full multiple company support and location scoping is enabled in the Admin Settings, and the selected location and selected company are not compatible.',
'is_unique_across_company_and_location' => 'The :attribute must be unique within the selected company and location.',
/*
|--------------------------------------------------------------------------

View File

@@ -3,14 +3,15 @@
return array(
'asset_categories' => 'Asset Categories',
'category_name' => 'Category Name',
'checkin_email' => 'Send email to user on checkin/checkout.',
'email_to_user_upon_checkin' => 'Send email to user upon checkin.',
'email_to_user_upon_checkin_and_checkout' => 'Send email to user upon checkin/checkout.',
'email_to_initiator' => 'Send email to you when user accepts or declines checkout.',
'checkin_email_notification' => 'This user will be sent an email on checkin/checkout.',
'clone' => 'Clone Category',
'create' => 'Create Category',
'edit' => 'Edit Category',
'email_will_be_sent_due_to_global_eula' => 'An email will be sent to the user because the global EULA is being used.',
'email_will_be_sent_due_to_category_eula' => 'An email will be sent to the user because a EULA is set for this category.',
'email_will_be_sent_due_to_global_eula' => 'An email will be sent to the user upon checkout because the global EULA is being used.',
'email_will_be_sent_due_to_category_eula' => 'An email will be sent to the user upon checkout because a EULA is set for this category.',
'eula_text' => 'Category EULA',
'eula_text_help' => 'This field allows you to customize your EULAs for specific types of assets. If you only have one EULA for all of your assets, you can check the box below to use the primary default.',
'name' => 'Category Name',

View File

@@ -5,7 +5,7 @@ return [
'manage' => 'Manage',
'field' => 'Field',
'about_fieldsets_title' => 'About Fieldsets',
'about_fieldsets_text' => 'Fieldsets allow you to create groups of custom fields that are frequently re-used used for specific asset model types.',
'about_fieldsets_text' => 'Fieldsets allow you to create groups of custom fields that are frequently re-used for specific asset model types.',
'custom_format' => 'Custom Regex format...',
'encrypt_field' => 'Encrypt the value of this field in the database',
'encrypt_field_help' => 'WARNING: Encrypting a field makes it unsearchable.',
@@ -67,4 +67,5 @@ return [
'checkbox' => 'Checkbox',
'radio' => 'Radio Buttons',
],
'general_help_text' => 'Custom fields store additional information not covered by the default asset fields. <a href="https://snipe-it.readme.io/docs/custom-fields#/"><i class="fa fa-external-link"></i></a>.',
];

View File

@@ -18,7 +18,7 @@ return [
'alert_email' => 'Send alerts to',
'alert_email_help' => 'Email addresses or distribution lists you want alerts to be sent to, comma separated.',
'alerts_enabled' => 'Email Alerts Enabled',
'alert_interval' => 'Expiring Alerts Threshold (in days)',
'alert_interval' => 'Expiring Alerts Threshold',
'alert_inv_threshold' => 'Inventory Alert Threshold',
'allow_user_skin' => 'Allow User Skin',
'allow_user_skin_help_text' => 'Checking this box will allow a user to override the UI skin with a different one.',
@@ -94,10 +94,12 @@ return [
'ldap_settings' => 'LDAP Settings',
'ldap_client_tls_cert_help' => 'Client-Side TLS Certificate and Key for LDAP connections are usually only useful in Google Workspace configurations with "Secure LDAP." Both are required.',
'ldap_location' => 'LDAP Location Field',
'ldap_location_help' => 'The LDAP Location field should be used if <strong>an OU is not being used in the Base Bind DN.</strong> Leave this blank if an OU search is being used.',
'ldap_location_help' => 'The LDAP Location field should be used if <strong>an OU is not being used in the Base Bind DN.</strong> Leave this blank if an OU search is being used.',
'ldap_login_test_help' => 'Enter a valid LDAP username and password from the base DN you specified above to test whether your LDAP login is configured correctly. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
'ldap_login_sync_help' => 'This only tests that LDAP can sync and that your fields are mapped correctly. If your LDAP Authentication query is not correct, users may still not be able to login. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
'ldap_manager' => 'LDAP Manager Field',
'ldap_mapping_help' => 'If your fields are not syncing correctly, try using the <strong>lower-case version</strong> of the field names. Display Name (<code>displayName</code>) in your LDAP/AD should be mapped here as <code>displayname</code>, <code>givenName</code> should be <code>givenname</code>, <code>sAMAccountName</code> as <code>samaccountname</code>, etc. <a href="https://snipe-it.readme.io/docs/ldap-sync-login#field-mapping-for-syncing"><i class="fa fa-external-link"></i></a>',
'save_ldap_first' => 'You must save your LDAP settings before testing. Save your settings on this page and then reload to test LDAP login and/or sync.',
'ldap_server' => 'LDAP Server',
'ldap_server_help' => 'This should start with ldap:// (for unencrypted) or ldaps:// (for TLS or SSL)',
'ldap_server_cert' => 'LDAP SSL certificate validation',
@@ -345,6 +347,7 @@ return [
'asset_tags_help' => 'Incrementing and prefixes',
'labels' => 'Labels',
'labels_title' => 'Update Label Settings',
'labels_title_help' => 'Changes made here must be saved before they will be reflected in the labels or the preview below.',
'labels_help' => 'Barcodes &amp; label settings',
'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.',
@@ -379,14 +382,17 @@ return [
'label2_1d_type_help' => 'Format for 1D barcodes',
'label2_2d_type' => '2D Barcode Type',
'label2_2d_type_help' => 'Format for 2D barcodes',
'label2_2d_target' => '2D Barcode Target',
'label2_2d_target_help' => 'The data that will be contained in the 2D barcode',
'label2_2d_prefix' => '2D Barcode Prefix',
'label2_2d_prefix_help' => 'This text will be prepended to the 2D Barcode Target value selected below when the 2D code is scanned. This can be used to prepend an external URL or any other value that you might need.',
'label2_2d_target' => '2D Barcode Content',
'label2_2d_target_help' => 'The data that will be contained in the 2D barcode. This can link to the asset directly in Snipe-IT or can be one of the non-linked field values. If you use the prefix above, it will be prepended to this value.',
'select_template' => 'Select a Template',
'label2_fields' => 'Field Definitions',
'label2_fields_help' => 'Fields can be added, removed, and reordered in the left column. For each field, multiple options for Label and DataSource can be added, removed, and reordered in the right column.',
'label2_fields_help' => 'Fields can be added, removed, and reordered in the left column. For each field, multiple options for Label and DataSource can be added, removed, and reordered in the right column. Field changes made here will be reflected immediately in the preview below but must be saved for them to apply to new labels.',
'purge_barcodes' => 'Purge Barcodes',
'help_asterisk_bold' => 'Text entered as <code>**text**</code> will be displayed as bold',
'help_blank_to_use' => 'Leave blank to use the value from <code>:setting_name</code>',
'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. ',
'help_default_will_use' => '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',
'default' => 'Default',
@@ -414,6 +420,9 @@ return [
'manager_view' => 'Manager View',
'manager_view_enabled_text' => 'Enable Manager View',
'manager_view_enabled_help' => 'Allow managers to view assigned items to their direct and indirect reports in their account view.',
'redirect_url' => 'Redirect URL',
'client_secret' => 'Client Secret',
'client_id' => 'Client ID',
'username_formats' => [
'username_format' => 'Username Format',
@@ -487,6 +496,7 @@ return [
'server' => 'Server Settings',
'scoping' => 'Scoping',
'security' => 'Security Preferences',
'passwords' => 'Password Security Preferences',
],

View File

@@ -15,7 +15,8 @@ return [
'info' => 'Info',
'restore_user' => 'Click here to restore them.',
'last_login' => 'Last Login',
'ldap_config_text' => 'LDAP configuration settings can be found Admin > Settings. The (optional) selected location will be set for all imported users.',
'ldap_config_text' => 'The selected location will be set for ALL imported users. This will overwrite their existing location, and is an unusual use-case, so leaving this blank is typically best.',
'ldap_sync_intro' => 'Click on the button below to manually sync your LDAP users. To learn more about configuring LDAP sync to run automatically, please see the <a href=":link" target="_blank">documentation <i class="fa fa-external-link"></i></a> .',
'print_assigned' => 'Print All Assigned',
'email_assigned' => 'Email List of All Assigned',
'user_notified' => 'User has been emailed a list of their currently assigned items.',
@@ -53,4 +54,6 @@ return [
'all_assigned_list_generation' => 'Generated on:',
'email_user_creds_on_create' => 'Email this user their credentials?',
'department_manager' => 'Department Manager',
'generate_password' => 'Generate random password',
'individual_override' => 'This user has at least one individual permission set, which may override group permissions.',
];

View File

@@ -2,8 +2,8 @@
return array(
'accepted' => 'You have successfully accepted this asset.',
'declined' => 'You have successfully declined this asset.',
'accepted' => 'You have successfully accepted this item.',
'declined' => 'You have successfully declined this item.',
'bulk_manager_warn' => 'Your users have been successfully updated, however your manager entry was not saved because the manager you selected was also in the user list to be edited, and users may not be their own manager. Please select your users again, excluding the manager.',
'user_exists' => 'User already exists!',
'user_not_found' => 'User does not exist or you do not have permission view them.',

View File

@@ -350,6 +350,7 @@ return [
'login_disabled' => 'Login Disabled',
'audit_due' => 'Due for Audit',
'audit_due_days' => '{}Assets Due or Overdue for Audit|[1]Assets Due or Overdue for Audit Within a Day|[2,*]Assets Due or Overdue for Audit Within :days Days',
'audit_due_days_view_all' => '{}Assets Due or Overdue for Audit|[1]View All Assets Due or Overdue for Audit Within a Day|[2,*]View All Assets Due or Overdue for Audit Within :days Days',
'checkin_due' => 'Due for Checkin',
'checkin_overdue' => 'Overdue for Checkin',
'checkin_due_days' => '{}Due for Checkin|[1]Assets Due for Checkin Within :days Day|[2,*]Assets Due for Checkin Within :days Days',
@@ -383,6 +384,14 @@ return [
'bulk_edit_about_to' => 'You are about to edit the following: ',
'checked_out' => 'Checked Out',
'checked_out_to' => 'Checked out to',
'available_users' => 'Available Users to Add',
'add_users_to_group' => 'Add Users to Group',
'users_to_add_to_group' => 'Users to Add',
'add_all_users_to_group' => 'Add all users to group',
'add_selected_users_to_group' => 'Add selected users to group',
'remove_selected_users_from_group' => 'Remove selected users from group',
'remove_all_users_from_group' => 'Remove all users from group',
'add_users_to_group_help' => 'Use the arrows to add or remove users from this group. You can select multiple users by holding down the Ctrl (Windows) or Command (Mac) key while clicking.',
'fields' => 'Fields',
'last_checkout' => 'Last Checkout',
'due_to_checkin' => 'The following :count items are due to be checked in soon:',
@@ -390,6 +399,7 @@ return [
'reminder_checked_out_items' => 'This is a reminder of the items currently checked out to you. If you feel this list is inaccurate (something is missing, or something appears here that you believe you never received), please email :reply_to_name at :reply_to_address.',
'changed' => 'Changed',
'to' => 'To',
'to_user' => 'To',
'report_fields_info' => '<p>Select the fields you would like to include in your custom report, and click Generate. The file (custom-asset-report-YYYY-mm-dd.csv) will download automatically, and you can open it in Excel.</p>
<p>If you would like to export only certain assets, use the options below to fine-tune your results.</p>',
'range' => 'Range',
@@ -615,6 +625,8 @@ return [
'user_managed_passwords_allow' => 'Allow users to manage their own passwords',
'from' => 'From',
'by' => 'By',
'by_user' => 'By',
'ldap_sync_location' => 'Sync All Users to This Location (Optional)',
'version' => 'Version',
'build' => 'build',
'use_cloned_image' => 'Clone image from original',

View File

@@ -100,7 +100,8 @@ return [
'the_following_item' => 'The following item has been checked in: ',
'to_reset' => 'To reset your :web password, complete this form:',
'type' => 'Type',
'upcoming-audits' => 'There is :count asset that is coming up for audit within :threshold days.|There are :count assets that are coming up for audit within :threshold days.',
'upcoming-audits' => 'There is :count asset that is coming up for audit within :threshold days.|There are :count assets that are coming up for audit within :threshold days. ',
'upcoming-audits_click' => 'This email may not contain the full list so as not to exceed email size limits. Click on the button below to view all assets due for audit.',
'user' => 'User',
'username' => 'Username',
'unaccepted_asset_reminder' => 'Reminder: You have Unaccepted Assets.',

View File

@@ -0,0 +1,424 @@
<?php
return array(
/*
|--------------------------------------------------------------------------
| Permissions
|--------------------------------------------------------------------------
| The following language lines are used in the user permissions system.
| Each permission has a 'name' and a 'note' that describes
| the permission in detail.
|
| DO NOT edit the keys (left-hand side) of each permission as these are
| used throughout the system for translations.
|---------------------------------------------------------------------------
*/
"superuser" => [
'name' => 'Super User',
'note' => 'Determines whether the user has full access to all aspects of the admin. This setting overrides ALL more specific and restrictive permissions throughout the system. ',
],
'admin' => [
'name' => 'Admin Access',
'note' => 'Determines whether the user has access to most aspects of the system EXCEPT the System Admin Settings. These users will be able to manage users, locations, categories, etc, but ARE constrained by Full Multiple Company Support if it is enabled.',
],
'import' => [
'name' => 'CSV Import',
'note' => 'This will allow users to import even if access to users, assets, etc is denied elsewhere.',
],
'reports' => [
'name' => 'Reports Access',
'note' => 'Determines whether the user has access to the Reports section of the application.',
],
'assets' =>
[
'name' => 'ንብረቶች',
'note' => 'Grants access to the Assets section of the application.',
],
'assetsview' => [
'name' => 'View Assets',
],
'assetscreate' => [
'name' => 'Create New Assets',
],
'assetsedit' => [
'name' => 'Edit Assets',
],
'assetsdelete' => [
'name' => 'Delete Assets',
],
'assetscheckin' => [
'name' => 'Check In',
'note' => 'Check assets back into inventory that are currently checked out.',
],
'assetscheckout' => [
'name' => 'Check Out',
'note' => 'Assign assets in inventory by checking them out.',
],
'assetsaudit' => [
'name' => 'Audit Assets',
'note' => 'Allows the user to mark an asset as physically inventoried.',
],
'assetsviewrequestable' => [
'name' => 'View Requestable Assets',
'note' => 'Allows the user to view assets that are marked as requestable.',
],
'assetsviewencrypted-custom-fields' => [
'name' => 'View Encrypted Custom Fields',
'note' => 'Allows the user to view and modify encrypted custom fields on assets.',
],
'accessories' => [
'name' => 'መለዋወጫዎች',
'note' => 'Grants access to the Accessories section of the application.',
],
'accessoriesview' => [
'name' => 'View Accessories',
],
'accessoriescreate' => [
'name' => 'Create New Accessories',
],
'accessoriesedit' => [
'name' => 'Edit Accessories',
],
'accessoriesdelete' => [
'name' => 'Delete Accessories',
],
'accessoriescheckout' => [
'name' => 'Check Out Accessories',
'note' => 'Assign accessories in inventory by checking them out.',
],
'accessoriescheckin' => [
'name' => 'Check In Accessories',
'note' => 'Check accessories back into inventory that are currently checked out.',
],
'accessoriesfiles' => [
'name' => 'Manage Accessory Files',
'note' => 'Allows the user to upload, download, and delete files associated with accessories.',
],
'consumables' => [
'name' => 'Consumables',
'note' => 'Grants access to the Consumables section of the application.',
],
'consumablesview' => [
'name' => 'View Consumables',
],
'consumablescreate' => [
'name' => 'Create New Consumables',
],
'consumablesedit' => [
'name' => 'Edit Consumables',
],
'consumablesdelete' => [
'name' => 'Delete Consumables',
],
'consumablescheckout' => [
'name' => 'Check Out Consumables',
'note' => 'Assign consumables in inventory by checking them out.',
],
'consumablesfiles' => [
'name' => 'Manage Consumable Files',
'note' => 'Allows the user to upload, download, and delete files associated with consumables.',
],
'licenses' => [
'name' => 'Licenses',
'note' => 'Grants access to the Licenses section of the application.',
],
'licensesview' => [
'name' => 'View Licenses',
],
'licensescreate' => [
'name' => 'Create New Licenses',
],
'licensesedit' => [
'name' => 'Edit Licenses',
],
'licensesdelete' => [
'name' => 'Delete Licenses',
],
'licensescheckout' => [
'name' => 'Assign Licenses',
'note' => 'Allows the user to assign licenses to assets or users.',
],
'licensescheckin' => [
'name' => 'Unassign Licenses',
'note' => 'Allows the user to unassign licenses from assets or users.',
],
'licensesfiles' => [
'name' => 'Manage License Files',
'note' => 'Allows the user to upload, download, and delete files associated with licenses.',
],
'licenseskeys' => [
'name' => 'Manage License Keys',
'note' => 'Allows the user to view product keys associated with licenses.',
],
'components' => [
'name' => 'Components',
'note' => 'Grants access to the Components section of the application.',
],
'componentsview' => [
'name' => 'View Components',
],
'componentscreate' => [
'name' => 'Create New Components',
],
'componentsedit' => [
'name' => 'Edit Components',
],
'componentsdelete' => [
'name' => 'Delete Components',
],
'componentsfiles' => [
'name' => 'Manage Component Files',
'note' => 'Allows the user to upload, download, and delete files associated with components.',
],
'componentscheckout' => [
'name' => 'Check Out Components',
'note' => 'Assign components in inventory by checking them out.',
],
'componentscheckin' => [
'name' => 'Check In Components',
'note' => 'Check components back into inventory that are currently checked out.',
],
'kits' => [
'name' => 'Predefined Kits',
'note' => 'Grants access to the Predefined Kits section of the application.',
],
'kitsview' => [
'name' => 'View Predefined Kits',
],
'kitscreate' => [
'name' => 'Create New Predefined Kits',
],
'kitsedit' => [
'name' => 'Edit Predefined Kits',
],
'kitsdelete' => [
'name' => 'Delete Predefined Kits',
],
'users' => [
'name' => 'Users',
'note' => 'Grants access to the Users section of the application.',
],
'usersview' => [
'name' => 'View Users',
],
'userscreate' => [
'name' => 'Create New Users',
],
'usersedit' => [
'name' => 'Edit Users',
],
'usersdelete' => [
'name' => 'Delete Users',
],
'models' => [
'name' => 'Models',
'note' => 'Grants access to the Models section of the application.',
],
'modelsview' => [
'name' => 'View Models',
],
'modelscreate' => [
'name' => 'Create New Models',
],
'modelsedit' => [
'name' => 'Edit Models',
],
'modelsdelete' => [
'name' => 'Delete Models',
],
'categories' => [
'name' => 'ምድብ',
'note' => 'Grants access to the Categories section of the application.',
],
'categoriesview' => [
'name' => 'View Categories',
],
'categoriescreate' => [
'name' => 'Create New Categories',
],
'categoriesedit' => [
'name' => 'Edit Categories',
],
'categoriesdelete' => [
'name' => 'Delete Categories',
],
'departments' => [
'name' => 'Departments',
'note' => 'Grants access to the Departments section of the application.',
],
'departmentsview' => [
'name' => 'View Departments',
],
'departmentscreate' => [
'name' => 'Create New Departments',
],
'departmentsedit' => [
'name' => 'Edit Departments',
],
'departmentsdelete' => [
'name' => 'Delete Departments',
],
'locations' => [
'name' => 'Locations',
'note' => 'Grants access to the Locations section of the application.',
],
'locationsview' => [
'name' => 'View Locations',
],
'locationscreate' => [
'name' => 'Create New Locations',
],
'locationsedit' => [
'name' => 'Edit Locations',
],
'locationsdelete' => [
'name' => 'Delete Locations',
],
'status-labels' => [
'name' => 'Status Labels',
'note' => 'Grants access to the Status Labels section of the application used by Assets.',
],
'statuslabelsview' => [
'name' => 'View Status Labels',
],
'statuslabelscreate' => [
'name' => 'Create New Status Labels',
],
'statuslabelsedit' => [
'name' => 'Edit Status Labels',
],
'statuslabelsdelete' => [
'name' => 'Delete Status Labels',
],
'custom-fields' => [
'name' => 'Custom Fields',
'note' => 'Grants access to the Custom Fields section of the application used by Assets.',
],
'customfieldsview' => [
'name' => 'View Custom Fields',
],
'customfieldscreate' => [
'name' => 'Create New Custom Fields',
],
'customfieldsedit' => [
'name' => 'Edit Custom Fields',
],
'customfieldsdelete' => [
'name' => 'Delete Custom Fields',
],
'suppliers' => [
'name' => 'Suppliers',
'note' => 'Grants access to the Suppliers section of the application.',
],
'suppliersview' => [
'name' => 'View Suppliers',
],
'supplierscreate' => [
'name' => 'Create New Suppliers',
],
'suppliersedit' => [
'name' => 'Edit Suppliers',
],
'suppliersdelete' => [
'name' => 'Delete Suppliers',
],
'manufacturers' => [
'name' => 'Manufacturers',
'note' => 'Grants access to the Manufacturers section of the application.',
],
'manufacturersview' => [
'name' => 'View Manufacturers',
],
'manufacturerscreate' => [
'name' => 'Create New Manufacturers',
],
'manufacturersedit' => [
'name' => 'Edit Manufacturers',
],
'manufacturersdelete' => [
'name' => 'Delete Manufacturers',
],
'companies' => [
'name' => 'Companies',
'note' => 'Grants access to the Companies section of the application.',
],
'companiesview' => [
'name' => 'View Companies',
],
'companiescreate' => [
'name' => 'Create New Companies',
],
'companiesedit' => [
'name' => 'Edit Companies',
],
'companiesdelete' => [
'name' => 'Delete Companies',
],
'user-self-accounts' => [
'name' => 'User Self Accounts',
'note' => 'Grants non-admin users the ability to manage certain aspects of their own user accounts.',
],
'selftwo-factor' => [
'name' => 'Manage Two-Factor Authentication',
'note' => 'Allows users to enable, disable, and manage two-factor authentication for their own accounts.',
],
'selfapi' => [
'name' => 'Manage API Tokens',
'note' => 'Allows users to create, view, and revoke their own API tokens. User tokens will have the same permissions as the user who created them.',
],
'selfedit-location' => [
'name' => 'Edit Location',
'note' => 'Allows users to edit the location associated with their own user account.',
],
'selfcheckout-assets' => [
'name' => 'Self Check Out Assets',
'note' => 'Allows users to check out assets to themselves without admin intervention.',
],
'selfview-purchase-cost' => [
'name' => 'View Purchase Cost',
'note' => 'Allows users to view the purchase cost of items in their account view.',
],
'depreciations' => [
'name' => 'Depreciation Management',
'note' => 'Allows users to manage and view asset depreciation details.',
],
'depreciationsview' => [
'name' => 'View Depreciation Details',
],
'depreciationsedit' => [
'name' => 'Edit Depreciation Settings',
],
'depreciationsdelete' => [
'name' => 'Delete Depreciation Records',
],
'depreciationscreate' => [
'name' => 'Create Depreciation Records',
],
'grant_all' => 'Grant all permissions for :area',
'deny_all' => 'Deny all permissions for :area',
'inherit_all' => 'Inherit all permissions for :area from permission groups',
'grant' => 'Grant Permission for :area',
'deny' => 'Deny Permission for :area',
'inherit' => 'Inherit Permission for :area from permission groups',
'use_groups' => 'We strongly suggest using Permission Groups instead of assigning individual permissions for easier management.'
);

View File

@@ -174,7 +174,7 @@ return [
'ulid' => 'The :attribute field must be a valid ULID.',
'uuid' => 'The :attribute field must be a valid UUID.',
'fmcs_location' => 'Full multiple company support and location scoping is enabled in the Admin Settings, and the selected location and selected company are not compatible.',
'is_unique_across_company_and_location' => 'The :attribute must be unique within the selected company and location.',
/*
|--------------------------------------------------------------------------

View File

@@ -3,14 +3,15 @@
return array(
'asset_categories' => 'تصنيفات الأصول',
'category_name' => 'اسم التصنيف',
'checkin_email' => 'إرسال رسالة إلكترونية للمستخدم عند الإدخال \\ الإخراج.',
'email_to_user_upon_checkin' => 'Send email to user upon checkin.',
'email_to_user_upon_checkin_and_checkout' => 'Send email to user upon checkin/checkout.',
'email_to_initiator' => 'Send email to you when user accepts or declines checkout.',
'checkin_email_notification' => 'سيتم إرسال رسالة إلكترونية إلى هذا المستخدم عند الإدخال \\ الإخراج.',
'clone' => 'نسخ التصنيف',
'create' => 'إنشاء تصنيف',
'edit' => 'تعديل التصنيف',
'email_will_be_sent_due_to_global_eula' => 'سيتم إرسال بريد إلكتروني إلى المستخدم لأنه يتم استخدام اتفاقية ترخيص المستخدم العالمية.',
'email_will_be_sent_due_to_category_eula' => 'سيتم إرسال بريد إلكتروني إلى المستخدم لأنه تم تعيين اتفاقية ترخيص دخول لهذه الفئة.',
'email_will_be_sent_due_to_global_eula' => 'An email will be sent to the user upon checkout because the global EULA is being used.',
'email_will_be_sent_due_to_category_eula' => 'An email will be sent to the user upon checkout because a EULA is set for this category.',
'eula_text' => 'إتفاقية ترخيص المستخدم النهائي للتصنيف',
'eula_text_help' => 'يسمح لك هذا الحقل بتخصيص (اتفاقية ترخيص المستخدم) لأنواع معينة من الأصول. اذا كنت تمتلك اتفاقية واحدة لجميع أصولك يمكنك أن تقوم بتأشير المربع في الأسفل لاستخدام الاتفاقية الافتراضية.',
'name' => 'اسم التصنيف',

View File

@@ -5,7 +5,7 @@ return [
'manage' => 'إدارة',
'field' => 'حقل',
'about_fieldsets_title' => 'حول مجموعة الحقول',
'about_fieldsets_text' => '(مجموعات الحقول) تسمح لك بإنشاء مجموعات من الحقول اللتي يمكن إعادة إستخدامها مع موديل محدد.',
'about_fieldsets_text' => 'مجموعات الحقول تسمح لك بإنشاء مجموعات من الحقول المخصصة التي يعاد استخدامها في كثير من الأحيان لأنواع معينة من نماذج الأصول.',
'custom_format' => 'تنسيق Regex المخصص...',
'encrypt_field' => 'تشفير قيمة هذا الحقل في قاعدة البيانات',
'encrypt_field_help' => 'تحذير: تشفير الحقل يجعله غير قابل للبحث.',
@@ -67,4 +67,5 @@ return [
'checkbox' => 'Checkbox',
'radio' => 'Radio Buttons',
],
'general_help_text' => 'Custom fields store additional information not covered by the default asset fields. <a href="https://snipe-it.readme.io/docs/custom-fields#/"><i class="fa fa-external-link"></i></a>.',
];

View File

@@ -18,7 +18,7 @@ return [
'alert_email' => 'إرسال تنبيهات إلى',
'alert_email_help' => 'عناوين البريد الإلكتروني أو قوائم التوزيع التي تريد إرسال تنبيهات إليها، مفصولة بفاصلة.',
'alerts_enabled' => 'التنبيهان ممكنه',
'alert_interval' => 'انتهاء فترة التنبيهات (بالأيام)',
'alert_interval' => 'Expiring Alerts Threshold',
'alert_inv_threshold' => 'عتبة تنبيه المخزون',
'allow_user_skin' => 'السماح بنمط المستخدم',
'allow_user_skin_help_text' => 'التحقق من هذا المربع سيسمح للمستخدم باستخدام مظهر واجهة المستخدم بمظهر آخر.',
@@ -94,10 +94,12 @@ return [
'ldap_settings' => 'إعدادات لداب',
'ldap_client_tls_cert_help' => 'عادة ما تكون شهادة العميل على جانب TLS ومفتاح اتصالات LDAP مفيدة فقط في إعدادات مساحة العمل في Google مع "أمن LDAP." كلاهما مطلوب.',
'ldap_location' => 'LDAP Location Field',
'ldap_location_help' => 'The LDAP Location field should be used if <strong>an OU is not being used in the Base Bind DN.</strong> Leave this blank if an OU search is being used.',
'ldap_location_help' => 'The LDAP Location field should be used if <strong>an OU is not being used in the Base Bind DN.</strong> Leave this blank if an OU search is being used.',
'ldap_login_test_help' => 'أدخل اسم مستخدم وكلمة مرور LDAP من الاسم المميز الأساسي DN الذي حددته أعلاه لاختبار ما إذا كان قد تمت تهيئة معلومات تسجيل الدخول إلى LDAP بشكل صحيح أم لا. يجب حفظ تحديث LDAP الخاص بك أولا.',
'ldap_login_sync_help' => 'This only tests that LDAP can sync and that your fields are mapped correctly. If your LDAP Authentication query is not correct, users may still not be able to login. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
'ldap_manager' => 'LDAP Manager Field',
'ldap_mapping_help' => 'If your fields are not syncing correctly, try using the <strong>lower-case version</strong> of the field names. Display Name (<code>displayName</code>) in your LDAP/AD should be mapped here as <code>displayname</code>, <code>givenName</code> should be <code>givenname</code>, <code>sAMAccountName</code> as <code>samaccountname</code>, etc. <a href="https://snipe-it.readme.io/docs/ldap-sync-login#field-mapping-for-syncing"><i class="fa fa-external-link"></i></a>',
'save_ldap_first' => 'You must save your LDAP settings before testing. Save your settings on this page and then reload to test LDAP login and/or sync.',
'ldap_server' => 'خادم لداب',
'ldap_server_help' => 'This should start with ldap:// (for unencrypted) or ldaps:// (for TLS or SSL)',
'ldap_server_cert' => 'التحقق من صحة شهادة سل لداب',
@@ -345,6 +347,7 @@ return [
'asset_tags_help' => 'زيادة والبادئات',
'labels' => 'التسميات',
'labels_title' => 'تحديث إعدادات التسمية',
'labels_title_help' => 'Changes made here must be saved before they will be reflected in the labels or the preview below.',
'labels_help' => 'Barcodes &amp; label settings',
'purge_help' => 'تطهير السجلات المحذوفة',
'ldap_extension_warning' => 'لا يبدو أن ملحق LDAP مثبت أو مفعّل على هذا الخادم. لا يزال بإمكانك حفظ الإعدادات الخاصة بك، ولكن ستحتاج إلى تمكين ملحق LDAP لـ PHP قبل أن تعمل مزامنة LDAP أو تسجيل الدخول.',
@@ -379,14 +382,17 @@ return [
'label2_1d_type_help' => 'تنسيق 1D باركود',
'label2_2d_type' => '2D نوع الباركود',
'label2_2d_type_help' => 'تنسيق الباركود ثنائية الأبعاد',
'label2_2d_target' => 'هدف الباركود 2D',
'label2_2d_target_help' => 'The data that will be contained in the 2D barcode',
'label2_2d_prefix' => '2D Barcode Prefix',
'label2_2d_prefix_help' => 'This text will be prepended to the 2D Barcode Target value selected below when the 2D code is scanned. This can be used to prepend an external URL or any other value that you might need.',
'label2_2d_target' => '2D Barcode Content',
'label2_2d_target_help' => 'The data that will be contained in the 2D barcode. This can link to the asset directly in Snipe-IT or can be one of the non-linked field values. If you use the prefix above, it will be prepended to this value.',
'select_template' => 'Select a Template',
'label2_fields' => 'تعاريف الحقل',
'label2_fields_help' => 'يمكن إضافة الحقول وإزالتها وإعادة ترتيبها في العمود الأيسر. لكل حقل ، يمكن إضافة خيارات متعددة للتسمية و DataSource ، وإزالتها وإعادة ترتيبها في العمود الأيمن.',
'label2_fields_help' => 'Fields can be added, removed, and reordered in the left column. For each field, multiple options for Label and DataSource can be added, removed, and reordered in the right column. Field changes made here will be reflected immediately in the preview below but must be saved for them to apply to new labels.',
'purge_barcodes' => 'Purge Barcodes',
'help_asterisk_bold' => 'النص الذي تم إدخاله كـ <code>**text**</code> سيتم عرضه بالخط العريض',
'help_blank_to_use' => 'اتركه فارغاً لاستخدام القيمة من <code>:setting_name</code>',
'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. ',
'help_default_will_use' => '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',
'default' => 'الافتراضي',
@@ -414,6 +420,9 @@ return [
'manager_view' => 'Manager View',
'manager_view_enabled_text' => 'Enable Manager View',
'manager_view_enabled_help' => 'Allow managers to view assigned items to their direct and indirect reports in their account view.',
'redirect_url' => 'Redirect URL',
'client_secret' => 'Client Secret',
'client_id' => 'Client ID',
'username_formats' => [
'username_format' => 'تنسيق اسم المستخدم',
@@ -487,6 +496,7 @@ return [
'server' => 'Server Settings',
'scoping' => 'Scoping',
'security' => 'Security Preferences',
'passwords' => 'Password Security Preferences',
],

View File

@@ -15,7 +15,8 @@ return [
'info' => 'معلومات',
'restore_user' => 'انقر هنا لاستعادتها.',
'last_login' => 'آخر دخول للمستخدم',
'ldap_config_text' => 'يمكن العثور على إعدادات تهيئة لداب المشرف> الإعدادات. سيتم تعيين الموقع (اختياري) المحدد لجميع المستخدمين الذين تم استيرادهم.',
'ldap_config_text' => 'The selected location will be set for ALL imported users. This will overwrite their existing location, and is an unusual use-case, so leaving this blank is typically best.',
'ldap_sync_intro' => 'Click on the button below to manually sync your LDAP users. To learn more about configuring LDAP sync to run automatically, please see the <a href=":link" target="_blank">documentation <i class="fa fa-external-link"></i></a> .',
'print_assigned' => 'طباعة كل الممتلكات',
'email_assigned' => 'قائمة البريد اﻹلكتروني لكل المعينين',
'user_notified' => 'تم إرسال قائمة بالعناصر المعينة حاليا إلى المستخدم بالبريد الإلكتروني.',
@@ -53,4 +54,6 @@ return [
'all_assigned_list_generation' => 'تم إنشاؤها في:',
'email_user_creds_on_create' => 'إرسال بيانات دخول هذا المستخدم بالبريد الإلكتروني؟',
'department_manager' => 'Department Manager',
'generate_password' => 'Generate random password',
'individual_override' => 'This user has at least one individual permission set, which may override group permissions.',
];

Some files were not shown because too many files have changed in this diff Show More