Merge pull request #10831 from snipe/merges/master_down_to_develop_march_16

v6.0.0-RC-5 - Merges master down to develop
This commit is contained in:
snipe 2022-03-16 18:35:42 +00:00 committed by GitHub
commit d55c176199
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 200 additions and 86 deletions

View file

@ -0,0 +1,59 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class KillAllSessions extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'snipeit:global-logout {--force : Skip the danger prompt; assuming you enter "y"} ';
/**
* The console command description.
*
* @var string
*/
protected $description = 'This command will destroy all web sessions on disk and will force a re-login for all users.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
if (!$this->option('force') && !$this->confirm("****************************************************\nTHIS WILL FORCE A LOGIN FOR ALL LOGGED IN USERS.\n\nAre you SURE you wish to continue? ")) {
return $this->error("Session loss not confirmed");
}
$session_files = glob(storage_path("framework/sessions/*"));
$count = 0;
foreach ($session_files as $file) {
if (is_file($file))
unlink($file);
$count++;
}
\DB::table('users')->update(['remember_token' => null]);
$this->info($count. ' sessions cleared!');
}
}

View file

@ -82,6 +82,7 @@ class RestoreFromBackup extends Command
return $this->error('Could not access file: '.$filename.' - '.array_key_exists($errcode, $errors) ? $errors[$errcode] : " Unknown reason: $errcode"); return $this->error('Could not access file: '.$filename.' - '.array_key_exists($errcode, $errors) ? $errors[$errcode] : " Unknown reason: $errcode");
} }
$private_dirs = [ $private_dirs = [
'storage/private_uploads/assets', // these are asset _files_, not the pictures. 'storage/private_uploads/assets', // these are asset _files_, not the pictures.
'storage/private_uploads/audits', 'storage/private_uploads/audits',
@ -245,19 +246,21 @@ class RestoreFromBackup extends Command
return false; return false;
} }
$bytes_read = 0; $bytes_read = 0;
while (($buffer = fgets($sql_contents, self::$buffer_size)) !== false) { while (($buffer = fgets($sql_contents, self::$buffer_size)) !== false) {
$bytes_read += strlen($buffer); $bytes_read += strlen($buffer);
// \Log::debug("Buffer is: '$buffer'"); // \Log::debug("Buffer is: '$buffer'");
$bytes_written = fwrite($pipes[0], $buffer); $bytes_written = fwrite($pipes[0], $buffer);
if ($bytes_written === false) { if ($bytes_written === false) {
$stdout = fgets($pipes[1]); $stdout = fgets($pipes[1]);
$this->info($stdout); $this->info($stdout);
$stderr = fgets($pipes[2]); $stderr = fgets($pipes[2]);
$this->info($stderr); $this->info($stderr);
return false; return false;
} }
} }
if (!feof($sql_contents) || $bytes_read == 0) { if (!feof($sql_contents) || $bytes_read == 0) {
return $this->error("Not at end of file for sql file, or zero bytes read. aborting!"); return $this->error("Not at end of file for sql file, or zero bytes read. aborting!");
} }

View file

