Merge remote-tracking branch 'origin/develop'

Signed-off-by: snipe <snipe@snipe.net>

# Conflicts:
#	public/css/dist/skins/_all-skins.css
#	public/css/dist/skins/_all-skins.min.css
#	public/css/dist/skins/skin-blue-dark.css
#	public/css/dist/skins/skin-blue-dark.min.css
#	public/css/dist/skins/skin-green-dark.css
#	public/css/dist/skins/skin-green-dark.min.css
#	public/css/dist/skins/skin-orange-dark.css
#	public/css/dist/skins/skin-orange-dark.min.css
#	public/css/dist/skins/skin-purple-dark.css
#	public/css/dist/skins/skin-purple-dark.min.css
#	public/css/dist/skins/skin-red-dark.css
#	public/css/dist/skins/skin-red-dark.min.css
#	public/css/dist/skins/skin-yellow-dark.css
#	public/css/dist/skins/skin-yellow-dark.min.css
#	public/mix-manifest.json
This commit is contained in:
snipe 2025-04-29 20:38:41 +01:00
commit c031f0b45e
31 changed files with 207 additions and 97 deletions

View file

@ -83,30 +83,30 @@ class CustomFieldsController extends Controller
{
$this->authorize('create', CustomField::class);
$show_in_email = $request->get("show_in_email", 0);
$display_in_user_view = $request->get("display_in_user_view", 0);
$show_in_email = $request->input("show_in_email", 0);
$display_in_user_view = $request->input("display_in_user_view", 0);
// Override the display settings if the field is encrypted
if ($request->get("field_encrypted") == '1') {
if ($request->input("field_encrypted") == '1') {
$show_in_email = '0';
$display_in_user_view = '0';
}
$field = new CustomField([
"name" => trim($request->get("name")),
"element" => $request->get("element"),
"help_text" => $request->get("help_text"),
"field_values" => $request->get("field_values"),
"field_encrypted" => $request->get("field_encrypted", 0),
"name" => trim($request->input("name")),
"element" => $request->input("element"),
"help_text" => $request->input("help_text"),
"field_values" => $request->input("field_values"),
"field_encrypted" => $request->input("field_encrypted", 0),
"show_in_email" => $show_in_email,
"is_unique" => $request->get("is_unique", 0),
"is_unique" => $request->input("is_unique", 0),
"display_in_user_view" => $display_in_user_view,
"auto_add_to_fieldsets" => $request->get("auto_add_to_fieldsets", 0),
"show_in_listview" => $request->get("show_in_listview", 0),
"show_in_requestable_list" => $request->get("show_in_requestable_list", 0),
"display_checkin" => $request->get("display_checkin", 0),
"display_checkout" => $request->get("display_checkout", 0),
"display_audit" => $request->get("display_audit", 0),
"auto_add_to_fieldsets" => $request->input("auto_add_to_fieldsets", 0),
"show_in_listview" => $request->input("show_in_listview", 0),
"show_in_requestable_list" => $request->input("show_in_requestable_list", 0),
"display_checkin" => $request->input("display_checkin", 0),
"display_checkout" => $request->input("display_checkout", 0),
"display_audit" => $request->input("display_audit", 0),
"created_by" => auth()->id()
]);

View file

@ -397,7 +397,7 @@ class CheckoutableListener
default => null,
};
if (!$category->checkin_email) {
if (!$category?->checkin_email) {
return true;
}
return false;

View file

@ -79,6 +79,9 @@ class CustomField extends Model
'auto_add_to_fieldsets',
'show_in_listview',
'show_in_email',
'display_checkout',
'display_checkin',
'display_audit',
'show_in_requestable_list',
];
@ -183,7 +186,44 @@ class CustomField extends Model
{
return $this->belongsToMany(\App\Models\CustomFieldset::class);
}
public function displayFieldInCheckinForm()
{
if ($this->display_checkin == '1') {
return true;
}
return false;
}
public function displayFieldInCheckoutForm()
{
if ($this->display_checkout == '1') {
return true;
}
return false;
}
public function displayFieldInAuditForm()
{
if ($this->display_audit == '1') {
return true;
}
return false;
}
public function displayFieldInCurrentForm($form_type = null)
{
switch ($form_type) {
case 'audit':
return $this->displayFieldInAuditForm();
case 'checkin':
return $this->displayFieldInCheckinForm();
case 'checkout':
return $this->displayFieldInCheckoutForm();
}
}
public function assetModels()
{
return $this->fieldset()->with('models')->get()->pluck('models')->flatten()->unique('id');

View file

@ -71,6 +71,25 @@ class CustomFieldset extends Model
return $this->belongsTo(\App\Models\User::class); //WARNING - not all CustomFieldsets have a User!!
}
public function displayAnyFieldsInForm($form_type = null)
{
if ($this->fields) {
switch ($form_type) {
case 'audit':
return $this->fields->where('display_audit', '1')->count() > 0;
case 'checkin':
return $this->fields->where('display_checkin', '1')->count() > 0;
case 'checkout':
return $this->fields->where('display_checkout', '1')->count() > 0;
default:
return true;
}
}
return false;
}
/**
* Determine the validation rules we should apply based on the
* custom field format

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,23 +1,23 @@
{
"/js/build/app.js": "/js/build/app.js?id=f69d05a80165b5bbf6b0f4691edfd24e",
"/css/dist/skins/skin-black-dark.css": "/css/dist/skins/skin-black-dark.css?id=d34ae2483cbe2c77478c45f4006eba55",
"/css/dist/skins/_all-skins.css": "/css/dist/skins/_all-skins.css?id=6bf62cdec2477f3176df196fd0c99662",
"/css/dist/skins/_all-skins.css": "/css/dist/skins/_all-skins.css?id=d5dc0681cf5bc2f6344d6beb16db7ea7",
"/css/build/overrides.css": "/css/build/overrides.css?id=4db745985e0eef8cd209114c605b552f",
"/css/build/app.css": "/css/build/app.css?id=d1fe702237ab0106011dd7c51be0ceb2",
"/css/build/AdminLTE.css": "/css/build/AdminLTE.css?id=a67bd93bed52e6a29967fe472de66d6c",
"/css/dist/skins/skin-yellow.css": "/css/dist/skins/skin-yellow.css?id=fc7adb943668ac69fe4b646625a7571f",
"/css/dist/skins/skin-yellow-dark.css": "/css/dist/skins/skin-yellow-dark.css?id=53edc92eb2d272744bc7404ec259930e",
"/css/dist/skins/skin-yellow-dark.css": "/css/dist/skins/skin-yellow-dark.css?id=8ca60f5df9506812114764df513d9520",
"/css/dist/skins/skin-red.css": "/css/dist/skins/skin-red.css?id=b9a74ec0cd68f83e7480d5ae39919beb",
"/css/dist/skins/skin-red-dark.css": "/css/dist/skins/skin-red-dark.css?id=cdbb4f543fb448f03617c7ed9d2cbec3",
"/css/dist/skins/skin-red-dark.css": "/css/dist/skins/skin-red-dark.css?id=5a447adb2dd18fde96458777b2f46fe1",
"/css/dist/skins/skin-purple.css": "/css/dist/skins/skin-purple.css?id=cf6c8c340420724b02d6e787ef9bded5",
"/css/dist/skins/skin-purple-dark.css": "/css/dist/skins/skin-purple-dark.css?id=cfa51820f16533fd62b3c3d720e368ec",
"/css/dist/skins/skin-purple-dark.css": "/css/dist/skins/skin-purple-dark.css?id=899849ceca15b8ac237fc91ec27c70af",
"/css/dist/skins/skin-orange.css": "/css/dist/skins/skin-orange.css?id=268041e902b019730c23ee3875838005",
"/css/dist/skins/skin-orange-dark.css": "/css/dist/skins/skin-orange-dark.css?id=98bd6927e46418c642fdd33fe56f4f26",
"/css/dist/skins/skin-orange-dark.css": "/css/dist/skins/skin-orange-dark.css?id=1553df41c4209655da8936de30ed6e56",
"/css/dist/skins/skin-green.css": "/css/dist/skins/skin-green.css?id=b48f4d8af0e1ca5621c161e93951109f",
"/css/dist/skins/skin-green-dark.css": "/css/dist/skins/skin-green-dark.css?id=16dc04eb54142bd3c32c2768d365d988",
"/css/dist/skins/skin-green-dark.css": "/css/dist/skins/skin-green-dark.css?id=9f5a1b4f1dcc9a742cc33a6722716790",
"/css/dist/skins/skin-contrast.css": "/css/dist/skins/skin-contrast.css?id=f0fbbb0ac729ea092578fb05ca615460",
"/css/dist/skins/skin-blue.css": "/css/dist/skins/skin-blue.css?id=091d9625203be910caca3e229afe438f",
"/css/dist/skins/skin-blue-dark.css": "/css/dist/skins/skin-blue-dark.css?id=18787b3f00a3be7be38ee4e26cbd2a07",
"/css/dist/skins/skin-blue-dark.css": "/css/dist/skins/skin-blue-dark.css?id=d2cf8ab3847bf0ace7530a9d09dff40c",
"/css/dist/skins/skin-black.css": "/css/dist/skins/skin-black.css?id=1f33ca3d860461c1127ec465ab3ebb6b",
"/css/dist/all.css": "/css/dist/all.css?id=850d7cc68e3bdeb8436d71453fb7ea0f",
"/css/dist/signature-pad.css": "/css/dist/signature-pad.css?id=6a89d3cd901305e66ced1cf5f13147f7",
@ -92,21 +92,21 @@
"/css/webfonts/fa-v4compatibility.woff2": "/css/webfonts/fa-v4compatibility.woff2?id=331c85bd61ffa93af09273d1bc2add5a",
"/js/dist/bootstrap-table-locale-all.min.js": "/js/dist/bootstrap-table-locale-all.min.js?id=5e93ef0a1889bed3f92a705dc1e92c9b",
"/js/dist/bootstrap-table-en-US.min.js": "/js/dist/bootstrap-table-en-US.min.js?id=c0f21fb7e62d6f0a0153f1cdbf26782a",
"/css/dist/skins/_all-skins.min.css": "/css/dist/skins/_all-skins.min.css?id=6bf62cdec2477f3176df196fd0c99662",
"/css/dist/skins/_all-skins.min.css": "/css/dist/skins/_all-skins.min.css?id=d5dc0681cf5bc2f6344d6beb16db7ea7",
"/css/dist/skins/skin-black-dark.min.css": "/css/dist/skins/skin-black-dark.min.css?id=d34ae2483cbe2c77478c45f4006eba55",
"/css/dist/skins/skin-black.min.css": "/css/dist/skins/skin-black.min.css?id=1f33ca3d860461c1127ec465ab3ebb6b",
"/css/dist/skins/skin-blue-dark.min.css": "/css/dist/skins/skin-blue-dark.min.css?id=18787b3f00a3be7be38ee4e26cbd2a07",
"/css/dist/skins/skin-blue-dark.min.css": "/css/dist/skins/skin-blue-dark.min.css?id=d2cf8ab3847bf0ace7530a9d09dff40c",
"/css/dist/skins/skin-blue.min.css": "/css/dist/skins/skin-blue.min.css?id=091d9625203be910caca3e229afe438f",
"/css/dist/skins/skin-contrast.min.css": "/css/dist/skins/skin-contrast.min.css?id=f0fbbb0ac729ea092578fb05ca615460",
"/css/dist/skins/skin-green-dark.min.css": "/css/dist/skins/skin-green-dark.min.css?id=16dc04eb54142bd3c32c2768d365d988",
"/css/dist/skins/skin-green-dark.min.css": "/css/dist/skins/skin-green-dark.min.css?id=9f5a1b4f1dcc9a742cc33a6722716790",
"/css/dist/skins/skin-green.min.css": "/css/dist/skins/skin-green.min.css?id=b48f4d8af0e1ca5621c161e93951109f",
"/css/dist/skins/skin-orange-dark.min.css": "/css/dist/skins/skin-orange-dark.min.css?id=98bd6927e46418c642fdd33fe56f4f26",
"/css/dist/skins/skin-orange-dark.min.css": "/css/dist/skins/skin-orange-dark.min.css?id=1553df41c4209655da8936de30ed6e56",
"/css/dist/skins/skin-orange.min.css": "/css/dist/skins/skin-orange.min.css?id=268041e902b019730c23ee3875838005",
"/css/dist/skins/skin-purple-dark.min.css": "/css/dist/skins/skin-purple-dark.min.css?id=cfa51820f16533fd62b3c3d720e368ec",
"/css/dist/skins/skin-purple-dark.min.css": "/css/dist/skins/skin-purple-dark.min.css?id=899849ceca15b8ac237fc91ec27c70af",
"/css/dist/skins/skin-purple.min.css": "/css/dist/skins/skin-purple.min.css?id=cf6c8c340420724b02d6e787ef9bded5",
"/css/dist/skins/skin-red-dark.min.css": "/css/dist/skins/skin-red-dark.min.css?id=cdbb4f543fb448f03617c7ed9d2cbec3",
"/css/dist/skins/skin-red-dark.min.css": "/css/dist/skins/skin-red-dark.min.css?id=5a447adb2dd18fde96458777b2f46fe1",
"/css/dist/skins/skin-red.min.css": "/css/dist/skins/skin-red.min.css?id=b9a74ec0cd68f83e7480d5ae39919beb",
"/css/dist/skins/skin-yellow-dark.min.css": "/css/dist/skins/skin-yellow-dark.min.css?id=53edc92eb2d272744bc7404ec259930e",
"/css/dist/skins/skin-yellow-dark.min.css": "/css/dist/skins/skin-yellow-dark.min.css?id=8ca60f5df9506812114764df513d9520",
"/css/dist/skins/skin-yellow.min.css": "/css/dist/skins/skin-yellow.min.css?id=fc7adb943668ac69fe4b646625a7571f",
"/css/dist/bootstrap-table.css": "/css/dist/bootstrap-table.css?id=54d676a6ea8677dd48f6c4b3041292cf",
"/js/build/vendor.js": "/js/build/vendor.js?id=89dffa552c6e3abe3a2aac6c9c7b466b",

View file

@ -380,7 +380,7 @@ input[type=text], input[type=search] {
background-color: var(--back-sub);
}
.table-striped>tbody>tr:nth-of-type(even){
background-color: var(--back-sub-alt);
background-color: var(--back-main);
}
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa, .box-body, .box-footer, .box-header {
color: var(--text-main);
@ -404,7 +404,16 @@ a {
}
}
#customFieldsTable a[href*='/models'] {
color: var(--back-sub);
background-color: var(--back-sub-alt);
color: var(--link);
}
#customFieldsTable a[href*='/models']:hover {
background-color: var(--text-sub);
color: var(--button-hover);
}
#customFieldsTable a[href*='/models']:visited {
background-color: var(--background);
color: var(--visited-link);
}
#customFieldsTable a[href*='/fieldsets']{
background-color: transparent;

View file

@ -391,7 +391,16 @@ a {
}
}
#customFieldsTable a[href*='/models'] {
color: var(--back-sub);
background-color: var(--back-sub-alt);
color: var(--link);
}
#customFieldsTable a[href*='/models']:hover {
background-color: var(--text-sub);
color: var(--button-hover);
}
#customFieldsTable a[href*='/models']:visited {
background-color: var(--background);
color: var(--visited-link);
}
#customFieldsTable a[href*='/fieldsets']{
background-color: transparent;

View file

@ -389,7 +389,16 @@ input[type=text], input[type=search] {
border-bottom: #000;
}
#customFieldsTable a[href*='/models'] {
color: var(--back-sub);
background-color: var(--back-sub-alt);
color: var(--link);
}
#customFieldsTable a[href*='/models']:hover {
background-color: var(--text-sub);
color: var(--button-hover);
}
#customFieldsTable a[href*='/models']:visited {
background-color: var(--background);
color: var(--visited-link);
}
#customFieldsTable a[href*='/fieldsets']{
background-color: transparent;

View file

@ -414,6 +414,18 @@ a {
display: table;
}
#customFieldsTable a[href*='/models'] {
background-color: var(--back-sub-alt);
color: var(--link);
}
#customFieldsTable a[href*='/models']:hover {
background-color: var(--text-sub);
color: var(--button-hover);
}
#customFieldsTable a[href*='/models']:visited {
background-color: var(--back-sub);
color: var(--visited-link);
}
.row-striped .row:nth-of-type(odd) div {
background-color: var(--back-sub);

View file

@ -409,7 +409,16 @@ a {
}
}
#customFieldsTable a[href*='/models'] {
color: var(--back-sub);
background-color: var(--back-sub-alt);
color: var(--link);
}
#customFieldsTable a[href*='/models']:hover {
background-color: var(--text-sub);
color: var(--button-hover);
}
#customFieldsTable a[href*='/models']:visited {
background-color: var(--back-sub);
color: var(--visited-link);
}
#customFieldsTable a[href*='/fieldsets']{
background-color: transparent;

View file

@ -383,6 +383,18 @@ tr th div.th-inner {
.box-header.with-border {
border-bottom: #000;
}
#customFieldsTable a[href*='/models'] {
background-color: var(--back-sub-alt);
color: var(--link);
}
#customFieldsTable a[href*='/models']:hover {
background-color: var(--text-sub);
color: var(--button-hover);
}
#customFieldsTable a[href*='/models']:visited {
background-color: var(--background);
color: var(--visited-link);
}
.row-striped {
vertical-align: top;

View file

@ -702,9 +702,6 @@
</tbody>
</table>
</div><!-- /consumables-tab -->
<div class="tab-pane" id="test">
<p>fdlkgjljg</p>
</div>
</div><!-- /.tab-content -->
</div><!-- nav-tabs-custom -->

View file

@ -115,12 +115,6 @@
</div>
</div>
<!-- Custom fields -->
@include("models/custom_fields_form", [
'model' => $asset->model,
'show_display_checkout_fields' => 'true'
])
<!-- Note -->
<div class="form-group{{ $errors->has('note') ? ' has-error' : '' }}">
@ -136,6 +130,12 @@
<!-- Audit Image -->
@include ('partials.forms.edit.image-upload', ['help_text' => trans('general.audit_images_help')])
<!-- Custom fields -->
@include("models/custom_fields_form", [
'model' => $asset->model,
'show_custom_fields_type' => 'audit'
])
</div> <!--/.box-body-->
<div class="box-footer">

View file

@ -139,29 +139,26 @@
</div>
</div>
<!-- Note -->
<div class="form-group {{ $errors->has('note') ? 'error' : '' }}">
<label for="note" class="col-md-3 control-label">
{{ trans('general.notes') }}
</label>
<div class="col-md-8">
<textarea class="col-md-6 form-control" id="note" @required($snipeSettings->require_checkinout_notes)
name="note">{{ old('note', $asset->note) }}</textarea>
{!! $errors->first('note', '<span class="alert-msg" aria-hidden="true"><i class="fas fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
</div>
<!-- Custom fields -->
@include("models/custom_fields_form", [
'model' => $asset->model,
'show_display_checkin_fields' => 'true'
'show_custom_fields_type' => 'checkin'
])
<!-- Note -->
<div class="form-group {{ $errors->has('note') ? 'error' : '' }}">
<label for="note" class="col-md-3 control-label">
{{ trans('general.notes') }}
</label>
<div class="col-md-8">
<textarea class="col-md-6 form-control" id="note" @required($snipeSettings->require_checkinout_notes)
name="note">{{ old('note', $asset->note) }}</textarea>
{!! $errors->first('note', '<span class="alert-msg" aria-hidden="true"><i class="fas fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
</div>
</div> <!--/.box-body-->
</div> <!--/.box-body-->

View file

@ -142,12 +142,6 @@
</div>
</div>
<!-- Custom fields -->
@include("models/custom_fields_form", [
'model' => $asset->model,
'show_display_checkout_fields' => 'true'
])
<!-- Note -->
<div class="form-group {{ $errors->has('note') ? 'error' : '' }}">
<label for="note" class="col-md-3 control-label">
@ -156,10 +150,18 @@
<div class="col-md-8">
<textarea class="col-md-6 form-control" id="note" @required($snipeSettings->require_checkinout_notes)
name="note">{{ old('note', $asset->note) }}</textarea>
name="note">{{ old('note', $asset->note) }}</textarea>
{!! $errors->first('note', '<span class="alert-msg" aria-hidden="true"><i class="fas fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
</div>
<!-- Custom fields -->
@include("models/custom_fields_form", [
'model' => $asset->model,
'show_custom_fields_type' => 'checkout'
])
@if ($asset->requireAcceptance() || $asset->getEula() || ($snipeSettings->webhook_endpoint!=''))
<div class="form-group notification-callout">

View file

@ -1,25 +1,21 @@
@if (($model) && ($model->fieldset))
@if (($model) && ($model->fieldset) && $model->fieldset->displayAnyFieldsInForm($show_custom_fields_type ?? ''))
<div class="col-md-12 col-sm-12">
<fieldset name="custom-fields" class="bottom-padded">
<legend class="highlight">
{{ trans('admin/custom_fields/general.custom_fields') }}
</legend>
@foreach($model->fieldset->fields AS $field)
@if (
((!isset($show_display_checkin_fields))
|| (($field->display_checkin == '1')
&& ($show_display_checkin_fields =='true'))) &&
((!isset($show_display_checkout_fields))
|| (($field->display_checkout == '1')
&& ($show_display_checkout_fields =='true')))
)
@foreach($model->fieldset->fields as $field)
@if (!isset($show_custom_fields_type) || ($field->displayFieldInCurrentForm($show_custom_fields_type)))
<div class="form-group{{ $errors->has($field->db_column_name()) ? ' has-error' : '' }}">
<label for="{{ $field->db_column_name() }}" class="col-md-3 control-label">
{{ $field->name }}
</label>
<div class="col-md-7 col-sm-12">
@ -105,9 +101,8 @@
</div>
@endif
</div>
@endif
@endif
@endforeach
</fieldset>
</div>

View file

@ -2,7 +2,7 @@
<div class="form-group {{ $errors->has('warranty_months') ? ' has-error' : '' }}">
<label for="warranty_months" class="col-md-3 control-label">{{ trans('admin/hardware/form.warranty') }}</label>
<div class="col-md-9">
<div class="input-group col-md-3" style="padding-left: 0px;">
<div class="input-group col-md-4 col-sm-6" style="padding-left: 0px;">
<input class="form-control" type="text" name="warranty_months" id="warranty_months" value="{{ old('warranty_months', $item->warranty_months) }}" maxlength="3" />
<span class="input-group-addon">{{ trans('admin/hardware/form.months') }}</span>
</div>