diff --git a/app/Http/Controllers/FileController.php b/app/Http/Controllers/FileController.php index 49b37ce..b15f114 100644 --- a/app/Http/Controllers/FileController.php +++ b/app/Http/Controllers/FileController.php @@ -12,25 +12,40 @@ use Illuminate\Support\Facades\Storage; class FileController extends Controller { - public function datasubmit(FileRequest $request): RedirectResponse + public function uploadFile(FileRequest $request): RedirectResponse { - //upload file in public folder - //dd($reqest->all()); - //$filename = 'new_file.'.$request->filename->extension(); - //$request->filename->move(public_path('uploads'), $filename); - - //dd($request->all()); - //$request->validate([ - // 'filename'=>'required' - //]); $filename = 'new_file.'.$request->file("filetoinsert")->getClientOriginalExtension(); $request->file("filetoinsert")->storeAs('file_temp', $filename); - //$request->filename->storeAs('file_temp', $filename); + // Leggi il contenuto del file CSV + $contenutoCSV = Storage::get('file_temp/new_file.csv'); + + // Analizza il contenuto CSV + $righeCSV = str_getcsv($contenutoCSV, "\n"); + + // Converte le righe CSV in un array associativo + $dati = []; + foreach ($righeCSV as $riga) { + $dati[] = str_getcsv($riga); + } + + // Converte l'array in formato JSON + $json = json_encode($dati); + + // Stampa il JSON + echo $json; + + return redirect('/words'); } + public function insertFile() + { + return view("words.partials.upload-file"); + } + + public function delete(): RedirectResponse { Storage::delete('file_temp/new_file.txt'); diff --git a/app/Http/Controllers/WordsController.php b/app/Http/Controllers/WordsController.php index 48ed6f7..30acd1f 100644 --- a/app/Http/Controllers/WordsController.php +++ b/app/Http/Controllers/WordsController.php @@ -2,7 +2,8 @@ namespace App\Http\Controllers; -use App\Http\Requests\WordRequest; +use App\Http\Requests\StoreWordRequest; +use App\Http\Requests\UpdateWordRequest; use App\Models\Word; use Illuminate\Http\RedirectResponse; @@ -19,14 +20,14 @@ class WordsController extends Controller public function index() { return view('words.index', [ - 'words' => Word::all(), + 'words' => Word::latest('id')->paginate(10), ]); } /** * Store a new Word in the database. */ - public function store(WordRequest $request): RedirectResponse + public function store(StoreWordRequest $request): RedirectResponse { $word = new Word; $word->name = $request->name; @@ -46,21 +47,42 @@ class WordsController extends Controller $name = $data->name; $translation = $data->translation; //return $translation; - return view("words.modify-word-form", compact('id', "name", "translation")); + return view("words.partials.modify-word-form", compact('id', "name", "translation")); + } + + public function insert() + { + return view("words.partials.insert-word-form"); } /** * Update an existing Word in the database. */ - public function update(WordRequest $request, $id): RedirectResponse + public function update(UpdateWordRequest $request, $id): RedirectResponse { $data = Word::find($id); - $data->name = $request->name; - $data->translation = $request->translation; + $data->translation = $request->input('translation'); $data->save(); + // Update the unique value + $data->name = $request->input('name'); - return redirect('/words'); + // Check for uniqueness + $isUnique = Word::where('name', $data->name) + ->where('id', '!=', $id) // Exclude the current record from the uniqueness check + ->doesntExist(); + + if ($isUnique) { + // Save the updated record + $data->translation = $request->input('translation'); + $data->save(); + + // Redirect to a success route or return a success message + return redirect('/words'); + } else { + // Unique constraint violated + return back()->withInput()->withErrors(['name' => 'Error: words already exists']); + } } /** diff --git a/app/Http/Requests/WordRequest.php b/app/Http/Requests/StoreWordRequest.php similarity index 74% rename from app/Http/Requests/WordRequest.php rename to app/Http/Requests/StoreWordRequest.php index de4c6c0..4e8f1dd 100644 --- a/app/Http/Requests/WordRequest.php +++ b/app/Http/Requests/StoreWordRequest.php @@ -4,13 +4,13 @@ namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; -class WordRequest extends FormRequest +class StoreWordRequest extends FormRequest { public function rules(): array { return [ - 'name' => ['required'], - 'translation' => ['required', 'unique:words,translation'], + 'name' => 'required|string|unique:words,name', + 'translation' => 'required|string', ]; } diff --git a/app/Http/Requests/UpdateWordRequest.php b/app/Http/Requests/UpdateWordRequest.php new file mode 100644 index 0000000..005d545 --- /dev/null +++ b/app/Http/Requests/UpdateWordRequest.php @@ -0,0 +1,37 @@ +|string> + */ + public function rules(): array + { + return [ + 'name' => 'required|string', + 'translation' => 'required|string', + ]; + } + + public function messages(): array + { + return [ + 'name.required' => 'Insert italian Word', + 'translation.required' => 'Insert dialect Word', + ]; + } +} diff --git a/app/Models/Word.php b/app/Models/Word.php index 43589b6..40eba63 100644 --- a/app/Models/Word.php +++ b/app/Models/Word.php @@ -11,5 +11,6 @@ use Illuminate\Database\Eloquent\Model; class Word extends Model { use HasFactory; + protected $fillable = ['name', 'translation']; } diff --git a/resources/views/components/table-words.blade.php b/resources/views/components/table-words.blade.php new file mode 100644 index 0000000..b470e53 --- /dev/null +++ b/resources/views/components/table-words.blade.php @@ -0,0 +1,39 @@ +@props(['items' => []]) +@props(['fields' => []]) + + + + + + + + + + + + + @forelse ($items as $item) + + + + + + + @empty + + @endforelse + +
ID#Italian WordDialect TranslationAction
{{ $loop->iteration }}{{ $item->{$fields[0]} }}{{ $item->{$fields[1]} }} + + @can('edit-user') + + @endcan + @can('delete-user') + + @endcan + +
+ + No User Found! + +
diff --git a/resources/views/words/index.blade.php b/resources/views/words/index.blade.php index f151b21..af8b0ea 100644 --- a/resources/views/words/index.blade.php +++ b/resources/views/words/index.blade.php @@ -4,32 +4,13 @@ {{ __('Table Words') }} - -
-
-
-
-
-
-
- @include('words.partials.insert-word-form') -
-
-
-
-
-
-
-
-
-
- @include('words.partials.upload-file') -
-
-
-
-
+
+
Manage Words Translation
+ + {{ $words->links('vendor.pagination.bootstrap-5') }}
- diff --git a/resources/views/words/modify-word-form.blade.php b/resources/views/words/modify-word-form.blade.php deleted file mode 100644 index 639fd14..0000000 --- a/resources/views/words/modify-word-form.blade.php +++ /dev/null @@ -1,32 +0,0 @@ - -
-
-

- {{ __('Insert Word') }} -

- -

- {{ __("Enter the word Italian and its dialect translation") }} -

-
- -
- @csrf - -
- - - -
- -
- - - -
-
- {{ __('Submit') }} -
-
-
-
diff --git a/resources/views/words/partials/insert-word-form.blade.php b/resources/views/words/partials/insert-word-form.blade.php index fa45d3e..c51d33d 100644 --- a/resources/views/words/partials/insert-word-form.blade.php +++ b/resources/views/words/partials/insert-word-form.blade.php @@ -1,31 +1,42 @@ -
-
-

- {{ __('Insert Word') }} -

- -

- {{ __("Enter the word Italian and its dialect translation") }} -

-
- -
- @csrf - -
- - - + +
+
+
+

+ {{ __('Insert Word') }} +

+

+ {{ __("Enter the word Italian and its dialect translation") }} +

+
+
+ Back +
-
- - - -
-
- {{ __('Submit') }} -
- -
+
+
+ @csrf +
+ +
+ + +
+
+ +
+ +
+ + +
+
+
+ {{ __('Submit') }} +
+
+
+
+ diff --git a/resources/views/words/partials/modify-word-form.blade.php b/resources/views/words/partials/modify-word-form.blade.php new file mode 100644 index 0000000..a426f26 --- /dev/null +++ b/resources/views/words/partials/modify-word-form.blade.php @@ -0,0 +1,41 @@ + +
+
+

+ {{ __('Insert Word') }} +

+ +

+ {{ __("Enter the word Italian and its dialect translation") }} +

+
+ Back +
+
+ +
+
+ @csrf + +
+ +
+ + +
+
+ +
+ +
+ + +
+
+
+ {{ __('Submit') }} +
+
+
+
+
diff --git a/resources/views/words/partials/upload-file.blade.php b/resources/views/words/partials/upload-file.blade.php index ce3c883..c077559 100644 --- a/resources/views/words/partials/upload-file.blade.php +++ b/resources/views/words/partials/upload-file.blade.php @@ -1,22 +1,30 @@ -
-
-

- {{ __('Upload CSV File ') }} -

+ +
+
+

+ {{ __('Upload CSV File ') }} +

-

- {{ __("Upload file to add group of word in db") }} -

-
- -
- @csrf - - - -
-
- {{ __('Submit') }} +

+ {{ __("Upload file to add group of word in db") }} +

+
+ Back +
- -
+ +
+
+ @csrf + +
+ + +
+
+ {{ __('Submit') }} +
+
+
+
+ diff --git a/routes/web.php b/routes/web.php index c4e83bc..f869c65 100644 --- a/routes/web.php +++ b/routes/web.php @@ -62,12 +62,14 @@ Route::prefix('words')->group(function () { Route::post('/', [WordsController::class, 'store'])->name('words.insert'); }); +Route::get('insert_word', [WordsController::class, 'insert'])->name('words.edit'); Route::get('delete_record/{id}', [WordsController::class, 'delete']); Route::get('edit_record/{id}', [WordsController::class, 'edit']); Route::post('update_record/{id}', [WordsController::class, 'update'])->name('words.update');; //***** FILE *****\\ -Route::post('datasubmit', [FileController::class, 'datasubmit'])->name("store"); +Route::get('insert_file', [FileController::class, 'insertFile'])->name('words.insertFile'); +Route::post('upload_file', [FileController::class, 'uploadFile'])->name('words.uploadFile'); Route::resources([ 'roles' => RolesController::class,