@ -235,6 +235,7 @@ class AssetsController extends Controller
->with('statuslabel_types', Helper::statusTypeList()); ->with('statuslabel_types', Helper::statusTypeList());
} }
/** /**
* Returns a view that presents information about an asset for detail view. * Returns a view that presents information about an asset for detail view.
* *
@ -309,6 +310,7 @@ class AssetsController extends Controller
$asset->location_id = $request->input('rtd_location_id', null); $asset->location_id = $request->input('rtd_location_id', null);
} }
if ($request->filled('image_delete')) { if ($request->filled('image_delete')) {
try { try {
unlink(public_path().'/uploads/assets/'.$asset->image); unlink(public_path().'/uploads/assets/'.$asset->image);
@ -401,6 +403,24 @@ class AssetsController extends Controller
return redirect()->route('hardware.index')->with('success', trans('admin/hardware/message.delete.success')); return redirect()->route('hardware.index')->with('success', trans('admin/hardware/message.delete.success'));
} }
/**
* Searches the assets table by serial, and redirects if it finds one
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v3.0]
* @return Redirect
*/
public function getAssetBySerial(Request $request)
{
$topsearch = ($request->get('topsearch')=="true");
if (!$asset = Asset::where('serial', '=', $request->get('serial'))->first()) {
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist'));
}
$this->authorize('view', $asset);
return redirect()->route('hardware.show', $asset->id)->with('topsearch', $topsearch);
}
/** /**
* Searches the assets table by asset tag, and redirects if it finds one * Searches the assets table by asset tag, and redirects if it finds one
* *
@ -420,6 +440,7 @@ class AssetsController extends Controller
return redirect()->route('hardware.show', $asset->id)->with('topsearch', $topsearch); return redirect()->route('hardware.show', $asset->id)->with('topsearch', $topsearch);
} }
/** /**
* Return a QR code for the asset * Return a QR code for the asset
* *
@ -792,6 +813,7 @@ class AssetsController extends Controller
return view('hardware/audit-overdue'); return view('hardware/audit-overdue');
} }
public function auditStore(Request $request, $id) public function auditStore(Request $request, $id)
{ {
$this->authorize('audit', Asset::class); $this->authorize('audit', Asset::class);
@ -822,6 +844,7 @@ class AssetsController extends Controller
$asset->location_id = $request->input('location_id'); $asset->location_id = $request->input('location_id');
} }
if ($asset->save()) { if ($asset->save()) {
$file_name = ''; $file_name = '';
// Upload an image, if attached // Upload an image, if attached

View file

@ -4,6 +4,7 @@ namespace App\Http\Transformers;
use App\Helpers\Helper; use App\Helpers\Helper;
use App\Models\Asset; use App\Models\Asset;
use App\Models\Setting;
use Gate; use Gate;
use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Collection;
@ -21,6 +22,9 @@ class AssetsTransformer
public function transformAsset(Asset $asset) public function transformAsset(Asset $asset)
{ {
// This uses the getSettings() method so we're pulling from the cache versus querying the settings on single asset
$setting = Setting::getSettings();
$array = [ $array = [
'id' => (int) $asset->id, 'id' => (int) $asset->id,
'name' => e($asset->name), 'name' => e($asset->name),
@ -65,6 +69,8 @@ class AssetsTransformer
'name'=> e($asset->defaultLoc->name), 'name'=> e($asset->defaultLoc->name),
] : null, ] : null,
'image' => ($asset->getImageUrl()) ? $asset->getImageUrl() : null, 'image' => ($asset->getImageUrl()) ? $asset->getImageUrl() : null,
'qr' => ($setting->qr_code=='1') ? config('app.url').'/uploads/barcodes/qr-'.str_slug($asset->asset_tag).'-'.str_slug($asset->id).'.png' : null,
'alt_barcode' => ($setting->alt_barcode_enabled=='1') ? config('app.url').'/uploads/barcodes/'.str_slug($setting->alt_barcode).'-'.str_slug($asset->asset_tag).'.png' : null,
'assigned_to' => $this->transformAssignedTo($asset), 'assigned_to' => $this->transformAssignedTo($asset),
'warranty_months' => ($asset->warranty_months > 0) ? e($asset->warranty_months.' '.trans('admin/hardware/form.months')) : null, 'warranty_months' => ($asset->warranty_months > 0) ? e($asset->warranty_months.' '.trans('admin/hardware/form.months')) : null,
'warranty_expires' => ($asset->warranty_months > 0) ? Helper::getFormattedDateObject($asset->warranty_expires, 'date') : null, 'warranty_expires' => ($asset->warranty_months > 0) ? Helper::getFormattedDateObject($asset->warranty_expires, 'date') : null,

View file

@ -48,9 +48,9 @@ class LicenseImporter extends ItemImporter
} }
$asset_tag = $this->item['asset_tag'] = $this->findCsvMatch($row, 'asset_tag'); // used for checkout out to an asset. $asset_tag = $this->item['asset_tag'] = $this->findCsvMatch($row, 'asset_tag'); // used for checkout out to an asset.
$this->item['expiration_date'] = null; $this->item["expiration_date"] = null;
if ($this->findCsvMatch($row, 'expiration_date') != '') { if ($this->findCsvMatch($row, "expiration_date")!='') {
$this->item['expiration_date'] = date('Y-m-d 00:00:01', strtotime($this->findCsvMatch($row, 'expiration_date'))); $this->item["expiration_date"] = date("Y-m-d 00:00:01", strtotime($this->findCsvMatch($row, "expiration_date")));
} }
$this->item['license_email'] = $this->findCsvMatch($row, 'license_email'); $this->item['license_email'] = $this->findCsvMatch($row, 'license_email');
$this->item['license_name'] = $this->findCsvMatch($row, 'license_name'); $this->item['license_name'] = $this->findCsvMatch($row, 'license_name');
@ -59,9 +59,9 @@ class LicenseImporter extends ItemImporter
$this->item['reassignable'] = $this->findCsvMatch($row, 'reassignable'); $this->item['reassignable'] = $this->findCsvMatch($row, 'reassignable');
$this->item['seats'] = $this->findCsvMatch($row, 'seats'); $this->item['seats'] = $this->findCsvMatch($row, 'seats');
$this->item['termination_date'] = null; $this->item["termination_date"] = null;
if ($this->findCsvMatch($row, 'termination_date') != '') { if ($this->findCsvMatch($row, "termination_date")!='') {
$this->item['termination_date'] = date('Y-m-d 00:00:01', strtotime($this->findCsvMatch($row, 'termination_date'))); $this->item["termination_date"] = date("Y-m-d 00:00:01", strtotime($this->findCsvMatch($row, "termination_date")));
} }
if ($editingLicense) { if ($editingLicense) {

View file

@ -1,10 +1,10 @@
<?php <?php
return array ( return array (
'app_version' => 'v6.0.0-RC-4', 'app_version' => 'v6.0.0-RC-5',
'full_app_version' => 'v6.0.0-RC-4 - build 6754-gafd83311a', 'full_app_version' => 'v6.0.0-RC-5 - build 6772-g7cbcd2d95',
'build_version' => '6754', 'build_version' => '6772',
'prerelease_version' => '', 'prerelease_version' => '',
'hash_version' => 'gafd83311a', 'hash_version' => 'g7cbcd2d95',
'full_hash' => 'v6.0.0-RC-4-1-gafd83311a', 'full_hash' => 'v6.0.0-RC-5-19-g7cbcd2d95',
'branch' => 'develop', 'branch' => 'merges/master_down_to_develop_march_16',
); );

View file

@ -13,20 +13,22 @@ class CreateCheckoutAcceptancesTable extends Migration
*/ */
public function up() public function up()
{ {
Schema::create('checkout_acceptances', function (Blueprint $table) { if (!Schema::hasTable('checkout_acceptances')) {
$table->increments('id'); Schema::create('checkout_acceptances', function (Blueprint $table) {
$table->increments('id');
$table->morphs('checkoutable'); $table->morphs('checkoutable');
$table->integer('assigned_to_id')->nullable(); $table->integer('assigned_to_id')->nullable();
$table->string('signature_filename')->nullable(); $table->string('signature_filename')->nullable();
$table->timestamp('accepted_at')->nullable(); $table->timestamp('accepted_at')->nullable();
$table->timestamp('declined_at')->nullable(); $table->timestamp('declined_at')->nullable();
$table->timestamps(); $table->timestamps();
$table->softDeletes(); $table->softDeletes();
}); });
}
} }
/** /**
@ -36,6 +38,8 @@ class CreateCheckoutAcceptancesTable extends Migration
*/ */
public function down() public function down()
{ {
Schema::dropIfExists('checkout_acceptances'); if (Schema::hasTable('checkout_acceptances')) {
Schema::dropIfExists('checkout_acceptances');
}
} }
} }

