Merge pull request #8494 from snipe/features/nuke_barcodes

Added utility to delete barcode cache from labels/barcodes setting
This commit is contained in:
snipe 2020-10-06 17:42:57 -07:00 committed by GitHub
commit 0e632cc7fb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 134 additions and 3 deletions

View file

@ -9,10 +9,12 @@ use App\Notifications\MailTest;
use App\Services\LdapAd; use App\Services\LdapAd;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use Illuminate\Support\Facades\Storage;
class SettingsController extends Controller class SettingsController extends Controller
{ {
@ -143,6 +145,51 @@ class SettingsController extends Controller
} }
/**
* Delete server-cached barcodes
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v5.0.0]
* @return Response
*/
public function purgeBarcodes()
{
$file_count = 0;
$files = Storage::disk('public')->files('barcodes');
foreach ($files as $file) { // iterate files
$file_parts = explode(".", $file);
$extension = end($file_parts);
\Log::debug($extension);
// Only generated barcodes would have a .png file extension
if ($extension =='png') {
\Log::debug('Deleting: '.$file);
try {
Storage::disk('public')->delete($file);
\Log::debug('Deleting: '.$file);
$file_count++;
} catch (\Exception $e) {
\Log::debug($e);
}
}
}
return response()->json(['message' => 'Deleted '.$file_count.' barcodes'], 200);
}
/** /**
* Get a list of login attempts * Get a list of login attempts
* *

View file

@ -58,7 +58,7 @@
{{ Form::label('barcode_type', trans('admin/settings/general.barcode_type')) }} {{ Form::label('barcode_type', trans('admin/settings/general.barcode_type')) }}
</div> </div>
<div class="col-md-9"> <div class="col-md-9">
{!! Form::barcode_types('barcode_type', old('barcode_type', $setting->barcode_type), 'select2') !!} {!! Form::barcode_types('barcode_type', old('barcode_type', $setting->barcode_type), 'select2 col-md-4') !!}
{!! $errors->first('barcode_type', '<span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span>') !!} {!! $errors->first('barcode_type', '<span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span>') !!}
</div> </div>
</div> </div>
@ -80,13 +80,13 @@
{{ Form::label('alt_barcode', trans('admin/settings/general.alt_barcode_type')) }} {{ Form::label('alt_barcode', trans('admin/settings/general.alt_barcode_type')) }}
</div> </div>
<div class="col-md-9"> <div class="col-md-9">
{!! Form::alt_barcode_types('alt_barcode', old('alt_barcode', $setting->alt_barcode), 'select2') !!} {!! Form::alt_barcode_types('alt_barcode', old('alt_barcode', $setting->alt_barcode), 'select2 col-md-4') !!}
{!! $errors->first('barcode_type', '<span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span>') !!} {!! $errors->first('barcode_type', '<span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span>') !!}
</div> </div>
</div> </div>
@else @else
<span class="help-block col-md-offset-3 col-md-12"> <span class="help-block col-md-offset-3 col-md-12">
{{ trans('admin/settings/general.php_gd_warning') }} {{ trans('admin/settings/general.php_gd_warning') }}
<br> <br>
{{ trans('admin/settings/general.php_gd_info') }} {{ trans('admin/settings/general.php_gd_info') }}
</span> </span>
@ -112,6 +112,27 @@
</div> </div>
</div> </div>
<!-- Nuke barcode cache -->
<div class="form-group">
<div class="col-md-3">
{{ Form::label('purge_barcodes', 'Purge Barcodes') }}
</div>
<div class="col-md-9" id="purgebarcodesrow">
<a class="btn btn-default btn-sm pull-left" id="purgebarcodes" style="margin-right: 10px;">
Delete Barcode Cache</a>
<span id="purgebarcodesicon"></span>
<span id="purgebarcodesresult"></span>
<span id="purgebarcodesstatus"></span>
</div>
<div class="col-md-9 col-md-offset-3">
<div id="purgebarcodesstatus-error" class="text-danger"></div>
</div>
<div class="col-md-9 col-md-offset-3">
<p class="help-block">This will attempt to delete cached barcodes. This would typically only be used if your barcode dettings have changed, or if your Snipe-IT URL has changed. Barcodes will be re-generated when accessed next.</p>
</div>
</div>
</div> </div>
@ -132,3 +153,61 @@
{{Form::close()}} {{Form::close()}}
@stop @stop
@push('js')
<script nonce="{{ csrf_token() }}">
// Delete barcodes
$("#purgebarcodes").click(function(){
$("#purgebarcodesrow").removeClass('text-success');
$("#purgebarcodesrow").removeClass('text-danger');
$("#purgebarcodesicon").html('');
$("#purgebarcodesstatus").html('');
$('#purgebarcodesstatus-error').html('');
$("#purgebarcodesicon").html('<i class="fa fa-spinner spin"></i> Attempting to delete files...');
$.ajax({
url: '{{ route('api.settings.purgebarcodes') }}',
type: 'POST',
headers: {
"X-Requested-With": 'XMLHttpRequest',
"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr('content')
},
data: {},
dataType: 'json',
success: function (data) {
console.dir(data);
$("#purgebarcodesicon").html('');
$("#purgebarcodesstatus").html('');
$('#purgebarcodesstatus-error').html('');
$("#purgebarcodesstatus").removeClass('text-danger');
$("#purgebarcodesstatus").addClass('text-success');
if (data.message) {
$("#purgebarcodesstatus").html('<i class="fa fa-check text-success"></i> ' + data.message);
}
},
error: function (data) {
$("#purgebarcodesicon").html('');
$("#purgebarcodesstatus").html('');
$('#purgebarcodesstatus-error').html('');
$("#purgebarcodesstatus").removeClass('text-success');
$("#purgebarcodesstatus").addClass('text-danger');
$("#purgebarcodesicon").html('<i class="fa fa-exclamation-triangle text-danger"></i>');
$('#purgebarcodesstatus').html('Files could not be deleted.');
if (data.responseJSON) {
$('#purgebarcodesstatus-error').html('Error: ' + data.responseJSON.messages);
} else {
console.dir(data);
}
}
});
});
</script>
@endpush

View file

@ -635,6 +635,11 @@ Route::group(['prefix' => 'v1','namespace' => 'Api', 'middleware' => 'auth:api']
'uses' => 'SettingsController@ldapAdSettingsTest' 'uses' => 'SettingsController@ldapAdSettingsTest'
]); ]);
Route::post('settings/purge_barcodes', [
'as' => 'api.settings.purgebarcodes',
'uses' => 'SettingsController@purgeBarcodes'
]);
Route::get('settings/login-attempts', [ Route::get('settings/login-attempts', [
'middleware' => ['auth', 'authorize:superuser'], 'middleware' => ['auth', 'authorize:superuser'],
'as' => 'api.settings.login_attempts', 'as' => 'api.settings.login_attempts',