Merge branch 'develop' into chore/sc-23725/livewire3

# Conflicts:
#	composer.lock
This commit is contained in:
Marcus Moore 2024-06-25 10:15:50 -07:00
commit d4861a74df
No known key found for this signature in database
527 changed files with 6068 additions and 3066 deletions

View file

@ -3115,7 +3115,8 @@
"avatar_url": "https://avatars.githubusercontent.com/u/23613427?v=4",
"profile": "https://github.com/bryanlopezinc",
"contributions": [
"code"
"code",
"test"
]
},
{
@ -3126,6 +3127,15 @@
"contributions": [
"code"
]
},
{
"login": "Tyree",
"name": "Matt Tyree",
"avatar_url": "https://avatars.githubusercontent.com/u/5395363?v=4",
"profile": "https://github.com/Tyree",
"contributions": [
"doc"
]
}
]
}

View file

@ -73,7 +73,7 @@ jobs:
# https://github.com/docker/build-push-action
- name: Build and push 'snipe-it' image
id: docker_build
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile.alpine

View file

@ -73,7 +73,7 @@ jobs:
# https://github.com/docker/build-push-action
- name: Build and push 'snipe-it' image
id: docker_build
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile

View file

@ -27,6 +27,7 @@ jobs:
php-version:
- "8.1"
- "8.2"
- "8.3"
name: PHP ${{ matrix.php-version }}

View file

@ -4,7 +4,7 @@
"DOC3": "Please don't rely on these versions for planning upgrades unless you've fetched the most recent version",
"DOC4": "You should really just ignore it and run upgrade.php. Really",
"php_min_version": "8.1.0",
"php_max_major_minor": "8.2",
"php_max_major_minor": "8.3",
"php_max_wontwork": "8.4.0",
"current_snipeit_version": "7.0"
}

View file