View file

@ -1,7 +1,9 @@
<?php <?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
class AddKitsLicensesTable extends Migration class AddKitsLicensesTable extends Migration
{ {
@ -12,15 +14,16 @@ class AddKitsLicensesTable extends Migration
*/ */
public function up() public function up()
{ {
// if (!Schema::hasTable('kits_licenses')) {
Schema::create('kits_licenses', function ($table) { Schema::create('kits_licenses', function ($table) {
$table->increments('id'); $table->increments('id');
$table->integer('kit_id')->nullable()->default(null); $table->integer('kit_id')->nullable()->default(null);
$table->integer('license_id')->nullable()->default(null); $table->integer('license_id')->nullable()->default(null);
$table->integer('quantity')->default(1); $table->integer('quantity')->default(1);
$table->timestamps(); $table->timestamps();
}); });
} }
}
/** /**
* Reverse the migrations. * Reverse the migrations.
@ -29,7 +32,9 @@ class AddKitsLicensesTable extends Migration
*/ */
public function down() public function down()
{ {
// if (Schema::hasTable('kits_licenses')) {
Schema::drop('kits_licenses'); Schema::drop('kits_licenses');
} }
}
} }

View file

@ -1,7 +1,8 @@
<?php <?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
class AddKitsTable extends Migration class AddKitsTable extends Migration
{ {
@ -12,14 +13,16 @@ class AddKitsTable extends Migration
*/ */
public function up() public function up()
{ {
// if (!Schema::hasTable('kits')) {
Schema::create('kits', function ($table) { Schema::create('kits', function ($table) {
$table->increments('id'); $table->increments('id');
$table->string('name')->nullable()->default(null); $table->string('name')->nullable()->default(null);
$table->timestamps(); $table->timestamps();
$table->engine = 'InnoDB'; $table->engine = 'InnoDB';
}); });
} }
}
/** /**
* Reverse the migrations. * Reverse the migrations.
@ -28,7 +31,9 @@ class AddKitsTable extends Migration
*/ */
public function down() public function down()
{ {
// if (Schema::hasTable('kits')) {
Schema::drop('kits'); Schema::drop('kits');
} }
}
} }

View file

