Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 50 additions & 23 deletions app/Http/Controllers/RecordController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Record;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
use Spatie\LaravelImageOptimizer\Facades\ImageOptimizer;
Expand All @@ -19,7 +21,7 @@ class RecordController extends Controller
*/
public function index()
{
$records = Record::orderBy('start_date','desc')->get();
$records = Record::orderBy('start_date', 'desc')->get();
$category_array = ["中級山", "高山", "溯溪"];
return view('record.record', compact('records', 'category_array'));
}
Expand All @@ -31,11 +33,11 @@ public function index()
*/
public function create()
{
if(Auth::check() && Auth::user()->role > 0){
if (Auth::check() && Auth::user()->role > 0) {
return view('record.create');
}

return redirect()->route('portal.index')->with('status','您並無權限進行此操作,請先登入。');
return redirect()->route('portal.index')->with('status', '您並無權限進行此操作,請先登入。');
}

/**
Expand Down Expand Up @@ -66,7 +68,7 @@ public function store(Request $request)
$folder_name = "uploads/images/records";
$name = $request->input('name');

$record = New Record();
$record = new Record();
$record->name = $request->input('name');
$record->description = $request->input('description');
$record->category = $request->input('category');
Expand All @@ -83,10 +85,10 @@ public function store(Request $request)
/**
* Display the specified resource.
*
* @param int $id
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
public function show(int $id)
{
$record = Record::findOrFail($id);
$category_array = ["中級山", "高山", "溯溪"];
Expand All @@ -96,25 +98,25 @@ public function show($id)
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$record = Record::findOrFail($id);

if(Auth::check() && Auth::user()->role > 0){
if (Auth::check() && Auth::user()->role > 0) {
return view('record.edit', compact('record'));
}

return redirect()->route('portal.index')->with('status','您並無權限進行此操作,請先登入。');
return redirect()->route('portal.index')->with('status', '您並無權限進行此操作,請先登入。');
}

/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
Expand All @@ -127,10 +129,10 @@ public function update(Request $request, $id)
]);

if ($validator->fails()) {
return redirect()->back()->with('status','結束日期需在開始日期之後,請再次確認。');
return redirect()->back()->with('status', '結束日期需在開始日期之後,請再次確認。');
}

if($request->image) {
if ($request->image) {
File::delete(public_path($record->image));
$file = $request->image;
$folder_name = "uploads/images/records";
Expand All @@ -152,34 +154,36 @@ public function update(Request $request, $id)
/**
* Remove the specified resource from storage.
*
* @param int $id
* @param int $id
* @return \Illuminate\Http\Response
*/
public function delete($id)
{
$record = Record::findOrFail($id);

if(Auth::check() && Auth::user()->role > 0){
if (Auth::check() && Auth::user()->role > 0) {
File::delete(public_path($record->image));
$record->delete();
return redirect()->route('record.index')->with('status','紀錄刪除成功');
return redirect()->route('record.index')->with('status', '紀錄刪除成功');
}

return redirect()->route('portal.index')->with('status','您並無權限進行此操作,請先登入。');
return redirect()->route('portal.index')->with('status', '您並無權限進行此操作,請先登入。');
}

public function storeImage($file, $folder_name, $name) {
public function storeImage($file, $folder_name, $name)
{

$upload_path = public_path() . '/' . $folder_name;
$extension = $file->extension();
$filename = $name . time() . '.' . $extension;
$extension = $file->extension();
$filename = $name . time() . '.' . $extension;
$file->move($upload_path, $filename);
ImageOptimizer::optimize($folder_name . '/' . $filename);

return $folder_name . '/' . $filename;
}

public function uploadImage(Request $request) {
public function uploadImage(Request $request)
{

if ($request->hasFile('upload')) {
$folder_name = "uploads/images/records";
Expand All @@ -192,9 +196,32 @@ public function uploadImage(Request $request) {
$request->file('upload')->move($upload_path, $fileName);

$url = asset($folder_name . '/' . $fileName);
return response()->json(['fileName' => $fileName, 'uploaded' => 1, 'url' => $url]);
}
}

return response()->json(['fileName' => $fileName, 'uploaded'=> 1, 'url' => $url]);
public function callImgurApi(Request $request)
{
if (!$request->hasFile('upload')) {
return response()->json(['message' => 'No image uploaded'], 400);
}

$image = $request->file('upload');

$response = Http::withHeaders([
'Authorization' => env('IMGUR_CLIENT_ID'),
])->attach(
'image', file_get_contents($image), $image->getClientOriginalName()
)->post('https://api.imgur.com/3/image');

if ($response->successful()) {
$responseJson = $response->json();
$fileName = pathinfo($image->getClientOriginalName(), PATHINFO_FILENAME);
Log::info('Imgur DeleteHash: ' . $responseJson['data']['deletehash']);
return response()->json(['fileName' => $fileName, 'uploaded' => 1, 'url' => $responseJson['data']['link']]);

} else {
Log::error($response);
}
}
}
2 changes: 1 addition & 1 deletion resources/views/record/create.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ class="createRecordForm" enctype="multipart/form-data">
<script>
ClassicEditor.create(document.querySelector("#CKeditor"), {
ckfinder: {
uploadUrl: "{{ route('record.uploadImage', ['_token' => csrf_token()]) }}",
uploadUrl: "{{ route('record.callImgurApi', ['_token' => csrf_token()]) }}",
},
link: {
addTargetToExternalLinks: true
Expand Down
6 changes: 4 additions & 2 deletions routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,13 @@
Route::get('/judgement', [JudgementController::class, 'index'])->name('judgement.index');
Route::get('/faq', [FaqController::class, 'index'])->name('faq.index');
Route::get('/record', [RecordController::class, 'index'])->name('record.index');
Route::get('/record/show/{id}', [RecordController::class, 'show'])->name('record.show');

Route::prefix('portal')->name('portal.')->group(function () {
Route::get('/', function () {
return view('basic.portal');
})->name('index');


Route::get('/callback', [PortalLoginController::class, 'handleProviderCallback']);
Route::get('/login', [PortalLoginController::class, 'redirectToProvider'])->name('login');
Route::get('/logout', [PortalLoginController::class, 'logout'])->name('logout');
Expand Down Expand Up @@ -112,10 +112,12 @@


//record
Route::post('/record/create', [RecordController::class, 'store'])->name('record.store');
Route::get('/record/create', [RecordController::class, 'create'])->name('record.create');
Route::post('/record/store', [RecordController::class, 'store'])->name('record.store');
Route::get('/record/edit/{id}', [RecordController::class, 'edit'])->name('record.edit');
Route::put('/record/edit/{id}', [RecordController::class, 'update'])->name('record.update');
Route::post('/record/upload', [RecordController::class, 'uploadImage'])->name('record.uploadImage');
Route::post('/record/imgur', [RecordController::class, 'callImgurApi'])->name('record.callImgurApi');
Route::get('/record/delete/{id}', [RecordController::class, 'delete'])->name('record.delete');


Expand Down