@ -444,10 +444,11 @@ Thanks goes to all of these wonderful people ([emoji key](https://github.com/ken
<td align="center" valign="top" width="14.28%"><a href="https://www.corelight.com/"><img src="https://avatars.githubusercontent.com/u/1496725?v=4?s=110" width="110px;" alt="i_virus"/><br /><sub><b>i_virus</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=chandanchowdhury" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/gitgrimbo"><img src="https://avatars.githubusercontent.com/u/1020541?v=4?s=110" width="110px;" alt="Paul Grime"/><br /><sub><b>Paul Grime</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=gitgrimbo" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://leeporte.co.uk"><img src="https://avatars.githubusercontent.com/u/922815?v=4?s=110" width="110px;" alt="Lee Porte"/><br /><sub><b>Lee Porte</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=LeePorte" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bryanlopezinc"><img src="https://avatars.githubusercontent.com/u/23613427?v=4?s=110" width="110px;" alt="BRYAN "/><br /><sub><b>BRYAN </b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=bryanlopezinc" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bryanlopezinc"><img src="https://avatars.githubusercontent.com/u/23613427?v=4?s=110" width="110px;" alt="BRYAN "/><br /><sub><b>BRYAN </b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=bryanlopezinc" title="Code">💻</a> <a href="https://github.com/snipe/snipe-it/commits?author=bryanlopezinc" title="Tests">⚠️</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/U-H-T"><img src="https://avatars.githubusercontent.com/u/64061710?v=4?s=110" width="110px;" alt="U-H-T"/><br /><sub><b>U-H-T</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=U-H-T" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tyree"><img src="https://avatars.githubusercontent.com/u/5395363?v=4?s=110" width="110px;" alt="Matt Tyree"/><br /><sub><b>Matt Tyree</b></sub></a><br /><a href="https://github.com/snipe/snipe-it/commits?author=Tyree" title="Documentation">📖</a></td>
</tr>
</tbody>
</table>

View file

@ -244,7 +244,7 @@ class LocationsController extends Controller
if (! $location->isDeletable()) {
return response()
->json(Helper::formatStandardApiResponse('error', null, trans('admin/companies/message.assoc_users')));
->json(Helper::formatStandardApiResponse('error', null, trans('admin/locations/message.assoc_users')));
}
$this->authorize('delete', $location);
$location->delete();

View file

@ -78,13 +78,14 @@ class ReportsController extends Controller
];
$total = $actionlogs->count();
// Make sure the offset and limit are actually integers and do not exceed system limits
$offset = ($request->input('offset') > $actionlogs->count()) ? $actionlogs->count() : app('api_offset_value');
$offset = ($request->input('offset') > $total) ? $total : app('api_offset_value');
$limit = app('api_limit_value');
$sort = in_array($request->input('sort'), $allowed_columns) ? e($request->input('sort')) : 'created_at';
$order = ($request->input('order') == 'asc') ? 'asc' : 'desc';
$total = $actionlogs->count();
$actionlogs = $actionlogs->orderBy($sort, $order)->skip($offset)->take($limit)->get();

View file

@ -13,6 +13,8 @@ use App\Http\Transformers\SelectlistTransformer;
use App\Http\Transformers\UsersTransformer;
use App\Models\Actionlog;
use App\Models\Asset;
use App\Models\Accessory;
use App\Models\Consumable;
use App\Models\License;
use App\Models\User;
use App\Notifications\CurrentInventory;
@ -31,7 +33,7 @@ class UsersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v4.0]
*
* @return \Illuminate\Http\Response
* @return array
*/
public function index(Request $request)
{
@ -75,7 +77,7 @@ class UsersController extends Controller
'users.autoassign_licenses',
'users.website',
])->with('manager', 'groups', 'userloc', 'company', 'department', 'assets', 'licenses', 'accessories', 'consumables', 'createdBy')
])->with('manager', 'groups', 'userloc', 'company', 'department', 'assets', 'licenses', 'accessories', 'consumables', 'createdBy', 'managesUsers', 'managedLocations')
->withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count', 'managesUsers as manages_users_count', 'managedLocations as manages_locations_count');
@ -203,9 +205,6 @@ class UsersController extends Controller
$users->where('autoassign_licenses', '=', $request->input('autoassign_licenses'));
}
if ($request->filled('location_id') != '') {
$users = $users->UserLocation($request->input('location_id'), $request->input('search'));
}
if (($request->filled('deleted')) && ($request->input('deleted') == 'true')) {
$users = $users->onlyTrashed();
@ -362,7 +361,7 @@ class UsersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v4.0]
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
* @return array | \Illuminate\Http\JsonResponse
*/
public function store(SaveUserRequest $request)
{
@ -409,7 +408,7 @@ class UsersController extends Controller
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param int $id
* @return \Illuminate\Http\Response
* @return array | \Illuminate\Http\JsonResponse
*/
public function show($id)
{
@ -432,7 +431,7 @@ class UsersController extends Controller
* @since [v4.0]
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\JsonResponse
*/
public function update(SaveUserRequest $request, $id)
{
@ -517,18 +516,16 @@ class UsersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v4.0]
* @param int $id
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\JsonResponse
*/
public function destroy(DeleteUserRequest $request, $id)
{
$this->authorize('delete', User::class);
$user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed()->find($id);
$this->authorize('delete', $user);
if ($user = User::withTrashed()->find($id)) {
$this->authorize('delete', $user);
if ($user) {
if ($user->delete()) {
// Remove the user's avatar if they have one
@ -542,11 +539,12 @@ class UsersController extends Controller
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/users/message.success.delete')));
}
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.error.delete')));
}
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.user_not_found', compact('id'))));
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.user_not_found')));
}
@ -556,7 +554,7 @@ class UsersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v3.0]
* @param $userId
* @return string JSON
* @return array | \Illuminate\Http\JsonResponse
*/
public function assets(Request $request, $id)
{
@ -629,14 +627,14 @@ class UsersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v3.0]
* @param $userId
* @return string JSON
* @return array | \Illuminate\Http\JsonResponse
*/
public function consumables(Request $request, $id)
{
$this->authorize('view', User::class);
$this->authorize('view', Consumable::class);
$user = User::findOrFail($id);
$this->authorize('update', $user);
$this->authorize('view', $user);
$consumables = $user->consumables;
return (new ConsumablesTransformer)->transformConsumables($consumables, $consumables->count(), $request);
}
@ -647,7 +645,7 @@ class UsersController extends Controller
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v4.6.14]
* @param $userId
* @return string JSON
* @return array
*/
public function accessories($id)
{
@ -666,7 +664,7 @@ class UsersController extends Controller
* @author [N. Mathar] [<snipe@snipe.net>]
* @since [v5.0]
* @param $userId
* @return string JSON
* @return array | \Illuminate\Http\JsonResponse
*/
public function licenses($id)
{
@ -729,7 +727,7 @@ class UsersController extends Controller
* @author [Juan Font] [<juanfontalonso@gmail.com>]
* @since [v4.4.2]
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
* @return array
*/
public function getCurrentUserInfo(Request $request)
{
@ -742,12 +740,14 @@ class UsersController extends Controller
* @author [E. Taylor] [<dev@evantaylor.name>]
* @param int $userId
* @since [v6.0.0]
* @return JsonResponse
* @return \Illuminate\Http\JsonResponse
*/
public function restore($userId = null)
public function restore($userId)
{
$this->authorize('delete', User::class);
if ($user = User::withTrashed()->find($userId)) {
$this->authorize('delete', $user);
if ($user->deleted_at == '') {
@ -766,8 +766,6 @@ class UsersController extends Controller
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/users/message.success.restored')), 200);
}
// Check validation to make sure we're not restoring a user with the same username as an existing user
return response()->json(Helper::formatStandardApiResponse('error', null, $user->getErrors()));
}
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.user_not_found')), 200);

View file

@ -427,10 +427,6 @@ class LoginController extends Controller
return redirect()->route('two-factor')->with('error', trans('auth/message.two_factor.code_required'));
}
if (! $request->has('two_factor_secret')) { // TODO this seems almost the same as above?
return redirect()->route('two-factor')->with('error', 'Two-factor code is required.');
}
$user = Auth::user();
$secret = $request->input('two_factor_secret');
@ -439,7 +435,7 @@ class LoginController extends Controller
$user->saveQuietly();
$request->session()->put('2fa_authed', $user->id);
return redirect()->route('home')->with('success', 'You are logged in!');
return redirect()->route('home')->with('success', trans('auth/message.signin.success'));
}
return redirect()->route('two-factor')->with('error', trans('auth/message.two_factor.invalid_code'));
@ -537,7 +533,7 @@ class LoginController extends Controller
$minutes = round($seconds / 60);
$message = \Lang::get('auth/message.throttle', ['minutes' => $minutes]);
$message = trans('auth/message.throttle', ['minutes' => $minutes]);
return redirect()->back()
->withInput($request->only($this->username(), 'remember'))

View file

@ -28,8 +28,8 @@ class ProfileController extends Controller
*/
public function getIndex()
{
$this->authorize('self.profile');
$user = Auth::user();
return view('account/profile', compact('user'));
}
@ -42,6 +42,7 @@ class ProfileController extends Controller
*/
public function postIndex(ImageUploadRequest $request)
{
$this->authorize('self.profile');
$user = Auth::user();
$user->first_name = $request->input('first_name');
$user->last_name = $request->input('last_name');
@ -67,7 +68,7 @@ class ProfileController extends Controller
if ($user->save()) {
return redirect()->route('profile')->with('success', trans('account.general.profile_updated'));
return redirect()->route('profile')->with('success', trans('account/general.profile_updated'));
}
return redirect()->back()->withInput()->withErrors($user->getErrors());

View file

@ -933,7 +933,7 @@ class ReportsController extends Controller
$diff = ($asset->purchase_cost - $depreciation);
$row[] = Helper::formatCurrencyOutput($depreciation);
$row[] = Helper::formatCurrencyOutput($diff);
$row[] = ($asset->depreciation) ? $asset->depreciated_date()->format('Y-m-d') : '';
$row[] = (($asset->depreciation) && ($asset->depreciated_date())) ? $asset->depreciated_date()->format('Y-m-d') : '';
}
if ($request->filled('checkout_date')) {

View file

@ -25,6 +25,7 @@ use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\URL;
@ -106,17 +107,7 @@ class SettingsController extends Controller
$start_settings['owner_is_admin'] = false;
}
if ((is_writable(storage_path()))
&& (is_writable(storage_path().'/framework'))
&& (is_writable(storage_path().'/framework/cache'))
&& (is_writable(storage_path().'/framework/sessions'))
&& (is_writable(storage_path().'/framework/views'))
&& (is_writable(storage_path().'/logs'))
) {
$start_settings['writable'] = true;
} else {
$start_settings['writable'] = false;
}
$start_settings['writable'] = $this->storagePathIsWritable();
$start_settings['gd'] = extension_loaded('gd');
@ -145,6 +136,19 @@ class SettingsController extends Controller
}
}
/**
* Determine if the app storage path is writable.
*/
protected function storagePathIsWritable(): bool
{
return File::isWritable(storage_path()) &&
File::isWritable(storage_path('framework')) &&
File::isWritable(storage_path('framework/cache')) &&
File::isWritable(storage_path('framework/sessions')) &&
File::isWritable(storage_path('framework/views')) &&
File::isWritable(storage_path('logs'));
}
/**
* Save the first admin user from Setup.
*
@ -347,9 +351,9 @@ class SettingsController extends Controller
$setting->load_remote = $request->input('load_remote', 0);
$setting->thumbnail_max_h = $request->input('thumbnail_max_h');
$setting->privacy_policy_link = $request->input('privacy_policy_link');
$setting->depreciation_method = $request->input('depreciation_method');
$setting->dash_chart_type = $request->input('dash_chart_type');
$setting->profile_edit = $request->input('profile_edit', 0);
if ($request->input('per_page') != '') {
$setting->per_page = $request->input('per_page');

View file

@ -17,7 +17,9 @@ use App\Notifications\WelcomeNotification;
use Illuminate\Support\Facades\Auth;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Facades\Storage;
use Redirect;
use Str;
use Symfony\Component\HttpFoundation\StreamedResponse;
@ -333,19 +335,24 @@ class UsersController extends Controller
*/
public function destroy(DeleteUserRequest $request, $id = null)
{
$this->authorize('delete', User::class);
$user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc');
if ($user = User::find($id)) {
if (($user) && ($user->deleted_at = '')) {
// Delete the user
$user->delete();
return redirect()->route('users.index')->with('success', trans('admin/users/message.success.delete'));
$this->authorize('delete', $user);
if ($user->delete()) {
if (Storage::disk('public')->exists('avatars/' . $user->avatar)) {
try {
Storage::disk('public')->delete('avatars/' . $user->avatar);
} catch (\Exception $e) {
Log::debug($e);
}
}
return redirect()->route('users.index')->with('success', trans('admin/users/message.success.delete'));
}
}
return redirect()->route('users.index')
->with('error', trans('admin/users/message.user_not_found', compact('id')));
return redirect()->route('users.index')->with('error', trans('admin/users/message.user_not_found'));
}
@ -599,6 +606,7 @@ class UsersController extends Controller
{
$this->authorize('view', User::class);
$user = User::where('id', $id)->withTrashed()->first();
// Make sure they can view this particular user
$this->authorize('view', $user);
@ -655,6 +663,8 @@ class UsersController extends Controller
*/
public function sendPasswordReset($id)
{
$this->authorize('view', User::class);
if (($user = User::find($id)) && ($user->activated == '1') && ($user->email != '') && ($user->ldap_import == '0')) {
$credentials = ['email' => trim($user->email)];

View file

@ -49,10 +49,10 @@ class CheckForTwoFactor
// Otherwise make sure they're enrolled and show them the 2FA code screen
if ((Auth::user()->two_factor_secret != '') && (Auth::user()->two_factor_enrolled == '1')) {
return redirect()->route('two-factor')->with('info', 'Please enter your two-factor authentication code.');
return redirect()->route('two-factor')->with('info', trans('auth/message.two_factor.enter_two_factor_code'));
}
return redirect()->route('two-factor-enroll')->with('success', 'Please enroll a device in two-factor authentication.');
return redirect()->route('two-factor-enroll')->with('success', trans('auth/message.two_factor.please_enroll'));
}
}

View file

@ -6,7 +6,7 @@ use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
class DeleteUserRequest extends FormRequest
@ -19,18 +19,12 @@ class DeleteUserRequest extends FormRequest
*/
public function authorize(): bool
{
return true;
return Gate::allows('delete', User::class);
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
public function prepareForValidation(): void
{
$user_to_delete = User::find(request()->route('user'));
$user_to_delete = User::withTrashed()->find(request()->route('user'));
if ($user_to_delete) {
$this->merge([
@ -41,30 +35,41 @@ class DeleteUserRequest extends FormRequest
'assigned_assets' => $user_to_delete->assets()->count(),
'assigned_licenses' => $user_to_delete->licenses()->count(),
'assigned_accessories' => $user_to_delete->accessories()->count(),
'deleted_at' => $user_to_delete->deleted_at,
]);
}
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'id' => ['exists:users,id'],
'user' => Rule::notIn([Auth::user()->id]),
'user' => Rule::notIn([auth()->user()->id]),
'managed_users' => Rule::in([0]),
'managed_locations' => Rule::in([0]),
'assigned_assets' => Rule::in([0]),
'assigned_licenses' => Rule::in([0]),
'assigned_accessories' => Rule::in([0]),
'deleted_at' => Rule::in([null]),
];
}
public function messages(): array
{
$user_to_delete = User::find(request()->route('user'));
$messages = ['id.exists' => trans('admin/users/message.user_not_found')];
$user_to_delete = User::withTrashed()->find(request()->route('user'));
$messages = [];
if ($user_to_delete) {
$messages = array_merge([
'user.exists' => trans('admin/users/message.user_not_found'),
// Cannot delete yourself
'user.not_in' => trans('admin/users/message.error.cannot_delete_yourself'),
@ -84,6 +89,8 @@ class DeleteUserRequest extends FormRequest
// assigned accessories is not 0
'assigned_accessories.in' => trans_choice('admin/users/message.error.delete_has_accessories_var', $user_to_delete->accessories()->count(), ['count' => $user_to_delete->accessories()->count()]),
'deleted_at.in' => trans('admin/users/message.user_deleted_warning'),
], $messages);
}

View file

@ -49,7 +49,12 @@ class ActionlogsTransformer
public function transformActionlog (Actionlog $actionlog, $settings = null)
{
$icon = $actionlog->present()->icon();
$custom_fields = CustomField::all();
static $custom_fields = false;
if ($custom_fields === false) {
$custom_fields = CustomField::all();
}
if ($actionlog->filename!='') {
$icon = Helper::filetype_icon($actionlog->filename);
@ -217,13 +222,30 @@ class ActionlogsTransformer
*/
public function changedInfo(array $clean_meta)
{ $location = Location::withTrashed()->get();
$supplier = Supplier::withTrashed()->get();
$model = AssetModel::withTrashed()->get();
$status = Statuslabel::withTrashed()->get();
$company = Company::get();
{
static $location = false;
static $supplier = false;
static $model = false;
static $status = false;
static $company = false;
if ($location === false) {
$location = Location::select('id', 'name')->withTrashed()->get();
}
if ($supplier === false) {
$supplier = Supplier::select('id', 'name')->withTrashed()->get();
}
if ($model === false) {
$model = AssetModel::select('id', 'name')->withTrashed()->get();
}
if ($status === false) {
$status = Statuslabel::select('id', 'name')->withTrashed()->get();
}
if ($company === false) {
$company = Company::select('id', 'name')->get();
}
if(array_key_exists('rtd_location_id',$clean_meta)) {
$oldRtd = $location->find($clean_meta['rtd_location_id']['old']);

View file

@ -20,7 +20,9 @@ class AssetImporter extends ItemImporter
{
parent::__construct($filename);
if (!is_null(Statuslabel::first())) {
$this->defaultStatusLabelId = Statuslabel::first()->id;
if (!is_null(Statuslabel::deployable()->first())) {
$this->defaultStatusLabelId = Statuslabel::deployable()->first()->id;
}
}
@ -102,7 +104,7 @@ class AssetImporter extends ItemImporter
$this->item['expected_checkin'] = trim($this->findCsvMatch($row, 'expected_checkin'));
$this->item['last_audit_date'] = trim($this->findCsvMatch($row, 'last_audit_date'));
$this->item['next_audit_date'] = trim($this->findCsvMatch($row, 'next_audit_date'));
$this->item['asset_eol_date'] = trim($this->findCsvMatch($row, 'next_audit_date'));
$this->item['asset_eol_date'] = trim($this->findCsvMatch($row, 'asset_eol_date'));
$this->item['asset_tag'] = $asset_tag;
// We need to save the user if it exists so that we can checkout to user later.

View file

@ -62,6 +62,12 @@ class Asset extends Depreciable
*/
protected $table = 'assets';
/**
* Leaving this commented out, since we need to test further, but this would eager load the model relationship every single
* time the asset model is loaded.
*/
// protected $with = ['model'];
/**
* Whether the model should inject it's identifier to the unique
* validation rules before attempting validation. If this property
@ -147,7 +153,7 @@ class Asset extends Depreciable
'expected_checkin',
'byod',
'asset_eol_date',
'eol_explicit',
'eol_explicit',
'last_audit_date',
'next_audit_date',
'asset_eol_date',
@ -159,21 +165,21 @@ class Asset extends Depreciable
/**
* The attributes that should be included when searching the model.
*
*
* @var array
*/
protected $searchableAttributes = [
'name',
'asset_tag',
'serial',
'order_number',
'purchase_cost',
'notes',
'name',
'asset_tag',
'serial',
'order_number',
'purchase_cost',
'notes',
'created_at',
'updated_at',
'purchase_date',
'expected_checkin',
'next_audit_date',
'updated_at',
'purchase_date',
'expected_checkin',
'next_audit_date',
'last_audit_date',
'last_checkin',
'last_checkout',
@ -182,7 +188,7 @@ class Asset extends Depreciable
/**
* The relations and their attributes that should be included when searching the model.
*
*
* @var array
*/
protected $searchableRelations = [
@ -295,7 +301,7 @@ class Asset extends Depreciable
// The asset status is not archived and is deployable
if (($this->assetstatus) && ($this->assetstatus->archived == '0')
&& ($this->assetstatus->deployable == '1'))
&& ($this->assetstatus->deployable == '1'))
{
return true;
@ -568,7 +574,7 @@ class Asset extends Depreciable
*/
public function assignedType()
{
return strtolower(class_basename($this->assigned_type));
return $this->assigned_type ? strtolower(class_basename($this->assigned_type)) : null;
}
@ -852,11 +858,11 @@ class Asset extends Depreciable
foreach ($assets as $asset) {
$results = preg_match("/\d+$/", $asset['asset_tag'], $matches);
if ($results)
if ($results)
{
$number = $matches[0];
if ($number > $max)
if ($number > $max)
{
$max = $number;
}
@ -984,6 +990,14 @@ class Asset extends Depreciable
);
}
protected function lastAuditDate(): Attribute
{
return Attribute::make(
get: fn ($value) => $value ? Carbon::parse($value)->format('Y-m-d H:i:s') : null,
set: fn ($value) => $value ? Carbon::parse($value)->format('Y-m-d H:i:s') : null,
);
}
protected function lastCheckout(): Attribute
{
return Attribute::make(

View file

@ -173,10 +173,14 @@ class Depreciable extends SnipeModel
public function depreciated_date()
{
$date = date_create($this->purchase_date);
date_add($date, date_interval_create_from_date_string($this->get_depreciation()->months.' months'));
if (($this->purchase_date) && ($this->get_depreciation())) {
$date = date_create($this->purchase_date);
return date_add($date, date_interval_create_from_date_string($this->get_depreciation()->months.' months'));//date_format($date, 'Y-m-d'); //don't bake-in format, for internationalization
}
return null;
return $date; //date_format($date, 'Y-m-d'); //don't bake-in format, for internationalization
}
// it's necessary for unit tests

View file

@ -204,6 +204,23 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
return $this->checkPermissionSection('superuser');
}
/**
* Checks if the can edit their own profile
*
* @author A. Gianotto <snipe@snipe.net>
* @since [v6.3.4]
* @return bool
*/
public function canEditProfile() : bool {
$setting = Setting::getSettings();
if ($setting->profile_edit == 1) {
return true;
}
return false;
}
/**
* Checks if the user is deletable
*
@ -572,7 +589,6 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
if ($format=='firstname.lastname') {
$username = str_slug($first_name) . '.' . str_slug($last_name);
} elseif ($format == 'lastnamefirstinitial') {
$username = str_slug($last_name.substr($first_name, 0, 1));
} elseif ($format == 'firstintial.lastname') {
@ -589,7 +605,9 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
$username = str_slug($first_name).str_slug($last_name);
} elseif ($format == 'firstnamelastinitial') {
$username = str_slug(($first_name.substr($last_name, 0, 1)));
}
} elseif ($format == 'lastname.firstname') {
$username = str_slug($last_name).'.'.str_slug($first_name);
}
}
$user['first_name'] = $first_name;

View file

@ -92,7 +92,7 @@ class AssetObserver
// only modify the 'next' one if it's *bigger* than the stored base
//
if($next_asset_tag > $settings->next_auto_tag_base) {
if ($next_asset_tag > $settings->next_auto_tag_base && $next_asset_tag < PHP_INT_MAX) {
$settings->next_auto_tag_base = $next_asset_tag;
$settings->save();
}

View file

@ -21,6 +21,7 @@ use Illuminate\Routing\UrlGenerator;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\URL;
/**
* This service provider handles setting the observers on models
@ -31,7 +32,7 @@ use Illuminate\Support\Facades\Log;
class AppServiceProvider extends ServiceProvider
{
/**
* Custom email array validation
* Bootstrap application services.
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v3.0]
@ -39,19 +40,24 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot(UrlGenerator $url)
{
if (env('APP_FORCE_TLS')) {
if (strpos(env('APP_URL'), 'https') === 0) {
$url->forceScheme('https');
} else {
Log::debug("'APP_FORCE_TLS' is set to true, but 'APP_URL' does not start with 'https://'. Will not force TLS on connections.");
}
/**
* This is a workaround for proxies/reverse proxies that don't always pass the proper headers.
*
* Here, we check if the APP_URL starts with https://, which we should always honor,
* regardless of how well the proxy or network is configured.
*
* We'll force the https scheme if the APP_URL starts with https://, or if APP_FORCE_TLS is set to true.
*
*/
if ((strpos(env('APP_URL'), 'https://') === 0) || (env('APP_FORCE_TLS'))) {
$url->forceScheme('https');
}
// TODO - isn't it somehow 'gauche' to check the environment directly; shouldn't we be using config() somehow?
if ( ! env('APP_ALLOW_INSECURE_HOSTS')) { // unless you set APP_ALLOW_INSECURE_HOSTS, you should PROHIBIT forging domain parts of URL via Host: headers
$url_parts = parse_url(config('app.url'));
if ($url_parts && array_key_exists('scheme', $url_parts) && array_key_exists('host', $url_parts)) { // check for the *required* parts of a bare-minimum URL
\URL::forceRootUrl(config('app.url'));
URL::forceRootUrl(config('app.url'));
} else {
Log::error("Your APP_URL in your .env is misconfigured - it is: ".config('app.url').". Many things will work strangely unless you fix it.");
}

View file

@ -232,5 +232,12 @@ class AuthServiceProvider extends ServiceProvider
|| $user->can('update', User::class)
|| $user->can('create', User::class);
});
// This determines whether the user can edit their profile based on the setting in Admin > General
Gate::define('self.profile', function ($user) {
return $user->canEditProfile();
});
}
}

View file

@ -61,7 +61,7 @@
"phpspec/prophecy": "^1.10",
"pragmarx/google2fa-laravel": "^1.3",
"rollbar/rollbar-laravel": "^8.0",
"spatie/laravel-backup": "^8.0",
"spatie/laravel-backup": "^8.8",
"spatie/laravel-ignition": "^2.0",
"tecnickcom/tc-lib-barcode": "^1.15",
"tecnickcom/tcpdf": "^6.5",
@ -70,17 +70,17 @@
},
"suggest": {
"ext-ldap": "*",
"ext-zip": "*"
"ext-zip": "*",
"ext-exif": "*"
},
"require-dev": {
"brianium/paratest": "^v6.4.4",
"fakerphp/faker": "^1.16",
"larastan/larastan": "^2.9",
"mockery/mockery": "^1.4",
"nunomaduro/larastan": "^2.0",
"nunomaduro/phpinsights": "^2.7",
"php-mock/php-mock-phpunit": "^2.8",
"phpunit/php-token-stream": "^3.1",
"phpunit/phpunit": "^9.0",
"php-mock/php-mock-phpunit": "^2.10",
"phpunit/phpunit": "^9.6.19",
"squizlabs/php_codesniffer": "^3.5",
"symfony/css-selector": "^4.4",
"symfony/dom-crawler": "^4.4",

2283
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -112,7 +112,7 @@ return [
|
*/
'fallback_locale' => 'en-US',
'fallback_locale' => env('FALLBACK_APP_LOCALE', 'en'),
/*
|--------------------------------------------------------------------------

View file

@ -137,6 +137,11 @@ return [
'mail' => [
'to' => env('MAIL_BACKUP_NOTIFICATION_ADDRESS', null),
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
],
'slack' => [
@ -152,6 +157,20 @@ return [
'icon' => null,
],
'discord' => [
'webhook_url' => '',
/*
* If this is an empty string, the name field on the webhook will be used.
*/
'username' => '',
/*
* If this is an empty string, the avatar on the webhook will be used.
*/
'avatar_url' => '',
],
],
/*

View file

@ -1,10 +1,10 @@
<?php
return array (
'app_version' => 'v7.0.3',
'full_app_version' => 'v7.0.3 - build 13980-',
'build_version' => '13980',
'app_version' => 'v7.0.5',
'full_app_version' => 'v7.0.5 - build 14092-g294fb1f77',
'build_version' => '14092',
'prerelease_version' => '',
'hash_version' => '',
'full_hash' => 'v7.0.3',
'hash_version' => 'g294fb1f77',
'full_hash' => 'v7.0.5-77-g294fb1f77',
'branch' => 'develop',
);

View file

@ -38,6 +38,16 @@ class UserFactory extends Factory
];
}
public function deletedUser()
{
return $this->state(function () {
return [
'deleted_at' => $this->faker->dateTime(),
];
});
}
public function firstAdmin()
{
return $this->state(function () {

View file

@ -0,0 +1,30 @@
<?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) {
$table->boolean('profile_edit')->nullable()->default(1);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('settings', function (Blueprint $table) {
if (Schema::hasColumn('settings', 'profile_edit')) {
$table->dropColumn('profile_edit');
}
});
}
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -18,7 +18,7 @@
"/css/dist/skins/skin-green-dark.css": "/css/dist/skins/skin-green-dark.css?id=ec0a01609bec55e90f0692d86cb81625",
"/css/dist/skins/skin-green.css": "/css/dist/skins/skin-green.css?id=0a82a6ae6bb4e58fe62d162c4fb50397",
"/css/dist/skins/skin-contrast.css": "/css/dist/skins/skin-contrast.css?id=da6c7997d9de2f8329142399f0ce50da",
"/css/dist/all.css": "/css/dist/all.css?id=0f9956c66f93c6417f69f0134c6ae128",
"/css/dist/all.css": "/css/dist/all.css?id=c18576427f178a39b395c950a130233e",
"/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",
"/css/webfonts/fa-brands-400.ttf": "/css/webfonts/fa-brands-400.ttf?id=0141634c24336be626e05c8b77d1fa27",
@ -29,9 +29,9 @@
"/css/webfonts/fa-solid-900.woff2": "/css/webfonts/fa-solid-900.woff2?id=96d16b1bdb177fd796c810b9e706c780",
"/css/webfonts/fa-v4compatibility.ttf": "/css/webfonts/fa-v4compatibility.ttf?id=8994b282f9f3b7a00380bb1e2731a4bf",
"/css/webfonts/fa-v4compatibility.woff2": "/css/webfonts/fa-v4compatibility.woff2?id=111e341dba724e1df946e8d1f406a7bd",
"/css/dist/bootstrap-table.css": "/css/dist/bootstrap-table.css?id=5f79123a6750afd34dbf565faec3dda3",
"/css/dist/bootstrap-table.css": "/css/dist/bootstrap-table.css?id=56d8ef58cbae76d63d504ff8d69cf382",
"/js/build/vendor.js": "/js/build/vendor.js?id=179bfe20e8767f7df32658c6b5a10ca3",
"/js/dist/bootstrap-table.js": "/js/dist/bootstrap-table.js?id=e5918703a22f8992c4c98f1dbbecb8f7",
"/js/dist/bootstrap-table.js": "/js/dist/bootstrap-table.js?id=1635e7bbab779359c9b97121a8203521",
"/js/dist/all.js": "/js/dist/all.js?id=e37ce44903f83119fe3d52717200022e",
"/js/dist/all-defer.js": "/js/dist/all-defer.js?id=75d841799f917cbcacf6b87698379726",
"/css/dist/skins/skin-green.min.css": "/css/dist/skins/skin-green.min.css?id=0a82a6ae6bb4e58fe62d162c4fb50397",

View file

@ -2,10 +2,10 @@
return array(
'personal_api_keys' => 'crwdns6798:0crwdne6798:0',
'api_key_warning' => 'crwdns6800:0crwdne6800:0',
'api_key_warning' => 'crwdns12268:0crwdne12268:0',
'api_base_url' => 'crwdns6802:0crwdne6802:0',
'api_base_url_endpoint' => 'crwdns6804:0crwdne6804:0',
'api_token_expiration_time' => 'crwdns6806:0crwdne6806:0',
'api_reference' => 'crwdns6808:0crwdne6808:0',
'api_reference' => 'crwdns12270:0crwdne12270:0',
'profile_updated' => 'crwdns12202:0crwdne12202:0',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'crwdns650:0crwdne650:0',
'assoc_users' => 'crwdns651:0crwdne651:0',
'assoc_users' => 'crwdns12272:0crwdne12272:0',
'assoc_assets' => 'crwdns1404:0crwdne1404:0',
'assoc_child_loc' => 'crwdns1405:0crwdne1405:0',
'assigned_assets' => 'crwdns11179:0crwdne11179:0',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'crwdns1678:0crwdne1678:0',
'username_format_help' => 'crwdns5918:0crwdne5918:0',
'oauth_title' => 'crwdns6403:0crwdne6403:0',
'oauth_clients' => 'crwdns12246:0crwdne12246:0',
'oauth' => 'crwdns6405:0crwdne6405:0',
'oauth_help' => 'crwdns6407:0crwdne6407:0',
'oauth_no_clients' => 'crwdns12248:0crwdne12248:0',
'oauth_secret' => 'crwdns12250:0crwdne12250:0',
'oauth_authorized_apps' => 'crwdns12252:0crwdne12252:0',
'oauth_redirect_url' => 'crwdns12254:0crwdne12254:0',
'oauth_name_help' => 'crwdns12256:0crwdne12256:0',
'oauth_scopes' => 'crwdns12258:0crwdne12258:0',
'oauth_callback_url' => 'crwdns12260:0crwdne12260:0',
'create_client' => 'crwdns12262:0crwdne12262:0',
'no_scopes' => 'crwdns12264:0crwdne12264:0',
'asset_tag_title' => 'crwdns6409:0crwdne6409:0',
'barcode_title' => 'crwdns6411:0crwdne6411:0',
'barcodes' => 'crwdns6413:0crwdne6413:0',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'crwdns5952:0crwdne5952:0',
'firstinitial.lastname' => 'crwdns5954:0crwdne5954:0',
'firstnamelastinitial' => 'crwdns5956:0crwdne5956:0',
'lastnamefirstname' => 'crwdns12266:0crwdne12266:0',
'first_name' => 'crwdns1053:0crwdne1053:0',
'first_name_format' => 'crwdns1647:0crwdne1647:0',
'files' => 'crwdns1996:0crwdne1996:0',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => '私有API 金鑰',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they
will not be visible to you again.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Your API base url is located at:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'API tokens are set to expire in:',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to
find specific API endpoints and additional API documentation.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Ligging bestaan nie.',
'assoc_users' => 'Hierdie ligging is tans gekoppel aan ten minste een gebruiker en kan nie uitgevee word nie. Dateer asseblief u gebruikers op om nie meer hierdie ligging te verwys nie en probeer weer.',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'Hierdie ligging is tans geassosieer met ten minste een bate en kan nie uitgevee word nie. Dateer asseblief jou bates op om nie meer hierdie ligging te verwys nie en probeer weer.',
'assoc_child_loc' => 'Hierdie ligging is tans die ouer van ten minste een kind se plek en kan nie uitgevee word nie. Werk asseblief jou liggings by om nie meer hierdie ligging te verwys nie en probeer weer.',
'assigned_assets' => 'Assigned Assets',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Lengte van bate-etikette, insluitend zerofill',
'username_format_help' => 'This setting will only be used by the import process if a username is not provided and we have to generate a username for you.',
'oauth_title' => 'OAuth API Settings',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'Oauth Endpoint Settings',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Update Asset Tag Settings',
'barcode_title' => 'Update Barcode Settings',
'barcodes' => 'Barcodes',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Last Name First Initial (smith_j@example.com)',
'firstinitial.lastname' => 'First Initial Last Name (j.smith@example.com)',
'firstnamelastinitial' => 'First Name Last Initial (janes@example.com)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'Eerste naam',
'first_name_format' => 'Voornaam (jane@example.com)',
'files' => 'Files',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'Personal API Keys',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they
will not be visible to you again.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Your API base url is located at:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'API tokens are set to expire in:',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to
find specific API endpoints and additional API documentation.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Location does not exist.',
'assoc_users' => 'This location is currently associated with at least one user and cannot be deleted. Please update your users to no longer reference this location and try again. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'This location is currently associated with at least one asset and cannot be deleted. Please update your assets to no longer reference this location and try again. ',
'assoc_child_loc' => 'This location is currently the parent of at least one child location and cannot be deleted. Please update your locations to no longer reference this location and try again. ',
'assigned_assets' => 'Assigned Assets',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Length of asset tags, including zerofill',
'username_format_help' => 'This setting will only be used by the import process if a username is not provided and we have to generate a username for you.',
'oauth_title' => 'OAuth API Settings',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'Oauth Endpoint Settings',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Update Asset Tag Settings',
'barcode_title' => 'Update Barcode Settings',
'barcodes' => 'Barcodes',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Last Name First Initial (smith_j@example.com)',
'firstinitial.lastname' => 'First Initial Last Name (j.smith@example.com)',
'firstnamelastinitial' => 'First Name Last Initial (janes@example.com)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'First Name',
'first_name_format' => 'First Name (jane@example.com)',
'files' => 'Files',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'مفاتيح API الشخصية',
'api_key_warning' => 'عند إنشاء رمز API، تأكد من نسخه على الفور لأنه
لن يكون مرئيا لك مرة أخرى.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'عنوان URL الأساسي API الخاص بك موجود في:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'تم تعيين رموز API لانتهاء صلاحيتها في:',
'api_reference' => 'الرجاء التحقق من مرجع API <a href="https://snipe-it.readme.io/reference" target="_blank"></a> إلى
العثور على نقاط نهاية API المحددة ووثائق API الإضافية.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'الموقع غير موجود.',
'assoc_users' => 'هذا الموقع مرتبط حاليا بمستخدم واحد على الأقل ولا يمكن حذفه. يرجى تحديث المستخدمين لم يعد يشيروا إلى هذا الموقع ثم أعد المحاولة. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'هذا الموقع مرتبط حاليا بمادة عرض واحدة على الأقل ولا يمكن حذفها. يرجى تحديث مواد العرض لم تعد تشير إلى هذا الموقع ثم أعد المحاولة. ',
'assoc_child_loc' => 'هذا الموقع هو حاليا أحد الوالدين لموقع طفل واحد على الأقل ولا يمكن حذفه. يرجى تحديث مواقعك لم تعد تشير إلى هذا الموقع ثم أعد المحاولة.',
'assigned_assets' => 'الأصول المعينة',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'طول ترميز الأصل، بما في ذلك تعبئة الاصفار',
'username_format_help' => 'سيتم استخدام هذا الإعداد فقط من قبل عملية الاستيراد إذا لم يتم توفير اسم المستخدم ويتعين علينا إنشاء اسم مستخدم لك.',
'oauth_title' => 'إعدادات API OAuth',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'إعدادات نقطة النهاية Oauth',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'تحديث إعدادات علامة الأصل',
'barcode_title' => 'تحديث إعدادات الباركود',
'barcodes' => 'Barcodes',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'اللقب والحرف الاول من الاسم (smithj@example.com)',
'firstinitial.lastname' => 'الاسم الأخير الأول (jsmith@example.com)',
'firstnamelastinitial' => 'اللقب والحرف الاول من الاسم (smithj@example.com)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'الإسم الأول',
'first_name_format' => 'الاسم الأول (jane@example.com)',
'files' => 'الملفات',
@ -245,7 +246,7 @@ return [
'requested_assets_menu' => 'الأصول المطلوبة',
'request_canceled' => 'تم إلغاء الطلب',
'request_item' => 'Request this item',
'external_link_tooltip' => 'External link to',
'external_link_tooltip' => 'رابط خارجي إلى',
'save' => 'حفظ',
'select_var' => 'اختر :thing... ', // this will eventually replace all of our other selects
'select' => 'تحديد',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'Частни API ключове',
'api_key_warning' => 'Когато се генерират API token, копирайте ги веднага защото
няма да бъдат видими в последствие.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Вашият API основен URL се намира на:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'API ключа ще изтиче на:',
'api_reference' => 'Прочетете <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> за да
намерите специфични API endpoints и допълнителна API документация.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Местоположението не съществува.',
'assoc_users' => 'Местоположението е свързано с поне един потребител и не може да бъде изтрито. Моля, актуализирайте потребителите, така че да не са свързани с това местоположение и опитайте отново. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'Местоположението е свързано с поне един актив и не може да бъде изтрито. Моля, актуализирайте активите, така че да не са свързани с това местоположение и опитайте отново. ',
'assoc_child_loc' => 'В избраното местоположение е присъединено едно или повече местоположения. Моля преместете ги в друго и опитайте отново.',
'assigned_assets' => 'Изписани Активи',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Дължина на етикети на актив, включително zerofill',
'username_format_help' => 'Тази настройка се изпозлва само при импортиране, ако потребителя не е въведен и ние трябва да му генерираме потребителско име.',
'oauth_title' => 'OAuth API Настройки',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'Oauth Endpoint настройки',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Обнови настроките на етикета на актива',
'barcode_title' => 'Обнови настройките на баркод',
'barcodes' => 'Баркоди',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Фамилия и Първа буква от име (ivanov_i@example.com)',
'firstinitial.lastname' => 'Първа буква от името и Фамилия (i.ivanov@example.com)',
'firstnamelastinitial' => 'Име и първа буква от фамилия (ivani@example.com)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'Собствено име',
'first_name_format' => 'Име (jane@example.com)',
'files' => 'Файлове',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'Personal API Keys',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they
will not be visible to you again.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Your API base url is located at:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'API tokens are set to expire in:',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to
find specific API endpoints and additional API documentation.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Location does not exist.',
'assoc_users' => 'This location is currently associated with at least one user and cannot be deleted. Please update your users to no longer reference this location and try again. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'This location is currently associated with at least one asset and cannot be deleted. Please update your assets to no longer reference this location and try again. ',
'assoc_child_loc' => 'This location is currently the parent of at least one child location and cannot be deleted. Please update your locations to no longer reference this location and try again. ',
'assigned_assets' => 'Assigned Assets',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Length of asset tags, including zerofill',
'username_format_help' => 'This setting will only be used by the import process if a username is not provided and we have to generate a username for you.',
'oauth_title' => 'OAuth API Settings',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'Oauth Endpoint Settings',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Update Asset Tag Settings',
'barcode_title' => 'Update Barcode Settings',
'barcodes' => 'Barcodes',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Last Name First Initial (smith_j@example.com)',
'firstinitial.lastname' => 'First Initial Last Name (j.smith@example.com)',
'firstnamelastinitial' => 'First Name Last Initial (janes@example.com)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'First Name',
'first_name_format' => 'First Name (jane@example.com)',
'files' => 'Files',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'Personal API Keys',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they
will not be visible to you again.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Your API base url is located at:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'API tokens are set to expire in:',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to
find specific API endpoints and additional API documentation.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Location does not exist.',
'assoc_users' => 'This location is currently associated with at least one user and cannot be deleted. Please update your users to no longer reference this location and try again. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'This location is currently associated with at least one asset and cannot be deleted. Please update your assets to no longer reference this location and try again. ',
'assoc_child_loc' => 'This location is currently the parent of at least one child location and cannot be deleted. Please update your locations to no longer reference this location and try again. ',
'assigned_assets' => 'Assigned Assets',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Length of asset tags, including zerofill',
'username_format_help' => 'This setting will only be used by the import process if a username is not provided and we have to generate a username for you.',
'oauth_title' => 'OAuth API Settings',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'Oauth Endpoint Settings',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Update Asset Tag Settings',
'barcode_title' => 'Update Barcode Settings',
'barcodes' => 'Barcodes',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Last Name First Initial (smith_j@example.com)',
'firstinitial.lastname' => 'First Initial Last Name (j.smith@example.com)',
'firstnamelastinitial' => 'First Name Last Initial (janes@example.com)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'First Name',
'first_name_format' => 'First Name (jane@example.com)',
'files' => 'Files',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'Osobní API klíče',
'api_key_warning' => 'Při generování tokenu API se ujistěte, že jej ihned zkopírujete, protože
nebudou viditelné.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Základní adresa API je umístěna na:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'API tokeny vyprší:',
'api_reference' => 'Zkontrolujte prosím <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> pro
nalezení konkrétního koncového bodu a další API dokumentaci.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Místo neexistuje.',
'assoc_users' => 'Toto umístění je spojeno s alespoň jedním uživatelem a nemůže být smazáno. Aktualizujte uživatele aby nenáleželi k tomuto umístění a zkuste to znovu. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'Toto umístění je spojeno s alespoň jedním majetkem a nemůže být smazáno. Aktualizujte majetky tak aby nenáleželi k tomuto umístění a zkuste to znovu. ',
'assoc_child_loc' => 'Toto umístění je nadřazené alespoň jednomu umístění a nelze jej smazat. Aktualizujte své umístění tak, aby na toto umístění již neodkazovalo a zkuste to znovu. ',
'assigned_assets' => 'Přiřazený majetek',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Délka značek majetku včetně zerofill',
'username_format_help' => 'Toto nastavení bude použito pouze v případě, že není zadáno uživatelské jméno a my pro vás musíme vygenerovat uživatelské jméno.',
'oauth_title' => 'Nastavení OAuth API',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'Nastavení koncových bodů Oauth',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Aktualizovat nastavení inventárních čísel',
'barcode_title' => 'Aktualizovat nastavení čárového kódu',
'barcodes' => 'Čárové kódy',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Příjmení Iniciál (novak_j@example.com)',
'firstinitial.lastname' => 'Iniciál Príjmení (j.novak@example.com)',
'firstnamelastinitial' => 'Jméno Iniciál(josefn@example.com)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'Jméno',
'first_name_format' => 'Jméno (jane@example.com)',
'files' => 'Soubory',

View file

@ -6,6 +6,6 @@ return array(
'action' => 'Akce',
'by' => 'Vytvořil',
'item' => 'Položka',
'no_matching_records' => 'No matching records found',
'no_matching_records' => 'Nebyly nalezeny žádné odpovídající záznamy',
);

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'Personal API Keys',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they
will not be visible to you again.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Your API base url is located at:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'API tokens are set to expire in:',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to
find specific API endpoints and additional API documentation.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Nid yw\'r lleoliad yn bodoli.',
'assoc_users' => 'Mae\'r lleoliad yma wedi perthnasu i oleiaf un defnyddiwr a nid yw\'n bosib dileu. Diweddarwch eich defnyddwyr i beidio cyfeirio at y lleoliad yma ac yna ceisiwch eto. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'Mae\'r lleoliad yma wedi perthnasu i oleiaf un ased a nid yw\'n bosib dileu. Diweddarwch eich asedau i beidio cyfeirio at y lleoliad yma ac yna ceisiwch eto. ',
'assoc_child_loc' => 'Mae\'r lleoliad yma yn rhiant i oleiaf un lleoliad a nid yw\'n bosib dileu. Diweddarwch eich lleoliadau i beidio cyfeirio at y lleoliad yma ac yna ceisiwch eto. ',
'assigned_assets' => 'Assigned Assets',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Hyd y tagiau asedau, gan gynnwys zerofill',
'username_format_help' => 'Dim ond os na ddarperir enw defnyddiwr y bydd y gosodiad hwn yn cael ei ddefnyddio a bod yn rhaid i ni gynhyrchu enw defnyddiwr i chi.',
'oauth_title' => 'OAuth API Settings',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'Oauth Endpoint Settings',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Update Asset Tag Settings',
'barcode_title' => 'Update Barcode Settings',
'barcodes' => 'Barcodes',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Last Name First Initial (smith_j@example.com)',
'firstinitial.lastname' => 'Llythyren Cyntaf Enw Cyntaf Cyfenw (jsmith@example.com)',
'firstnamelastinitial' => 'First Name Last Initial (janes@example.com)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'Enw cyntaf',
'first_name_format' => 'Enw Cyntaf (jane@example.com)',
'files' => 'Ffeiliau',

View file

@ -2,10 +2,10 @@
return array(
'personal_api_keys' => 'Personlige API-nøgler',
'api_key_warning' => 'Når du genererer en API-nøgle, skal du sørge for at kopiere det ned med det samme, da de ikke vil være synlige for dig igen.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Din basisadressen til API\'en er:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'API-nøgler er indstillet til at udløbe efter:',
'api_reference' => 'Se venligst i <a href="https://snipe-it.readme.io/reference" target="_blank">API-manualen</a> for at finde specifikke API-endpoints og yderligere API-dokumentation.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Beliggenhed findes ikke.',
'assoc_users' => 'Denne placering er i øjeblikket forbundet med mindst en bruger og kan ikke slettes. Opdater dine brugere for ikke længere at henvise til denne placering, og prøv igen.',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'Denne placering er i øjeblikket forbundet med mindst ét aktiv og kan ikke slettes. Opdater dine aktiver for ikke længere at henvise til denne placering, og prøv igen.',
'assoc_child_loc' => 'Denne placering er for øjeblikket forælder på mindst et barns placering og kan ikke slettes. Opdater dine placeringer for ikke længere at henvise til denne placering, og prøv igen.',
'assigned_assets' => 'Tildelte aktiver',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Længde af aktivetiketter, herunder zerofill',
'username_format_help' => 'Denne indstilling vil kun blive brugt af importprocessen, hvis et brugernavn ikke er angivet, og vi er nødt til at generere et brugernavn til dig.',
'oauth_title' => 'OAuth API Indstillinger',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'Oauth Endpoint Indstillinger',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Opdater Aktiv Tag Indstillinger',
'barcode_title' => 'Opdater Stregkode Indstillinger',
'barcodes' => 'Barcodes',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Efternavn første bogstav i fornavn (smith_j@example.com)',
'firstinitial.lastname' => 'Første bogstav i fornavn.efternavn (j.smith@example.com)',
'firstnamelastinitial' => 'Fornavn førstebogstav i efternavn (janes@example.com)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'Fornavn',
'first_name_format' => 'Fornavn (jane@example.com)',
'files' => 'Filer',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'Persönliche API-Schlüssel',
'api_key_warning' => 'Wenn Sie ein API-Token generieren, stellen Sie sicher, dass Sie diesen sofort kopieren, da er
nicht mehr für Sie sichtbar sein wird.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Ihre API Basis-URL befindet sich unter:',
'api_base_url_endpoint' => '/&lt;Endpunkt&gt;',
'api_token_expiration_time' => 'API-Token sollen ablaufen in:',
'api_reference' => 'Bitte lesen Sie die <a href="https://snipe-it.readme.io/reference" target="_blank">API Dokumentation</a> um
Informationen über die verfügbaren API endpoints und ihre Verwendung zu erhalten.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Konto erfolgreich aktualisiert',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Standort nicht verfügbar.',
'assoc_users' => 'Dieser Standort ist aktuell mindestens einem Benutzer zugewiesen und kann nicht gelöscht werden. Bitte entfernen Sie die Standortzuweisung bei den jeweiligen Benutzern und versuchen Sie es erneut. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'Dieser Standort ist aktuell mindestens einem Gegenstand zugewiesen und kann nicht gelöscht werden. Bitte entfernen Sie die Standortzuweisung bei den jeweiligen Gegenständen und versuchen Sie es erneut diesen Standort zu entfernen. ',
'assoc_child_loc' => 'Dieser Ort ist aktuell mindestens einem anderen Ort übergeordnet und kann nicht gelöscht werden. Bitte Orte aktualisieren, so dass dieser Standort nicht mehr verknüpft ist und erneut versuchen. ',
'assigned_assets' => 'Zugeordnete Assets',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Länge der Asset Tags, inklusive zerofill',
'username_format_help' => 'Diese Einstellung wird nur beim Import benutzt, wenn kein Benutzername angegeben wurde und ein Benutzername generiert werden muss.',
'oauth_title' => 'OAuth API Einstellungen',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'OAuth Endpunkt Einstellungen',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Asset Tag Einstellungen aktualisieren',
'barcode_title' => 'Barcode Einstellungen aktualisieren',
'barcodes' => 'Barcodes',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Nachname_Initiale des Vornamens (mustermann_e@beispiel.de)',
'firstinitial.lastname' => 'Initiale des Vornamens.Nachname (e.mustermann@beispiel.de)',
'firstnamelastinitial' => 'Vorname und Initiale des Nachnamen (erika_m@beispiel.de)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'Vorname',
'first_name_format' => 'Vorname (jane@example.com)',
'files' => 'Dateien',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'Persönliche API-Schlüssel',
'api_key_warning' => 'Wenn Du ein API-Token generierst, stelle sicher, dass Du es sofort danach kopierst, da es
nicht mehr für Dich sichtbar sein wird.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Deine API Basis-URL befindet sich unter:',
'api_base_url_endpoint' => '/&lt;Endpunkt&gt;',
'api_token_expiration_time' => 'API-Token sollen ablaufen in:',
'api_reference' => 'Bitte lese die <a href="https://snipe-it.readme.io/reference" target="_blank">API Dokumentation</a> um
Informationen über die verfügbaren API endpoints und ihre Verwendung zu erhalten.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Konto erfolgreich aktualisiert',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Standort existiert nicht.',
'assoc_users' => 'Dieser Standort ist mindestens einem Benutzer zugewiesen und kann nicht gelöscht werden. Bitte entferne die Standortzuweisung bei den jeweiligen Benutzern und versuche erneut, diesen Standort zu entfernen. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'Dieser Standort ist mindestens einem Gegenstand zugewiesen und kann nicht gelöscht werden. Bitte entferne die Standortzuweisung bei den jeweiligen Gegenständen und versuche erneut, diesen Standort zu entfernen. ',
'assoc_child_loc' => 'Dieser Standort ist mindestens einem anderen Ort übergeordnet und kann nicht gelöscht werden. Bitte aktualisiere Deine Standorte, so dass dieser Standort nicht mehr verknüpft ist, und versuche es erneut. ',
'assigned_assets' => 'Zugeordnete Assets',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Länge der Asset Tags, inklusive führender Nullen',
'username_format_help' => 'Diese Einstellung wird nur beim Import benutzt, wenn kein Benutzername angegeben wurde und wir einen Benutzernamen für Dich generieren müssen.',
'oauth_title' => 'OAuth API Einstellungen',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'Oauth Endpunkt Einstellungen',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Asset Tag Einstellungen aktualisieren',
'barcode_title' => 'Barcode Einstellungen aktualisieren',
'barcodes' => 'Barcodes',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Nachname_Initial des Vornamens (mustermann_e@beispiel.de)',
'firstinitial.lastname' => 'Initial des Vornamens.Nachname (e.mustermann@beispiel.de)',
'firstnamelastinitial' => 'Vorname_Initial des Nachnamen (erika_m@beispiel.de)',
'lastnamefirstname' => 'Nach- und Vorname (mustermann.jana@example.com)',
'first_name' => 'Vorname',
'first_name_format' => 'Vorname (erika@beispiel.de)',
'files' => 'Dateien',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'Προσωπικά Κλειδιά Api',
'api_key_warning' => 'Κατά τη δημιουργία ενός διακριτικού API, φροντίστε να το αντιγράψετε αμέσως καθώς
δεν θα είναι ορατό σε σας ξανά.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Η βάση url σας API βρίσκεται στο:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'Τα API tokens έχουν οριστεί να λήγουν:',
'api_reference' => 'Παρακαλούμε ελέγξτε τον <a href="https://snipe-it.readme.io/reference" target="_blank">API κωδικό</a> στο
βρείτε συγκεκριμένα endpoints API και πρόσθετη τεκμηρίωση API.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Η τοποθεσία δεν υπάρχει.',
'assoc_users' => 'Αυτή η θέση είναι επί του παρόντος σχετίζεται με τουλάχιστον ένα χρήστη και δεν μπορεί να διαγραφεί. Παρακαλούμε να ενημερώσετε τους χρήστες σας να μην αναφέρονται σε αυτήν τη θέση και δοκιμάστε ξανά. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'Αυτή η τοποθεσία συσχετίζεται προς το παρόν με τουλάχιστον ένα στοιχείο και δεν μπορεί να διαγραφεί. Ενημερώστε τα στοιχεία σας ώστε να μην αναφέρονται πλέον στην τοποθεσία αυτή και να προσπαθήσετε ξανά.',
'assoc_child_loc' => 'Αυτή η τοποθεσία είναι αυτήν τη στιγμή γονέας τουλάχιστον μιας τοποθεσίας παιδιού και δεν μπορεί να διαγραφεί. Ενημερώστε τις τοποθεσίες σας ώστε να μην αναφέρονται πλέον σε αυτήν την τοποθεσία και δοκιμάστε ξανά.',
'assigned_assets' => 'Αντιστοιχισμένα Στοιχεία Ενεργητικού',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Μήκος ετικετών ενεργητικού, συμπεριλαμβανομένου του zerofill',
'username_format_help' => 'Αυτή η ρύθμιση θα χρησιμοποιηθεί μόνο από τη διαδικασία εισαγωγής εάν δεν παρέχεται ένα όνομα χρήστη και πρέπει να δημιουργήσουμε ένα όνομα χρήστη για εσάς.',
'oauth_title' => 'Ρυθμίσεις Oauth Api',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'Oauth',
'oauth_help' => 'Ρυθμίσεις Τελικού Σημείου Oauth',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Ενημέρωση Ρυθμίσεων Ετικετών Παγίων',
'barcode_title' => 'Ενημέρωση Ρυθμίσεων Barcode',
'barcodes' => 'Barcodes',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Πρώτο Όνομα Αρχικό (smith_j@example.com)',
'firstinitial.lastname' => 'Πρώτο Αρχικό Όνομα (j.smith@example.com)',
'firstnamelastinitial' => 'Επίθετο Όνομα (janes@example.com)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'Όνομα',
'first_name_format' => 'Όνομα (jane@example.com)',
'files' => 'Αρχεία',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'Personal API Keys',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they
will not be visible to you again.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Your API base URL is located at:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'API tokens are set to expire in:',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to
find specific API endpoints and additional API documentation.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Location does not exist.',
'assoc_users' => 'This location is currently associated with at least one user and cannot be deleted. Please update your users to no longer reference this location and try again. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'This location is currently associated with at least one asset and cannot be deleted. Please update your assets to no longer reference this location and try again. ',
'assoc_child_loc' => 'This location is currently the parent of at least one child location and cannot be deleted. Please update your locations to no longer reference this location and try again. ',
'assigned_assets' => 'Assigned Assets',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Length of asset tags, including zerofill',
'username_format_help' => 'This setting will only be used by the import process if a username is not provided and we have to generate a username for you.',
'oauth_title' => 'OAuth API Settings',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'Oauth Endpoint Settings',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Update Asset Tag Settings',
'barcode_title' => 'Update Barcode Settings',
'barcodes' => 'Barcodes',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Last Name First Initial (smith_j@example.com)',
'firstinitial.lastname' => 'First Initial Last Name (j.smith@example.com)',
'firstnamelastinitial' => 'First Name Last Initial (janes@example.com)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'First Name',
'first_name_format' => 'First Name (jane@example.com)',
'files' => 'Files',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'Personal API Keys',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they
will not be visible to you again.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Your API base url is located at:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'API tokens are set to expire in:',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to
find specific API endpoints and additional API documentation.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Lokasi tidak ada.',
'assoc_users' => 'Saat ini kategori ini terkait dengan setidaknya satu pengguna dan tidak dapat dihapus. Silahkan perbaharui pengguna anda untuk tidak lagi tereferensi dengan kategori ini dan coba lagi. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'Saat ini kategori ini terkait dengan setidaknya satu pengguna dan tidak dapat dihapus. Silahkan perbaharui pengguna anda untuk tidak lagi tereferensi dengan kategori ini dan coba lagi. ',
'assoc_child_loc' => 'Lokasi ini saat ini merupakan induk dari setidaknya satu lokasi anak dan tidak dapat dihapus. Perbarui lokasi Anda agar tidak lagi merujuk lokasi ini dan coba lagi. ',
'assigned_assets' => 'Assigned Assets',

View file

@ -287,8 +287,18 @@ return [
'zerofill_count' => 'Panjang tag aset, termasuk isian kosong',
'username_format_help' => 'This setting will only be used by the import process if a username is not provided and we have to generate a username for you.',
'oauth_title' => 'OAuth API Settings',
'oauth_clients' => 'OAuth Clients',
'oauth' => 'OAuth',
'oauth_help' => 'Oauth Endpoint Settings',
'oauth_no_clients' => 'You have not created any OAuth clients yet.',
'oauth_secret' => 'Secret',
'oauth_authorized_apps' => 'Authorized Applications',
'oauth_redirect_url' => 'Redirect URL',
'oauth_name_help' => ' Something your users will recognize and trust.',
'oauth_scopes' => 'Scopes',
'oauth_callback_url' => 'Your application authorization callback URL.',
'create_client' => 'Create Client',
'no_scopes' => 'No scopes',
'asset_tag_title' => 'Update Asset Tag Settings',
'barcode_title' => 'Update Barcode Settings',
'barcodes' => 'Barcodes',

View file

@ -134,6 +134,7 @@ return [
'lastname_firstinitial' => 'Last Name First Initial (smith_j@example.com)',
'firstinitial.lastname' => 'First Initial Last Name (j.smith@example.com)',
'firstnamelastinitial' => 'First Name Last Initial (janes@example.com)',
'lastnamefirstname' => 'Last Name First Name (smith.jane@example.com)',
'first_name' => 'Nama Pertama',
'first_name_format' => 'Nama Depan (jane@example.com)',
'files' => 'Berkas',

View file

@ -2,12 +2,10 @@
return array(
'personal_api_keys' => 'Personal API Keys',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they
will not be visible to you again.',
'api_key_warning' => 'When generating an API token, be sure to copy it down immediately as they will not be visible to you again.',
'api_base_url' => 'Your API base url is located at:',
'api_base_url_endpoint' => '/&lt;endpoint&gt;',
'api_token_expiration_time' => 'API tokens are set to expire in:',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to
find specific API endpoints and additional API documentation.',
'api_reference' => 'Please check the <a href="https://snipe-it.readme.io/reference" target="_blank">API reference</a> to find specific API endpoints and additional API documentation.',
'profile_updated' => 'Account successfully updated',
);

View file

@ -3,7 +3,7 @@
return array(
'does_not_exist' => 'Location does not exist.',
'assoc_users' => 'This location is currently associated with at least one user and cannot be deleted. Please update your users to no longer reference this location and try again. ',
'assoc_users' => 'This location is not currently deletable because it is the location of record for at least one asset or user, has assets assigned to it, or is the parent location of another location. Please update your models to no longer reference this company and try again. ',
'assoc_assets' => 'This location is currently associated with at least one asset and cannot be deleted. Please update your assets to no longer reference this location and try again. ',
'assoc_child_loc' => 'This location is currently the parent of at least one child location and cannot be deleted. Please update your locations to no longer reference this location and try again. ',
'assigned_assets' => 'Assigned Assets',

View file

@ -327,7 +327,6 @@ return [
'labels' => 'Labels',
'labels_title' => 'Update Label Settings',
'labels_help' => 'Label sizes &amp; settings',
'purge' => 'Purge',
'purge_keywords' => 'permanently delete',
'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.',
@ -374,5 +373,7 @@ return [
'database_driver' => 'Database Driver',
'bs_table_storage' => 'Table Storage',
'timezone' => 'Timezone',
'profile_edit' => 'Edit Profile',
'profile_edit_help' => 'Allow users to edit their own profiles.',
];

View file

@ -14,6 +14,5 @@ return [
'username_help_bottom' => 'Your username and email address <em>may</em> be the same, but may not be, depending on your configuration. If you cannot remember your username, contact your administrator. <br><br><strong>Usernames without an associated email address will not be emailed a password reset link.</strong> ',
'google_login' => 'Login with Google Workspace',
'google_login_failed' => 'Google Login failed, please try again.',
];

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