@ -1,7 +1,9 @@
<?php <?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
class AddKitsModelsTable extends Migration class AddKitsModelsTable extends Migration
{ {
@ -12,15 +14,16 @@ class AddKitsModelsTable extends Migration
*/ */
public function up() public function up()
{ {
// if (!Schema::hasTable('kits_models')) {
Schema::create('kits_models', function ($table) { Schema::create('kits_models', function ($table) {
$table->increments('id'); $table->increments('id');
$table->integer('kit_id')->nullable()->default(null); $table->integer('kit_id')->nullable()->default(null);
$table->integer('model_id')->nullable()->default(null); $table->integer('model_id')->nullable()->default(null);
$table->integer('quantity')->default(1); $table->integer('quantity')->default(1);
$table->timestamps(); $table->timestamps();
}); });
} }
}
/** /**
* Reverse the migrations. * Reverse the migrations.
@ -29,7 +32,8 @@ class AddKitsModelsTable extends Migration
*/ */
public function down() public function down()
{ {
// if (Schema::hasTable('kits_models')) {
Schema::drop('kits_models'); Schema::drop('kits_models');
}
} }
} }

View file

@ -1,8 +1,8 @@
<?php <?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddKitsConsumablesTable extends Migration class AddKitsConsumablesTable extends Migration
{ {
@ -13,14 +13,15 @@ class AddKitsConsumablesTable extends Migration
*/ */
public function up() public function up()
{ {
// if (!Schema::hasTable('kits_consumables')) {
Schema::create('kits_consumables', function ($table) { Schema::create('kits_consumables', function ($table) {
$table->increments('id'); $table->increments('id');
$table->integer('kit_id')->nullable()->default(null); $table->integer('kit_id')->nullable()->default(null);
$table->integer('consumable_id')->nullable()->default(null); $table->integer('consumable_id')->nullable()->default(null);
$table->integer('quantity')->default(1); $table->integer('quantity')->default(1);
$table->timestamps(); $table->timestamps();
}); });
}
} }
/** /**
@ -30,7 +31,8 @@ class AddKitsConsumablesTable extends Migration
*/ */
public function down() public function down()
{ {
// if (Schema::hasTable('kits_consumables')) {
Schema::drop('kits_consumables'); Schema::drop('kits_consumables');
}
} }
} }

View file

@ -1,8 +1,8 @@
<?php <?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddKitsAccessoriesTable extends Migration class AddKitsAccessoriesTable extends Migration
{ {
@ -13,14 +13,15 @@ class AddKitsAccessoriesTable extends Migration
*/ */
public function up() public function up()
{ {
// if (!Schema::hasTable('kits_accessories')) {
Schema::create('kits_accessories', function ($table) { Schema::create('kits_accessories', function ($table) {
$table->increments('id'); $table->increments('id');
$table->integer('kit_id')->nullable()->default(null); $table->integer('kit_id')->nullable()->default(null);
$table->integer('accessory_id')->nullable()->default(null); $table->integer('accessory_id')->nullable()->default(null);
$table->integer('quantity')->default(1); $table->integer('quantity')->default(1);
$table->timestamps(); $table->timestamps();
}); });
}
} }
/** /**
@ -30,7 +31,8 @@ class AddKitsAccessoriesTable extends Migration
*/ */
public function down() public function down()
{ {
// if (Schema::hasTable('kits_accessories')) {
Schema::drop('kits_accessories'); Schema::drop('kits_accessories');
}
} }
} }

View file

@ -459,6 +459,7 @@
@else @else
{!! nl2br(e($asset->{$field->db_column_name()})) !!} &nbsp; {!! nl2br(e($asset->{$field->db_column_name()})) !!} &nbsp;
@endif @endif
@endif @endif
</div> </div>
</div> </div>

View file

@ -53,7 +53,7 @@
paginationLastText: "{{ trans('general.last') }}", paginationLastText: "{{ trans('general.last') }}",
paginationPreText: "{{ trans('general.previous') }}", paginationPreText: "{{ trans('general.previous') }}",
paginationNextText: "{{ trans('general.next') }}", paginationNextText: "{{ trans('general.next') }}",
pageList: ['10','20', '30','50','100','150','200', '500', '1000'], pageList: ['10','20', '30','50','100','150','200'{!! ((config('app.max_results') > 200) ? ",'500'" : '') !!}{!! ((config('app.max_results') > 500) ? ",'".config('app.max_results')."'" : '') !!}],
pageSize: {{ (($snipeSettings->per_page!='') && ($snipeSettings->per_page > 0)) ? $snipeSettings->per_page : 20 }}, pageSize: {{ (($snipeSettings->per_page!='') && ($snipeSettings->per_page > 0)) ? $snipeSettings->per_page : 20 }},
paginationVAlign: 'both', paginationVAlign: 'both',
queryParams: function (params) { queryParams: function (params) {