mirror of
https://github.com/snipe/snipe-it.git
synced 2024-11-14 01:24:06 -08:00
f16ce09a7a
* If a user id is provided in the name column of an import, we should assume that it is a user id and check out to it. * Fix build of vue files. The location is public/js/build, not public/build * Ensure a status type is set before allowing submission of an import. Also expand the status text label to change color based on success/failure. Fixes #4658 * Use right key to lookup emails when importing users. Fixes 4619. * Import serial for components, and make unique matches based on the serial as well as the name. Fixes #4569 * Set the location_id when importing an item properly. This moves as well to using the Asset::checkout() method, which should consolidate the logic into a useful spot. Fixes #4563 (I think) * Production assets. * Case insensitive field map guessing and repopulate when changingin import type.
78 lines
2.2 KiB
PHP
78 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Requests;
|
|
|
|
use App\Models\Import;
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class ItemImportRequest extends FormRequest
|
|
{
|
|
/**
|
|
* Determine if the user is authorized to make this request.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function authorize()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Get the validation rules that apply to the request.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function rules()
|
|
{
|
|
return [
|
|
'import-type' => 'required',
|
|
];
|
|
}
|
|
|
|
public function import(Import $import)
|
|
{
|
|
ini_set('max_execution_time', 600); //600 seconds = 10 minutes
|
|
ini_set('memory_limit', '500M');
|
|
$filename = config('app.private_uploads') . '/imports/' . $import->file_path;
|
|
$import->import_type = $this->input('import-type');
|
|
$class = title_case($import->import_type);
|
|
$classString = "App\\Importer\\{$class}Importer";
|
|
$importer = new $classString($filename);
|
|
$import->field_map = request('column-mappings');
|
|
$import->save();
|
|
$fieldMappings=[];
|
|
if ($import->field_map) {
|
|
// We submit as csv field: column, but the importer is happier if we flip it here.
|
|
$fieldMappings = array_change_key_case(array_flip($import->field_map), CASE_LOWER);
|
|
// dd($fieldMappings);
|
|
}
|
|
$importer->setCallbacks([$this, 'log'], [$this, 'progress'], [$this, 'errorCallback'])
|
|
->setUserId(Auth::id())
|
|
->setUpdating($this->has('import-update'))
|
|
->setUsernameFormat('firstname.lastname')
|
|
->setFieldMappings($fieldMappings);
|
|
// $logFile = storage_path('logs/importer.log');
|
|
// \Log::useFiles($logFile);
|
|
$importer->import();
|
|
return $this->errors;
|
|
}
|
|
|
|
public function log($string)
|
|
{
|
|
// \Log::Info($string);
|
|
}
|
|
|
|
public function progress($count)
|
|
{
|
|
// Open for future
|
|
return;
|
|
}
|
|
public function errorCallback($item, $field, $errorString)
|
|
{
|
|
$this->errors[$item->name][$field] = $errorString;
|
|
}
|
|
|
|
private $errors;
|
|
}
|