From 922539844d57b767f91dbf69d2fed5c9565a0797e06dd846b25b647c30e159b9 Mon Sep 17 00:00:00 2001 From: Abhishek Mali Date: Tue, 2 Dec 2025 18:07:15 +0530 Subject: [PATCH 1/3] api update --- .../Admin/UserRequestController.php | 48 + app/Http/Controllers/UserAuthController.php | 53 +- .../user/UserProfileController.php | 114 ++- app/Models/UpdateRequest.php | 30 + ...02_055345_create_update_requests_table.php | 37 + public/profile_upload/profile_1764394681.jpeg | Bin 22399 -> 0 bytes public/profile_upload/profile_1764645094.jpg | Bin 0 -> 49079 bytes resources/views/admin/layouts/app.blade.php | 7 + .../admin/profile_update_requests.blade.php | 111 +++ resources/views/admin/shipments.blade.php | 892 ++++++------------ routes/api.php | 7 +- routes/web.php | 17 +- 12 files changed, 654 insertions(+), 662 deletions(-) create mode 100644 app/Models/UpdateRequest.php create mode 100644 database/migrations/2025_12_02_055345_create_update_requests_table.php delete mode 100644 public/profile_upload/profile_1764394681.jpeg create mode 100644 public/profile_upload/profile_1764645094.jpg create mode 100644 resources/views/admin/profile_update_requests.blade.php diff --git a/app/Http/Controllers/Admin/UserRequestController.php b/app/Http/Controllers/Admin/UserRequestController.php index 0b6306f..e09c56f 100644 --- a/app/Http/Controllers/Admin/UserRequestController.php +++ b/app/Http/Controllers/Admin/UserRequestController.php @@ -65,4 +65,52 @@ class UserRequestController extends Controller return redirect()->back()->with('info', 'Request rejected successfully.'); } + + public function profileUpdateRequests() +{ + $requests = \App\Models\UpdateRequest::where('status', 'pending') + ->orderBy('id', 'desc') + ->get(); + + return view('admin.profile_update_requests', compact('requests')); +} + +public function approveProfileUpdate($id) +{ + $req = \App\Models\UpdateRequest::findOrFail($id); + $user = \App\Models\User::findOrFail($req->user_id); + + // FIX: Ensure data is array + $newData = is_array($req->data) ? $req->data : json_decode($req->data, true); + + foreach ($newData as $key => $value) { + if ($value !== null && $value !== "") { + if (in_array($key, ['customer_name','company_name','designation','email','mobile_no','address','pincode'])) { + $user->$key = $value; + } + } + } + + $user->save(); + + $req->status = 'approved'; + $req->admin_note = 'Approved by admin on ' . now(); + $req->save(); + + return back()->with('success', 'Profile updated successfully.'); +} + + + +public function rejectProfileUpdate($id) +{ + $req = \App\Models\UpdateRequest::findOrFail($id); + $req->status = 'rejected'; + $req->admin_note = 'Rejected by admin on ' . now(); + $req->save(); + + return back()->with('info', 'Profile update request rejected.'); +} + + } diff --git a/app/Http/Controllers/UserAuthController.php b/app/Http/Controllers/UserAuthController.php index a2be041..256f98a 100644 --- a/app/Http/Controllers/UserAuthController.php +++ b/app/Http/Controllers/UserAuthController.php @@ -12,19 +12,68 @@ class UserAuthController extends Controller public function refreshToken() { + \Log::info('🔄 refreshToken() called'); + try { - $newToken = JWTAuth::refresh(JWTAuth::getToken()); + // Get current token + $currentToken = JWTAuth::getToken(); + + if (!$currentToken) { + \Log::warning('⚠ No token provided in refreshToken()'); + return response()->json([ + 'success' => false, + 'message' => 'Token not provided', + ], 401); + } + + \Log::info('📥 Current Token:', ['token' => (string) $currentToken]); + + // Try refreshing token + $newToken = JWTAuth::refresh($currentToken); + + \Log::info('✅ Token refreshed successfully', ['new_token' => $newToken]); return response()->json([ 'success' => true, 'token' => $newToken, ]); - } catch (\Exception $e) { + } catch (\Tymon\JWTAuth\Exceptions\TokenExpiredException $e) { + \Log::error('❌ TokenExpiredException in refreshToken()', [ + 'message' => $e->getMessage(), + ]); + return response()->json([ + 'success' => false, + 'message' => 'Token expired, cannot refresh.', + ], 401); + + } catch (\Tymon\JWTAuth\Exceptions\TokenInvalidException $e) { + \Log::error('❌ TokenInvalidException in refreshToken()', [ + 'message' => $e->getMessage(), + ]); + return response()->json([ + 'success' => false, + 'message' => 'Invalid token.', + ], 401); + + } catch (\Tymon\JWTAuth\Exceptions\JWTException $e) { + \Log::error('❌ JWTException in refreshToken()', [ + 'message' => $e->getMessage(), + ]); return response()->json([ 'success' => false, 'message' => 'Could not refresh token.', ], 401); + + } catch (\Exception $e) { + \Log::error('❌ General Exception in refreshToken()', [ + 'message' => $e->getMessage(), + 'trace' => $e->getTraceAsString(), + ]); + return response()->json([ + 'success' => false, + 'message' => 'Unexpected error while refreshing token.', + ], 500); } } diff --git a/app/Http/Controllers/user/UserProfileController.php b/app/Http/Controllers/user/UserProfileController.php index a5d644c..ca42ab2 100644 --- a/app/Http/Controllers/user/UserProfileController.php +++ b/app/Http/Controllers/user/UserProfileController.php @@ -4,14 +4,17 @@ namespace App\Http\Controllers\User; use App\Http\Controllers\Controller; use Illuminate\Http\Request; +use App\Models\UpdateRequest; use PHPOpenSourceSaver\JWTAuth\Facades\JWTAuth; class UserProfileController extends Controller { + /** + * Get user profile + */ public function profile() { - // Get logged-in user using JWT - try { + try { $user = JWTAuth::parseToken()->authenticate(); } catch (\Exception $e) { return response()->json([ @@ -20,7 +23,6 @@ class UserProfileController extends Controller ], 401); } - if (! $user) { return response()->json([ 'success' => false, @@ -28,7 +30,6 @@ class UserProfileController extends Controller ], 401); } - // Format response return response()->json([ 'success' => true, 'data' => [ @@ -49,7 +50,53 @@ class UserProfileController extends Controller ]); } - public function updateProfile(Request $request) + + + /** + * Update profile IMAGE only (no admin approval) + */ + public function updateProfileImage(Request $request) + { + $user = JWTAuth::parseToken()->authenticate(); + + if (! $user) { + return response()->json([ + 'success' => false, + 'message' => 'Unauthorized' + ], 401); + } + + $request->validate([ + 'profile_image' => 'required|image|mimes:jpg,jpeg,png|max:2048' + ]); + + // DELETE OLD IMAGE + if ($user->profile_image && file_exists(public_path($user->profile_image))) { + @unlink(public_path($user->profile_image)); + } + + // SAVE NEW IMAGE + $file = $request->file('profile_image'); + $filename = 'profile_' . time() . '.' . $file->getClientOriginalExtension(); + $folder = 'profile_upload/'; + $file->move(public_path($folder), $filename); + + $user->profile_image = $folder . $filename; + $user->save(); + + return response()->json([ + 'success' => true, + 'message' => 'Profile image updated successfully', + 'profile_image' => url($user->profile_image), + ]); + } + + + + /** + * Submit profile update request (requires admin approval) + */ + public function updateProfileRequest(Request $request) { $user = JWTAuth::parseToken()->authenticate(); @@ -60,53 +107,28 @@ class UserProfileController extends Controller ], 401); } - // Validate ONLY profile image + // Validate input $request->validate([ - 'profile_image' => 'required|image|mimes:jpg,jpeg,png|max:2048' + 'customer_name' => 'nullable|string|max:255', + 'company_name' => 'nullable|string|max:255', + 'designation' => 'nullable|string|max:255', + 'email' => 'nullable|email', + 'mobile_no' => 'nullable|string|max:15', + 'address' => 'nullable|string', + 'pincode' => 'nullable|string|max:10' ]); - // If new image uploaded - if ($request->hasFile('profile_image')) { - - // DELETE OLD IMAGE - if ($user->profile_image && file_exists(public_path($user->profile_image))) { - @unlink(public_path($user->profile_image)); - } - - // NEW FILE - $file = $request->file('profile_image'); - $filename = 'profile_' . time() . '.' . $file->getClientOriginalExtension(); - - // Correct folder name (from your message) - $folder = 'profile_upload/'; - $fullPath = $folder . $filename; - - // Move file - $file->move(public_path($folder), $filename); - - // Save in DB (same pattern you said) - $user->profile_image = $fullPath; - } - - $user->save(); + // SAVE AS ARRAY (NOT JSON STRING!) + $updateReq = \App\Models\UpdateRequest::create([ + 'user_id' => $user->id, + 'data' => $request->all(), // <---- FIXED + 'status' => 'pending', + ]); return response()->json([ 'success' => true, - 'message' => 'Profile image updated successfully', - 'data' => [ - 'customer_id' => $user->customer_id, - 'customer_name' => $user->customer_name, - 'company_name' => $user->company_name, - 'designation' => $user->designation, - 'email' => $user->email, - 'mobile' => $user->mobile_no, - 'address' => $user->address, - 'pincode' => $user->pincode, - 'status' => $user->status, - 'customer_type' => $user->customer_type, - 'profile_image' => $user->profile_image ? url($user->profile_image) : null, - 'date' => $user->date, - ] + 'message' => 'Profile update request submitted. Waiting for admin approval.', + 'request_id' => $updateReq->id ]); } diff --git a/app/Models/UpdateRequest.php b/app/Models/UpdateRequest.php new file mode 100644 index 0000000..27e84a4 --- /dev/null +++ b/app/Models/UpdateRequest.php @@ -0,0 +1,30 @@ + 'array', // converts JSON to array automatically + ]; + + // Relationship: request belongs to a user + public function user() + { + return $this->belongsTo(User::class); + } +} diff --git a/database/migrations/2025_12_02_055345_create_update_requests_table.php b/database/migrations/2025_12_02_055345_create_update_requests_table.php new file mode 100644 index 0000000..cb4c527 --- /dev/null +++ b/database/migrations/2025_12_02_055345_create_update_requests_table.php @@ -0,0 +1,37 @@ +id(); + + // The user who is requesting profile update + $table->unsignedBigInteger('user_id'); + + // JSON data of the requested profile changes + $table->json('data')->nullable(); + + // pending / approved / rejected + $table->enum('status', ['pending', 'approved', 'rejected'])->default('pending'); + + // Optional message (admin notes) + $table->text('admin_note')->nullable(); + + $table->timestamps(); + + // Foreign key constraint + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + }); + } + + public function down() + { + Schema::dropIfExists('update_requests'); + } +} diff --git a/public/profile_upload/profile_1764394681.jpeg b/public/profile_upload/profile_1764394681.jpeg deleted file mode 100644 index 06220af37a73ff8f78b005432ca73bfa07db09ce1cd392df217ed725b8546faf..0000000000000000000000000000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22399 zcmb5V2UrwK&^9`|1ed%-K@gU_l7j?gL6Ss~3=)(iK?D&+f}~~1Su%*gk|c^G$sj>c zG6E`+5y>DqEBv#l=bZ2R?{lAfn{l?M`|axLs_Lqq?(uZwbQ*xGDXA&}5C{bL0R91| zV}Js{LVKR^JT(g=10y>t3x|M)hyV|dz#Ro;New5O^8)N0o_~Ci zSJlw*p~Efy>*AN@`LfoICL9q6D?7UYQovY5#JI`V!MExEcRFnaC}H>jK7a>d1E7=; zJW9yvJAeVlDvsNK69kHfPXJcY{jYKm0fC;50;G5l01C&0gO7V5|28|zL7V?q!S6>1 z-``^5znTB{Urws#QX`e$nE#JW0D$w)DE`xc{WaoPVg zqWxV30Ji{9|DyNvG8xxW$$#FJ_|hX2b#hy#>O?8J_^`3xQtl2f)6m;FPE z;D2<+wB9e};Y_9iMVG0{FSzsfM%8cYj-j$A77x9nvGMsq)3%w8nb?j(-;P3m zh9au3p~NAvkUae@%g3nCTEzcyr3OHdXpjgLcLRT(l{cSdz#BYY(p@I0N0cw?gHcwR z{^FaNR!{@^ze4q3ee5|J4tU9FaAE{-Yn7Fnj=VrgV^R z=z(_=k!^Oc_2Y)z+7*ZC{*r#_N$ZuNXd}})XQA>6d@{Svk^CK&&7S2PfEIT+u(9i{7UTQ3e?fuZPEO`tLCYF zA)iVfB#IUh@o~p}ovWxi*h{(-C0$}*@;~eVz%SKOV{86vtnq<}vmWtr6UTY2*Q?QE zC&4;Co1gqqxTA1Xjc9`l8G#=khg@4ViNqJiq-xa%bjC)qXKnu6;5=GHT7N|W5dASa zGyqUVGp{~3;+*IUXlQ@7QsPpRa@qe?M|dicfFh~on8X+}TEIa2e~$V(05AW`TPaoz z&Iizey__+J2fBs10-IMoV#0Bzc~VkNy^FjVqC;;bR6Xw)i}zCETZj%Z9}Aa36LrA8 z|C`{Yza>e4LE~e8*PYoJv!GLqbzeoEOu9?A)bMTlTOXa%KT2NxR`w+*?o-Ka(Hwcp zZi%(6qi1~3|EYVZ7F0(Ijm7mrfXM~j8SKpMoUsXcUx{+GvEN$x(ECZ?uzkl&a>puO zqW|vq6@Qc71h|z!zw$jJVx#|MO#l%%SAOdRVvdF9@IYJ4LF#Z^7vv~!AEU?Jd7MvX z2R@6Di@vImO1#a$^n-7u#53`w`qH*1b(RUBg~eh2O;qT=c>+uqTQjt^8GKehE3;K- z>z>;F zCih?IPd02nH8)q>(D}fl^?8PY-imxc0zhxbt;_L^S9GVw=Dzx5&+kh=@J9Tn4*;Ok`E8!K zLN!2^j|4dPV#lhztI@~jQ8&B*E4M3SHW+#Tf*JnafoRF-!eWw4q*(lLDT!dj%!gqh zo4@)^Fx~$$zx8gCsu-ZO z=K(w$WU{LrToOHgAvca|j$nmqBBgWN)!~SoQdlom?Rp@9r6UGo2pIi5qw^F0$ORMx zaeSHVU&>GtfWV(c%Jj`8&^+KsEZ{ctSte+^KvoOF$84tDbEEq*6p3aCr$K_2PJ_=w zoCxeaJuw?fj0MGnOZYrmnC5}s`7_&xEbMq4&2pB4^?{)4dmt0CZ*L@vg$RoFelP!k zgh7&NwCJz^L{?Tl1nRfb zxwL_iDi+`l{<6)7!2;pQ395SWSOk%UHI}qZNBeTbD5uU*Lwd#Mh*5$w4*-ES1Hj48gwzG9gDt%TuDHmpBL@ zh|g8O{}I)ykHN7C)uTZG02$7*0C0I#iu=is8rv>39XoTVVB8lRJbbGop<@iNT>A=g z8QV-~PXmsa>Ox{}FM~Z-$}3e_09K{FBjfuqGE^2@APX)L_=x430pRkPAY{SS71$94 zOOpGrI!`W`2e4`g!B2<2Iublugqkdgy|Va(>egU6t3{gS8>CXiBA|wV^2dJ}-0+;E zLL$NNK^0PZ3m2!!&df+1M+Cs>W^{qCln0Ckw*aUgGEwK3S<)`MycV;jVfPI(03M3P zX@Q1IrOFu0;YhCi*m}CHDvJbd2}r;Z0S0h4DDEboE4nS6&WjiTBP+z51`Vz^zYK$1 zUgpH>pI+V&Hy*%(;-YE>tAWe7+nJ-oG~Ys@ z1fEb8^5MEe;@s;Wf{&MGQO|~fyU*isSi%RE_pkCNq5;r;SrtC69i9RTmjNWfACCl( z;XpX*;KeNH7S>S2M~v)hMFTWc;0=_dnT|N8*IVD-a$?ByGb~Z$H%0zB zTKl9IAO@ok?5q|~7WV@N3m8Cf<>$I#>^tNobM-h`fH+~CLSL!vapt(sM+fc0}8HV&}XE8-xNWe!vMOwn;R86#L(uH&l;eziE+XN z{l`#LL){_gCYdZlDfX;)c_Yg(n2{a8*32sZRnzx|leiYd8aOjRu>MRdpqc{_fY+37 zUvc4w!f^ajwewd2bb(qtID1&s=YPR=yw)?fRFLv#JmT}<*9QJbia5HX5K?Lk4iAQX z8J&G&05FmzK;XLkqZ&8>p+O^OW|q3Oct9^9TD+J~g<&@oFD}JG);B!a^ZIu^WM4ke z0Pzq2Uw&_Hsjqs7vF~;C&`fC(IF}%Nbhn_pb1Ty9mjTc+k$<#=;~3NrJ^|pwhHiF zeO#(eoLC4NH78V{Vo}=vG5}hvEI27Z>Ij@gAi(fPd@gumn-{+niGKE}UBF(@q}b8G z$S!fO!qoHU#9c8qkQIDCn`hANNu^wnH6pPXxm4B1SsHSW)xg$o6*|}B5jZi^fZBkz zKD$MLxC{UwZP0^~`$~QNHp~`+Bo6--K-h{}Qt16Y8_+(@w$Vhsn44i2^f@S8+~MYYrlWchTE z;pZMmbu`l5zp5VhQBZoeoo^TffEGX?XRVqx=Rh29I*5Vhijh-p0YXwi6kM8VkOX|s%>HQ(euig!&yXkmZAiw#1 z5VGrltyXVHZjQDyHtQB&wip4CEC3j0Nna!#IFl~`@DXF0L2pO~!O;X4K;DyAx5!jL zb0NTB3lz&J>2~I_(DE%fWpMhdYLWI@>yvRZ44B&Sfff&PA-3b;28tCN{ojPA_&dk! zq)B|Z^#&9XXe(6jC=Ec@%l0xvhZD;K(2=oHYx!BW-LR`2NFg|s zB5^!KM`EW*^HXBTe;EVtbehk|0Tc=8<4^FRu_5`O$pMfw(n^tGwk$nx3eV+8GXuw3Z zcyw_{qCHyS>gLwbm5PN%l$gjHb`J#G_k6G;G%*Qu3F;z%8`W6qUT!0|{De7eVQ-2=Qq#O0sr7L&Wt~d-jOFf)P zm9izFDh^l4LdFy1=LcTs6}QNLIDU|tS6(>DG(LFP5bVZR~q zd=@bj$3LC+u8-4jq(>vu+}6%YcH8`vtRgi*T-m zDgc)O?H-h>Aa#qt6MTRsayp-f2ZLP)qk5BAfB(1Wg6TOsW6%%$h5|rcU-pve3Md4+ zzc1fl&6%Gh3K%Bos1>B$1q(R_dJ#Oi!q(wxSP%wc&NdVH zdu4*nB=TtF{j33SO5;iapity*jMqAIp`aGFJeq?0hcPe3{LMiZs1^0BnGI{db0=vP^))<2;bbjJ8uAZ?=?Uh7WbI#i|4!;k=wR_n?* zJFpOGjs>frXEEt)JY=3;GBvyEqGxL(unJ6r;Ftz}XAx&k$4HYqwfdqePk9z7KEetO z)w9aqL_kr2tK6qv6SGr%y%1~MTH zTr@N!3mnF|o31iN5}?vRZvQ55`w$6+L_7!)1l(`@v%Lsz8&cxIsSrZKBC=ZMtki6B zqVmtc4MiAO4%GAb_$?d?)X#XVqMKh0!R(TTTsLSJ(p`nxegF$whK^rcHFZAolOM8@KPt#jCQi@Kzkx0cv=8>WG#K(VN6L-&e+oP?RWE+Pw)YQ=|OA3~`sC3D_U{EB2r8pi4s ze7JBFy_PdZyj)Wv*in*S^)Qv;?J&ycb6vBuTD;=}9^<31aaTFD>6cpS^ij)q*Kvp?xMjepR>SlP6iQ*-KiJ*{4rXXm0ZA}UV3e~p0q zD9h*TAFY#FzhQB)$kQFBJq6q?-hKx=2n+2Hs^JTAFCE3YU%l+(8`O@W^;y zOgvvEpa%aweyi!O9&7ApwU8G5!&lDsj#^$bLTP&J+8v{GdQ=~y^*&n^9x$xoDsns? zYiC}_rIx(sWyz}$Afn|L_@j;}u9cjX_=9xbha@0U@6Jux(Q4uhW`59*(l1}#oIM9m z)jx+fOQuDcKbxevCgFvrTz)XvA^wQ>8k^oms&M3T!_ zS3F*M*x&aL_TxG~Xa7XUokqfUqEflX>B++5=PNnh7mw3iuC%}RSO0abRzGdvqZ``u zH8ZXBEHW9tbMb=3#I6-yu;#)~V*LSJU$CBVcr7${jmD7 zbWHlm(!$;>nX}}i8+@bS{&*aag0fi&Dht}wBu@M>U-iOuS?H6mI4bJ&3rr%J|V4~Feu)MtvNsYlTseRwlFLLdRW$km;JLFrWX-KElgClsk zR$e!#~MIJY3%P z>WiEd9ge=Wxi$Uq6p)e4Md%*8@L(kI?u-@$Z6j9;Ene6=D#ivzi#%Qm^>x_4gX+3q zc+DNFMpxrCt$p#0F4_D?O_37>mA`}2;ESl*o%c(ljbGAwEuutC=qp@Fl(i+eA@}W zy;P-nU#m?dtEB|NQCO1XOd*}MxOSf*pk;6GrG2y;IdU>bl#5 z0lV1fOQBjS6*lT_><~BpX{Z#o*W%Z4-s%GR3-5~`H!Ans^zpA{ zTZ`<>C+^U=?(3VlySOOoUdN_}RHQ05cwf1mgIok+qY~x$2`<<#(aG28(GtjMw`JEi zULMuX(Y9b(X1kM7O=E2On!sC=Jn<9&jEOI6zno(##M{*u?@9ojZ+ubbCrW3OtJB6^ zwab{xVNp`}V)}BqK4N;e%{=_g$O=J9S=#rQ#6zD%%TYr*wi|^9HVPh;wW_j)?h0;q zq_Y+La@QNs=V^@_sCEh|^!fgx=-rN-sBMUI+;f+uR-1nEZL((1tDY!ntKj3W+A?fa zjg6w@8$YPV)EM0KhlVeAdx@Ti4<$|rdJ}HA`w!`i%@nTnG3x5}q(6@iepTXCuzcyk z#wUq=nre5e*AFKqX{Q(`D6+G`h{{X}K=Hr}@;Ax?5J~{9C1j33KYMrY@dVdJpL<4Mn~jFAMo4H`GuiW>g8{H%5V<{$pH z9`7j%)H7>ND15=5SSSGqKG@NJdlHh>0?grvhtJSwT|s|$Rr5BQHWN#ces6+FgG`#V z|AKauEn&YL>2UIV&U;aXpeqH!y{glPACbIM)@R=weHPtCX=yR)X~0Vz>h_t6V;u#!1HaHLmMi-cj)sfGA$z|J zPk~p4nwka6X(49BPxi+H2i1gK>iOyBdzJcaX8P?=#eEet zYGqj5yT&#r*WQ)xmxZy_<2-1ja8+py{PB|SkUv?wGvoKofGfl2y94^Q;?y1V z;)dj+_r4vntOPSuHr`6YKcZ@kvddFlcQ=jKbAJ9#kJA~J~&kt;h1yn^LQMJ!H%)aoI(A)I06CQ?E{rblF^l=z3 zb#tCq)^nXpH1_VH*9DuH9#gW@)SJRB527XTAxz za`ubKEc@6p^UtF48tW;rw^>=D@D>&Ga*^9MNac2mz+DT2IqDb=9oY;K`=Hl$G4ejj z<6W^gRXH*&4Qw0XTM#r(m4>jYE;}yf0G2(UK~!;`cyBB|CY+y_g5_<@K_gihPD;9N3P}{ zIc}=8f4$8alpv$bNin&lq@P+(&7!>=q zsX3KpC9YvUz*6steBgI|%G@ex2K*WWJ=8h$eg1FqI}MQ>W#MeCLW8ZB=`nN0Bvf0M zh0E%ujSMbOzI@l!o6nWx%Z~Nmjo~AKCYD<;u#apd#c)zniD)6Nv)<=FmokTnv}$!_ zWuy}zVblGtsWJi9U=7ih2HaP^ z+Xwl}eRvjjZw7A9WSQXY!KVC`)2%dz9;F^qY;%y~=vA;oAT+u~HLRw`B# z9s5S9H5l{VRY4S6%Mh2T4E37MSYyXpSeSPWDnq~dC_lcI?9Lcx|CS?^Gm4RqRl9bK zl5i z57yB#5yv`W>=nr_DjT5n=mQ<8yFOJZMx>rd-I{`=A!?`};WwQ~K_ka-hqMmyuKvU4 zZ~LF!Fqv$G0j*h=`2<)kr>O#&m15bWT$?cn%bTzuZtO61Ow6Z49xf@XmYNSA1Uv&n z-qRb)_s2;^bHrh|v{xUz4%F{vl7iFn2gD^r&ABLQ`e-1;7&x5i?Z!jnIO6E*=_2A1 z%HM1S>lr0A#IRPg>D-XN7+cO_QO6PNELj@%s9c;jFTVMtJ#r-UnELh%$1zJ4OfB zH<5_Iq2`wo%?lE29BuW7a}jMr1Ah2a=eh0}MMQ}kcAf$eKXX4?UAPd@Fu=jV5hHOh zd#|poTVmTs+isFwk@A@mK2U#CwChxW5_I25}#ih?_a!Ic3UVrIdCzJ`$+GC;q@qr{98o|H7QF31sULeJ*t>$vFJlWj_R?qXU-&Cz5edSt~;?pYa{2`uA)Vq8XuJpNQ&ZTqk=WD3Ex;)cB9Jm)YS^v3S zL8qzAJ`!FwX(g2v6E)NEYamEP{TiUxzY*Hz$&EH_2uIm7P2F_;lCkFXvo%rW?Z>{( z%u(wr#lcrfb{x!{R-!YGwc2z0FsH!PdoLuLBEx^!FgHE5*^w5*zWL7AZADf!=Jv6v zPqa}zZ@Zs&Wc_6&)m(D%@Wo2QuUfHQ)Tcn5wETePYK6Q)5?+aaNqgvB%1qxro!bJz z!BS#51_QbLSnvCMjDi98_?>*OT=mVe*as`Hv#9QcNJ4&-21c3gWey+TD*~NuX=yA5 zfe=T6U3jZjP&Z}7YXaSgItoW8RNfNy=(E0+Gv<1HU3&7(BpsX6t6wY`zR` zSKG@@0nOy6CmPHypMB@wuk|#F3%r&WyEZh><@7oHt1mf=o=yEo(HfnMsp9Jm3Bl{( z>Mu@#_rW8)2_q(iyd<_i&G-f-n!l#sYJKPzHYO^%obq5#kf1_OGw}qn7B1#jqtQe- zS9SPdl|TFXE(Ny;@>{I(=mVGYoA>O7=!JNxjj2=gx1Dmwr-29!q zt6uZ=Un&-9KeU&Jv0hSKjl=Yb(_A~(?Ww>x{M1QwYW2D2hoh0QOiH%*GtAEh!cu1O z?G@8kwuUI8#BNo=$9UGw;~v0s_`*YoFvj9U&_{~MLu2l%bJ$ASNu4ihMpP|%_%C>^ zE*~AMWrM zbBu7Q@gU;yquZ=+-o4R0hdsKu;bPrhT((C`BbeZ4=mEMbju&l-($(^)*w&3g}}gCV#QbS%P>NF{-?lWyC0l6-I)}GJl~BU{;K;~ z8NM#~9RuSDWF1j$E{%xOKj1OlFuV7#a&^;)Id`(_6yV<@w$9|GM_4*1s#C($XxKCh z#j8j(!pR?64lCL(WF+QLaF^ZaRaKydm#X6zq!*hQu#M)swS3zt3im3jjIU>X<>g%b zLO3vXdSi0$HOVXGz=1c}h7!K~9Y0qY{VYN2veMbFvb3UoLTT$i)M#WlS1e`awd&5m zG4l&=Xt&Cp>oRxP$2z)P_9Wk=*rjq!e~3szN8(OZKTSu#rluU3WhD=n7GA&1tXuTeMR0@dLkzpLgOL>c30G8?58HTxCvNU zOS&b$=0#8!T?k<16?|S__x)#xi-I;&XLI4Nln)aIgR0!dgr0|QGO(WaI9`}1Q8v%T z>ta;KZ>CyaI5*WRb}1{kI)XcgXJM`N*p_mP1Q;!-A8R;(~tq2%T)c&d)scg!YboQt; z>5j;43#s!3PY*x8oQvDJqSzg`UUX5YKBghWuZHWpf6R`8ty`JGh4ak~r@$J_w|S<{ zuO7ury^d!p(i|TEGbq8sclb=kVvAw>p1g*s`bF5a7+J~qnfl&&E9*Bfy|_o*6+DLJ zjWN~NiT0=0cw=peSmcwq?p&`3@uXuC%KQxfa!u;pBVKoPj^2?vSJN~SLN>mDPq`;i z?&X_}w@i*UlCwv)Gv6!dXA+d$w5K1Yi|v09IPxoLYQt9|prB0F8_Z!_eRWG5-WfX6jq_oy32XUk__jXgdmBv1nyTCISxy1s$LuDo` zVj~(>S{T(RT8R{P6U?sLL@Gx(TKJlL=w_in1xG$tG}Tz(nei&S^{@03hYt1%uhJPbT6^g+vCv0Z1_*2ASq2>^_jBE-;e}az2lz(QmsVf! zt?lf)QULdI2ZtdrBQx*QDzI#{bjscV_K3K1|p6 z3_m3Y;)$I8rTK41XZWWpzwsCtj9|ZCdVfp<#u|1152?Scmdfu7`W&yFJ^q8A#_;x| zK$c*(|G@raj@D~)^!9vdytdby=x3vlSX>uGte8|M)bJIQY?wH_)IYGb^gqleBx@`4DJV$B3Tbyc)g9pEb9M=W{CNFmfPe5} zHV9S-JdWtHZjm)ax+EV*zZKU+@a=v->Noxf`F9k>=pZ#FtB0<1ad|?D9>X~plHbHR zFhqh)+kf!~)_?FJtP#5{^$#uEzB3uQ3tZ`a!kZRUh@WFfcZZ%5Q!UiK)NouQV+pg8t$gzI(9mcNebR zVK;grXY&kWJdHvA!DI3%{?K1xZ8{QcIx+|8H@G)rHqxvU6B57e@xDYS(t}{u=YNO% zm!G`4!}X>^EZ9rq+fFw_67T%?kvf{)Fa5&K@V|$g7|Q<_UxJh80Tvw5+pG+Wmq|u* zL(WoND}>L|pJM;Y2a%4v^asC)c!}d53-a@}S_6_+yN;TlyO#)g`K+lPG&Zi^O`gO4 zs%eBH-E*bsXgcxuN9DecU$*DBp)v@gv|LYC#NG~B}JN9kSkNx`K)LvdF>|U>``>V3w_+`N;V$hQ;g3SvVof>9? zOj)JlVq|DZ1VL(rMNTD>|Hc1kA_gD%nvPd6ChMTPh!`__nKE>X<$EF$#J?^H=K~D} z1DrL%(RaeYrh}5dKR;d%BXKGul9Wm1%23TC(Dh@c1BtAs*I^4oKs+06$e<-JAu&W? zTaK6N>rF)WWqS2YhTu1BN$dbZu8VKgrUk3+um80l1g2>9uev!fo{mi^nM%CJJr{~z zd=vy&Z;GD+Hf)k*9VE6{AZhRddFndL;2y2gYaCc^=O;`3P+W7P|5id%gkTKSctR;NkvEzdM4lf)lv> zSp%OCIcmGV60e_zq#1Q(re=$PgIXn>=$FG83{7Ch^Z`dd2+57JPCic51_^4r`KMK% zFtk~uBp;Yw;S+5yS){)}!-s*h3x>$L)Q{S3r`hhi>)c_d+m3zQM_$^IGt_^Ly!444 z7DN9Y-)+hpr)k!vdJxZ+qz&Tx0fkPjtzaZoEBuXlR}0WqHlo4sHm>l;pEAey+KbcRnnLPR}%JwBj`+J-@4oO+#o z_+>cen4bnqqTkEBKKw+2kxI5vXGoFR+(u+Qu8R%nH3rsYk5dJ zYCD9fx>bG%sl6kmqYFX~`6M>iCOMgyXuT=#GA{!#%T9|RZSxADM<1?u$& zj=sq>=ICyHZAU=d&W+Ht@yBgQg>E>BKb)+75G@M;!G0W+9=eMd7=P1oHVzMZqXQ1| zZ_ym9Z|gppgHEwJ>n3aizz`EjYJ;cb6cPBec8@_kYt;oD{q#iyCZFR*%ZCPGjXG#> z)A4dpN(T%~)%>Lo(&7u%l0zOev4mmu@XMQ{zaDBAXzw}Mk&!UZ0#|)&@j|{chdU@Hld@LfX z6G?t$Hp-)?>L*;E@h>wVS4K`HIQllv+w6jbT7fpujN9n_AKty_zK@!1W8f~l3->bl z0V?HB7ogS-ra^a$sgO`o*W_cRKy7yc3RBMetL^vJORNN5n!-&@aFOaS9t=t=QAlve z_t6nA8a5(8e6`grtFSiuW*EK*n$QleXM+8gf6!Zb;$k(1XuZU}sP8zp3s2$7x{pwE z8`H*n(Am)>!}X0<|BJ`q!p=7^wlp2>5{I%)>}c>?qA@U_0XKyeP`5a=v!`SK!w<-O z`7vnH>rF+IlC5}>$M40p5Q#9T(6csD)_xQlt6ZM_AO1&~v?M1*b=xSJ|ZX zmVNz)e`3M(KlmTG6;qJ_s(ZZUCCr&#{ngBu*02E+U+1|T~bzlh?Di07C@W6+a68vBUJnZ@B`w;*FP{Osq&3;y4 zb2;tboBX&FFZe0opXr58sD*hwVtiP8n|#D?SbT+Zvq9jRl#T(-vqus6*Y7g2K5TnD z&m?1xf}HF7V3TW8Q*-R#Gq8Fx^YvozxQVC)9ciuCgQ@^_BAr~dB(3f@>^!99MsegL zR-^_7^sf5?rnQgex&v<4QlEe3cb;p)h)2&o*v{EFvQE&Ooq1KP99%us00_}D$mOhIiCX3Tmb@>hzAmjGNxoNUU$^ccJlp7^+ays=P-W%nTf;oeRM&Z`oN%g{>${Q4= zgEDO@$7JlQ*SJ9mBYsO5cb4+!r0=hUh0R&D|2^je1suF=IK6DRcJs@FH?ecw{z(oM z>+Av_t#=roEMF`NOX$c|^EWZLLnkaEGS}Vds?J1vEv7Tr&!WsKH7PZzxuwi%#0URt zZ9XNZ+N_E4Ii9HRNdu0tlAZ9#!469R6JRC5>-qC<=qrUTzCm`yyVOw)n|v_6sOe{C#-yCP8`ze1@qMG+Czfsg<=3Uh zpPw3zc>kz<^z;6xn}G&;^G=P7lm*~?x7eHgO(1#!^6Y>Ywe&OSmDBQ;HjpNvmf}e6nL)H z@^NNk6aD*~7yMr88hi=dq&V=YI0Y7xPJwTE3Wut@^;qt}43UmI*YIRk*N_ha`q2CF z?Ma<<-Rx|1aYjP{Fvb;F<{t1xon z6w%j-rfPdtJFn)2A1#wk^>`vCHzf1x`~|-Gdnv4rh1yYG!EZKW8WNaZsNn9opDXjJ zsfTMX_e48gORB6isbQUN%(}ZKK~U|rNTye!T@d}`?VC4`ZpZf|r@Q-^C>Bq*iIrP1 z_B6fH{Mq{A)%4W&p3gz6_Ch1@`>As4mG>%XK3dUwAc$xjt5dA^_Wkd+-zA|x zFL7_uB8vVS6SvImEDc7Zn|C%l?%7s$DaYIURlO7*4 zk>dCDeaLL*Jb|qsb-4H%{##Os7Vy^ke|@@1E+*A1hr!2~UIRy$&^m z{w&jWRvM6abBI=a{H~x(T=7P#qL3)hH*EoI&}N&>z+(dcdcr;c=D>8KSP)J&?ZnsN za1iY+ko!`FbN$N1++8wSD!rQ@1vpf=$a48^wCWMw`s75=ioce~VD=%IT*xir^)l(2 zq@o}tLY`pT`TP|$eQK^+0uP5u44c|Jx*HLiU|!+Z(i#3_KWZJ-nBT3GTP`z6ehrFMW3TH+cGl`Hr*IKDbM|S zXKh0$U|{9LzsZdigQ64}lNq2y8tD|K_c`ql#-I>79A3z6s8oP6V9-@8l<)us@&9R})2TYR}JB z?y1(@*P@3<9Wg2}NQ?EH ztfv^gIlj(*vg_wI;oGD)FC(O@R@uEPSr4|1cz6A5x*LSZKl<0Qp8{QY!G{`UGPWIw z_lS zJv#QqCuE3hF+1QIJOzX*S%m$JqHbNGm=~ESnk4$h_03(#G^uJ6<+n+k!lRe3VWX0& zDbloA61Vv?{)cJByE|do{WeU^Kb5^NmZ~w3R|ti=8j{uog^lZa>A8BgC*}ycy=!^9 zhnAG#al_-Y_V9gLyvIeqji*pAKzc=4D3s6Qkj~Y!aISYGiW495^3J<%%~BKIOGe$k zp-Pq#q#Ehb5z1_Bhw){%^zex2O=xc=@EZluhgW?R%W9%@c~SVIgVFWb9Sx7L=R|MU z$bGCoJJLGpJ5$a%6&xH_Fp4&?9JmeL&Hv#{%SLbGrluPjQl3RJ^UXl*(?ZDV?3|#e zh@JcD`%u+PS0jN{W>(VW9r^fPbSw+DJr8Q=Nd~js>l27o>Z$C-1ZUnVwOME%ZGOO?f2jU%rp4kAUe-p zMz~C->!|CVcXAi_75-~kVRQ3#i}=rB3nJ~y7J2Tm$rmCdKE_`nG@@U=mF#LUBS957 zzU(7sv1%iu;ugSZTA*dA4!7~#$#oWg^#AR-8HywEiA3ot@K}a=&t>e3uZ==3TqGjNeTBrFzvE)JYRHp2{J>E%J>Ryi=geh}U_kZwj72zcPa!a!1!(Z;vo~5=Y&&7j#v{ zhyTe^IQgdM$lDsBh*A1iBh%ofM$JC`y~GMZfqh`Qf^eHPQ8%>w^-*GOZP;r>0{2Oc zZ0szZdFot;08`Y}=nplaqw*)Wgp(*59+KiE^H#`KT#;c_(pp8I0wFOo`_bY8X6NqN zU7?RM=5r6dv6ouk?M{C+#D_h_aEGq)VT^PF%%Zg3hOvEb6FMZ@C5cX`*F<>?UJUbL zZ48kL3lW!3Sg$Nd(l(t)eo=gf({oCi;~Kj-^GAG1CCO8uNB!M(Uus86DJL2mqyw-;pB!_Qxdc4!y%7r{2gvcy`QPZFN6x)4XkQfuF%Qvbj=#sB&> z`1uHR{ZuF9?Rol5f%&^{?ecX61m?QKvc@i%CglWw&snkIX-ztRn51{3M^{Qu&lcY4 z`_%@o>^MVAlv&9zYQXj4c+OYwBe_m>PJ^we^^~f|+FkSWc$8hj^Y5^_;F?cd9HP(7 zEl1H=baPXS+%<{TWt-MZ>404?cR%G(uzM7QM`V1yMgLcNXzsye#&1#QlySt15JpG%=}6Fj&E=VI+%PkHlt^_*=>;z`Zuf5IlEYw7Zfj@*tIj zlKRBj#!=gr)|tVeMJjeV?WgPo5*GtGL+S=3a@4f*P)5_Pjx;NSX=<4D;O#ZpV(YK9 z>iP3f8LNw#oYbYK0M*uhGV{PW_%rda*(1!tE(6{gcm^};NSOOeP}pP&n@p4zm%$Qo z_3?_eZi>$xyS;!ZxdV+lqCJHUqI~XOO0uIP;JKkH__5`|^vI9BaB{QhwP7(~f+o!^ z^S)#A6E&K~&!G*QDQ+Y5#R*irp*Ni`O%m!>5+O+~4Xd`BlP!{-OeA61wCIW*=tq3Z zmi2_j)WS0!stp`UAkbRT+_Uxf-*8v0;@z>(%S9`aMIoj}O=W29?kc{^hjXfhQDOS} z`49j(tnRBJ*@B>5qmz{qQa&-Wvj#kybeX|$Mn=!-Bj0)0(3-j7*IbaYATW|m^r9@= zOTc@YSIbO@Qhx_}n0iiHd6%m%v4q$?(D#QEl}MQtD>PoK~4c z56xTllcK)4*CT|OZ;1kUV}#BJ-Wt!C$4b>@G!Hbs-Ryvs&o$S$r(Umtr11Vy(@%|U zUa$*R!!Gj4g;;#AVolzsd>|f9n~#%_;fHr97xyJSQ7BR&Ypy#yaQ}3a zxV6^5vQepmmv{$amUSmOG(e|4sh}zKdLut7dWI~W5Pf1m4Yvmp~w-Q^~AU8%LdSz`4q zM-SENLj?l$q(wr}FY8j*f*7~i$+9frLi!6u_vCB4$3|tsEJu0wZY=a)De&r5_BVnzz9cd@cNZac@4 z6>I%dOX_JSAHO;7M5f&>b=OVLQ*W?lvl4W}fBNbp*oFQBKd5156Q|2~?V}@swGHnc z@58`mC`wO!r}{~3`|7!E@j6jAL*fqdRabuTrl9s>ld)=i7+f0hN`UW8{9-}WHWm2J zehU1!=0llEt82b<_#_T*>q4}8BrkRC+>XHs431D+VXY*8QlO~a`?59EAGi(J3-(|1a4KeD-GJmoGrH(S9C*HXI1VPIl#$M(^!{pwI)^^K03F@dOH&rT01BZ>@wUoLxNSBRt#Oa@NS|KHPIxa3rfd z{Fox@zmQ&qnaE5i-Jx$KYJRXpyN36;focqDKFL{SJ$3P}P}j`rDd3GSvxaVfWfL+s zO~zGSi-Qp z$mEpZuA(m_Ow+mq%$7ft%TQ z;_J)LFh31W0T%s^yf5sikiE;V3>Q<51%EhQ7L(P-@`q&bxnE5XIOpc}(F&_fjo&O= zT;C>B0J~l*{A=eiMZQeT*vB!&Yt9l>)w!%?OH8}e2b#FHZKesEJx>$KVa%D@mb|u) zuPI)2`p6(Bm7T-7_jI}8$!G~};~ibn2e;SB(qrns{N&yrw4t9ofBeaSu~d6WuOPI? zJ<6QFgthwSaZ@O4u*B(TD5H9kGeL62kTD+oZX-Ev((vAs26dS*U)oJ41xnRpg}L%nliyrY6&87mkK*+7gI2dxt(O{dM$O#QvdebTjyCsnt;k%# zsc`EQc$#>rhq53Kj19tgwvis|494(XvLnHjgOs2E zIdR`bOs-l`$z)17;}a&0_wM%$F6T;5=2g2$^GbDZ^c-+{+@__%BE#_->Vre&)^lTj zaZT0zp8!@2sq;E<>Qvk7-mYcnUeF$5gjCwa();u~L()4RU#7`832Eb%|BE4wTu_@5m{gny#-?p^vv)B8=gmmO|f+7R?rZ7y7W zGq+ob{2%qL9O0qtbg$YP*O^DDu$vVE*tdvPPk6G|Xj^$f=n#Yy9_vmzFEI4$>;1Lj z8se>o^p2G)RE-g5czQzAy}#E{_NAGXh)mod>>+Xc`y2#y&WZ@GB`)%&@EmkbhfCfaJV$=h z{pnjA5OlAyL)T-(*wc81W!@lBES9pFQl)i~hKFD}Pel6-N|mKnl?>aXrD~BvTFQ>m zZ_wyNS821U--Um;duS^keIBro;ge-RD$qpXc0Hr5YjWl2&4cIJ*2q9g% z^9l&pt%zu|X^APf&-E|9gs)75%XT;N{l|!FS(t-(QFXa1%v~b(X^ljdmX>-F>mkx03+%#fouRM)0xCKC(Ho!awqIGZM_dB z44#s@nRjs1#~K3NvS>!mlJtDl9~@7+~TISqze?gO5h8oZs;K zsVrRo0AzRbG49LL$(^WM#HmP_n~+8w5t%@hD)AgApCABGV3lFwf3MImj5e1{7jDr* z(l$k*giE+H7LFObI><5sYY*K^yZ354m14cLT8ge9oT~8vY(eQ54t=I+wh36!-JZlM zcS$SWKCz<+!$PuEsveR=rYVSY7YIRQJp&T+xP1LN^|y^3tp%)R_zuK0sdco=zJ}9j zzqdk7;#fl~F(uP7UhJ&*2lF3Xj3+aQCDRk!gMRvtpdq|SJ0rAl4HB4j5SE7T+4pM^ zaA*9Q66RU94Ff>$(NdyZ%q_{ba~5u&`#ci9{@RQX(u?U82s#KeztAg5i@xQ8v)zC75DO zqQ117M1tYbDTdl7P)Y^f_jZrnYWJQ}VjU-@lWJ`2!?;OzGXk;4xhWlk{r>=dfrB^b z5u0do6M>0yX=HkmDx8EPl5USsOnv^(qJ6%Xu$yRoW>?E<%(K81uHfgSWp z(cWzkVk%kFex?z}j|bjvPRefeGRg=Y^=Fi04Z3b#er3zvTwO2F7&`9pSQQ(ji+z$$J42Iv<{7;>U29tYgoHh;b)j_dqiM!vk_6kG{ZYCHjDoN zy>6o}TuYlmBuSG-??wu5F8xKdq2>Z~82d&25WfOM^sZgNsd`*leFs2*Qo*(wp_UuKESs&0+YBw_qHdkp*oMUQNkEYlc?J^)6hweHAKZ3!?PCune)E zXz792L-(r_kswfa8jnrO&=wf=5;0GChcf%LJW~CqwpLbFQe3%m<;&{5FH4s%(7AAQ z2w=Fk?GhWy?;&5Wz3tp!`Hr`(O8N?wDpaXmK&CPV8nbt_wLZs(=2nzUcb_xoOPBNm z4ID%xrQPAuec5PlXUWT+6k1 z$t}_k+w~o!9?4NszL1^a1^eg&FD4_JCc>8XBmQUKVp+fLmE8X38zbg6-9I`4R+TG1 zLQIN|-(d8bAAIAW$|JH|+mrH{BYQYv->@+&(Bn=$4$`9I#+$M44liOSNEW~3#w)Pw zc9o?{m8D9RIhE=?1bL1v6^FUfehIL^wkuS^?b=Yp>R2-I=nGws?kqu#!o$40;cyMF zh*S$P$$Prgsa;0z(Qb~>TlXK=;W#etzBD+=H`{q=W?1T~+SrS{TbZ%i%XcEGg*paY zy?342b)BM)@H=}uuskQa2IrpeE7LjpA{m8iaBdJ-pTc2m5l*|a-|J)n(a9E%VS z3qB^pcV^PTnbSd{(%|pEtH-5s&iXCwqMq~I$|fo-&*Oi+XWib5>hF?K zq190hjVe^F5@drY-=Ld^b{u9KoEv(pE?M4FzKih7drZvAd(U$zD4!CUQl%1&F^7H| zKcB7{f}gNoqy2(0)z~{jqNQk%$}yRG5i*ppJtjBaQ{A5_Nk@r^`=1j%rhH0!%JV8w z=!~__**cG?3L;tdBdtz5Na)7|R^Kr6H$;r7P{iE>(zvjD%*yi0c9cr`J1-7jI`Pnb zD4U;3yc0M(CqnV~gI?gh$rG{4jH>umY@hmkEh z(e%S)T0YZF$ZpY5al80|=sQ7TM_(*HOn+4yHwaJ=SO{?VfJXIyxBmbk;rz;@Z&PQ~ z4MiRBK7sVBF=y>IcA~~HE>c&Z?K#D5Z0=l3!{oo>DyuJyK;GM3-&{8OerD6V^bf!M za7TYpoVBlCV=^B@a+3T@drZL6k20Uf*l+B&MZ8ZvjD1FO`X(x~pF-uGU%Fe`TiSdjJ>@;w@|2WzmDkT&rg%(xPp|*kmj(QA diff --git a/public/profile_upload/profile_1764645094.jpg b/public/profile_upload/profile_1764645094.jpg new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..3c6a16236e66a11b3ee6c9cfc7c89138cf072adc0574a037f05e00d1b1f8b32d GIT binary patch literal 49079 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 V<6o2Ef4>$E{Pusg%uoN|{TuWmaH{|S literal 0 HcmV?d00001 diff --git a/resources/views/admin/layouts/app.blade.php b/resources/views/admin/layouts/app.blade.php index 248ca8f..5481de3 100644 --- a/resources/views/admin/layouts/app.blade.php +++ b/resources/views/admin/layouts/app.blade.php @@ -212,6 +212,13 @@ Orders Requests +
  • + + + Profile Update Requests + +
  • + Staff Account Mark List diff --git a/resources/views/admin/profile_update_requests.blade.php b/resources/views/admin/profile_update_requests.blade.php new file mode 100644 index 0000000..4797665 --- /dev/null +++ b/resources/views/admin/profile_update_requests.blade.php @@ -0,0 +1,111 @@ +@extends('admin.layouts.app') + +@section('page-title', 'Profile Update Requests') + +@section('content') +
    + + @php + $perPage = 5; + $currentPage = request()->get('page', 1); + $currentPage = max(1, (int)$currentPage); + $total = $requests->count(); + $totalPages = ceil($total / $perPage); + $currentItems = $requests->slice(($currentPage - 1) * $perPage, $perPage); + @endphp + + + +

    Profile Update Requests ({{ $total }})

    + +
    +
    + +
    + + + + + + + + + + + + + + @foreach($currentItems as $index => $req) + @php + $user = $req->user; + // FIX: Convert string to array + $newData = is_array($req->data) ? $req->data : json_decode($req->data, true); + @endphp + + + + + + + + + + + + + + + + @endforeach + +
    #UserRequested ChangesStatusRequested AtActions
    {{ ($currentPage - 1) * $perPage + $index + 1 }} + {{ $user->customer_name }}
    + {{ $user->email }}
    + ID: {{ $user->customer_id }} +
    + @foreach($newData as $key => $newValue) + @php + $oldValue = $user->$key ?? '—'; + $changed = $oldValue != $newValue; + @endphp + +
    + {{ ucfirst(str_replace('_',' ', $key)) }}:
    + Old: {{ $oldValue }}
    + New: {{ $newValue ?? '—' }} +
    + @endforeach +
    + @if($req->status == 'pending') + Pending + @elseif($req->status == 'approved') + Approved + @else + Rejected + @endif + {{ $req->created_at->format('d M Y, h:i A') }} + @if($req->status == 'pending') + + Approve + + + + Reject + + @else + Completed + @endif +
    +
    + +
    +
    +
    +@endsection diff --git a/resources/views/admin/shipments.blade.php b/resources/views/admin/shipments.blade.php index 4092ae7..5d3f16d 100644 --- a/resources/views/admin/shipments.blade.php +++ b/resources/views/admin/shipments.blade.php @@ -7,18 +7,15 @@ /*Remove horizontal scroll bar*/ html, body { overflow-x: hidden !important; - font-family: 'Inter', sans-serif; } .table thead th, .table tbody td { white-space: nowrap !important; - padding: 14px 8px !important; - font-size: 14px; - font-family: 'Inter', sans-serif; + padding: 8px 4px !important; } - .table th:nth-child(10), + .table th:nth-child(10), /* if Date is column 10 */ .table td:nth-child(10) { max-width: 110px !important; width: 110px !important; @@ -28,7 +25,6 @@ .table { table-layout: fixed !important; - font-family: 'Inter', sans-serif; } @@ -36,7 +32,6 @@ min-width: unset !important; width: 100% !important; table-layout: auto !important; - font-family: 'Inter', sans-serif; } .table thead th, @@ -47,8 +42,6 @@ .shipment-details-table td { white-space: normal !important; word-break: break-word; - font-family: 'Inter', sans-serif; - font-size: 14px; } .table-responsive, .modal .table-responsive { @@ -70,125 +63,62 @@ --hover-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); } - /* Search Bar Styles */ .search-shipment-bar { display: flex; align-items: center; gap: 15px; padding: 20px; - background: white; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 16px; box-shadow: var(--card-shadow); flex-wrap: wrap; margin-bottom: 30px; - color: #333; + color: white; position: relative; overflow: hidden; - font-family: 'Inter', sans-serif; - border: 1px solid #e2e8f0; } - .search-input-container { - display: flex; - flex: 1; - min-width: 300px; - background: white; - border-radius: 10px; - overflow: hidden; - border: 1px solid #d1d5db; - transition: all 0.3s ease; + .search-shipment-bar::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255,255,255,0.1); + z-index: 0; } - .search-input-container:focus-within { - border-color: #4361ee; - box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.1); - } - - .search-shipment-bar input { - padding: 12px 16px; - border: none; - flex: 1; - background: transparent; - font-weight: 500; - transition: all 0.3s ease; - font-family: 'Inter', sans-serif; - font-size: 14px; - outline: none; - color: #333; - } - - .search-shipment-bar input::placeholder { - color: #6b7280; - } - - .search-button { - background: white; - color: #4361ee; - border: none; - padding: 12px 20px; - cursor: pointer; - transition: all 0.3s ease; - font-weight: 600; - font-family: 'Inter', sans-serif; - font-size: 14px; - display: flex; - align-items: center; - gap: 8px; - border-radius: 0 10px 10px 0; - min-width: 100px; - justify-content: center; - border-left: 1px solid #d1d5db; - } - - .search-input-group { - border: 1px solid #d1d5db !important; - border-radius: 8px !important; - padding: 4px !important; - background: #ffffff !important; - } - - .search-button:hover { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3); - } - - .search-icon { - font-size: 16px; - color: #4361ee; - transition: all 0.3s ease; - } - - .search-button:hover .search-icon { - color: white; + .search-shipment-bar > * { + position: relative; + z-index: 1; } + .search-shipment-bar input, .search-shipment-bar select { - padding: 20px 16px; - border: 1px solid #d1d5db; + padding: 12px 16px; + border: 1px solid rgba(255,255,255,0.2); border-radius: 10px; + flex: 1; min-width: 150px; - background: white; + background: rgba(255,255,255,0.9); font-weight: 500; transition: all 0.3s ease; - font-family: 'Inter', sans-serif; - font-size: 14px; - color: #333; } + .search-shipment-bar input:focus, .search-shipment-bar select:focus { background: white; - box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.1); + box-shadow: 0 0 0 3px rgba(255,255,255,0.3); outline: none; - border-color: #4361ee; } .btn-add-shipment { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + background: rgba(255,255,255,0.2); + backdrop-filter: blur(10px); color: white; - border: none; - padding: 17px 24px; + border: 1px solid rgba(255,255,255,0.3); + padding: 12px 24px; border-radius: 10px; cursor: pointer; display: flex; @@ -197,13 +127,17 @@ transition: all 0.3s ease; white-space: nowrap; font-weight: 600; - font-family: 'Inter', sans-serif; - font-size: 14px; } .btn-add-shipment:hover { + background: rgba(255,255,255,0.3); transform: translateY(-2px); - box-shadow: 0 10px 20px rgba(102, 126, 234, 0.3); + box-shadow: 0 10px 20px rgba(0,0,0,0.1); + } + + .search-icon { + font-size: 20px; + filter: drop-shadow(0 2px 4px rgba(0,0,0,0.1)); } .truck-icon { @@ -215,7 +149,7 @@ flex-direction: column; align-items: stretch; } - .search-input-container, + .search-shipment-bar input, .search-shipment-bar select { width: 100%; } @@ -228,7 +162,6 @@ box-shadow: var(--card-shadow); transition: all 0.3s ease; overflow: hidden; - font-family: 'Inter', sans-serif; } .card:hover { @@ -242,7 +175,6 @@ border: none; padding: 20px 25px; border-radius: 16px 16px 0 0 !important; - font-family: 'Inter', sans-serif; } .card-header h5 { @@ -251,8 +183,6 @@ display: flex; align-items: center; gap: 10px; - font-family: 'Inter', sans-serif; - font-size: 18px; } /* Table Styles */ @@ -268,7 +198,6 @@ width: 100%; min-width: 1200px; padding: 0; - font-family: 'Inter', sans-serif; } .table thead th { @@ -282,8 +211,6 @@ border-bottom: 2px solid var(--border); position: relative; white-space: nowrap; - font-family: 'Inter', sans-serif; - font-size: 14px; } .table thead th:first-child { @@ -312,15 +239,13 @@ border-bottom: 1px solid var(--border); font-weight: 500; white-space: nowrap; - font-family: 'Inter', sans-serif; - font-size: 14px; } .table tbody tr:last-child td { border-bottom: none; } - /* Status Badge Styles */ + /* UPDATED: Status Badge Styles - ALL SAME SIZE */ .badge { padding: 7px 17px !important; border-radius: 20px !important; @@ -329,51 +254,63 @@ border: 2px solid transparent !important; min-width: 40px !important; text-align: center !important; - display: inline-flex !important; - align-items: center; - justify-content: center; + display: inline-block !important; line-height: 1.2 !important; - font-family: 'Inter', sans-serif; - gap: 6px; - width: 110px; } - /* Status icons */ - .status-icon { - font-size: 13px; - display: flex; - align-items: center; - justify-content: center; - } - - /* Pending Status */ + /* Pending Status - SAME SIZE */ .badge-pending { background: linear-gradient(135deg, #fef3c7, #fde68a) !important; color: #d97706 !important; border-color: #f59e0b !important; + width: 110px; } - /* In Transit Status */ + /* In Transit Status - SAME SIZE */ .badge-in_transit { background: linear-gradient(135deg, #dbeafe, #93c5fd) !important; color: #1e40af !important; border-color: #3b82f6 !important; + width: 110px; } - /* Dispatched Status */ + /* Dispatched Status - SAME SIZE */ .badge-dispatched { background: linear-gradient(135deg, #e9d5ff, #c4b5fd) !important; color: #6b21a8 !important; border-color: #8b5cf6 !important; + width: 110px; } - /* Delivered Status */ + /* Delivered Status - SAME SIZE */ .badge-delivered { background: linear-gradient(135deg, #d1fae5, #a7f3d0) !important; color: #065f46 !important; border-color: #10b981 !important; + width: 110px; } + /* Default badge styles - SAME SIZE */ + .badge.bg-info { + background: linear-gradient(135deg, #4cc9f0, #4361ee) !important; + color: white !important; + } + + .badge.bg-success { + background: linear-gradient(135deg, #4ade80, #22c55e) !important; + color: white !important; + } + + .badge.bg-warning { + background: linear-gradient(135deg, #fbbf24, #f59e0b) !important; + color: white !important; + } + + .badge.bg-danger { + background: linear-gradient(135deg, #f87171, #ef4444) !important; + color: white !important; + } + /* Light badges for quantity, kg, cbm */ .badge.bg-light { background: #f8f9fa !important; @@ -381,12 +318,9 @@ border: 1px solid #dee2e6 !important; min-width: 80px !important; padding: 6px 12px !important; - font-family: 'Inter', sans-serif; - font-size: 13px; - width: auto; } - /* Action Button Styles */ + /* NEW: Action Button Styles */ .action-container { position: relative; display: inline-block; @@ -405,7 +339,6 @@ justify-content: center; width: 36px; height: 36px; - font-family: 'Inter', sans-serif; } .btn-edit-status:hover { @@ -429,7 +362,6 @@ margin-top: -50px; border: 1px solid var(--border); z-index: 1050; - font-family: 'Inter', sans-serif; } .status-dropdown.show { @@ -450,7 +382,6 @@ gap: 8px; background: transparent; width: 100%; - font-family: 'Inter', sans-serif; } .status-option:hover { @@ -516,73 +447,12 @@ background: #10b981; } - /* View Button Styles */ - .btn-view { - background: #4361ee; - color: white; - border: none; - border-radius: 8px; - padding: 8px; - cursor: pointer; - transition: all 0.3s ease; - display: flex; - align-items: center; - justify-content: center; - width: 36px; - height: 36px; - font-weight: 600; - font-size: 16px; - font-family: 'Inter', sans-serif; - position: relative; - overflow: hidden; - } - - .btn-view::before { - content: ''; - position: absolute; - top: 0; - left: -100%; - width: 100%; - height: 100%; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - transition: all 0.3s ease; - z-index: 1; - } - - .btn-view:hover::before { - left: 0; - } - - .btn-view i { - position: relative; - z-index: 2; - transition: all 0.3s ease; - } - - .btn-view:hover { - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4); - } - - .btn-view:hover i { - transform: scale(1.1); - } - - /* Action buttons container */ - .action-buttons { - display: flex; - gap: 8px; - align-items: center; - justify-content: center; - } - /* Modal Styles */ .modal-content { border-radius: 20px; border: none; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; - font-family: 'Inter', sans-serif; } .modal-header { @@ -592,7 +462,6 @@ padding: 25px 30px 15px; border-radius: 20px 20px 0 0; position: relative; - font-family: 'Inter', sans-serif; } .modal-header::after { @@ -608,7 +477,6 @@ .modal-title { font-weight: 700; font-size: 1.5rem; - font-family: 'Inter', sans-serif; } .btn-close { @@ -622,7 +490,6 @@ .modal-body { padding: 25px 30px; - font-family: 'Inter', sans-serif; } /* Form Styles */ @@ -631,18 +498,16 @@ color: #5a6c7d; margin-bottom: 8px; font-size: 0.9rem; - font-family: 'Inter', sans-serif; } .form-control { border-radius: 10px; border: 1px solid #e2e8f0; padding: 12px 16px; - font-size: 14px; + font-size: 15px; transition: all 0.3s ease; background: #fafbfc; color: #4a5568; - font-family: 'Inter', sans-serif; } .form-control:focus { @@ -655,6 +520,39 @@ color: #a0aec0; } + /* Date Input Styling */ + input[type="date"] { + position: relative; + } + + input[type="date"]::-webkit-calendar-picker-indicator { + background: transparent; + bottom: 0; + color: transparent; + cursor: pointer; + height: auto; + left: 0; + position: absolute; + right: 0; + top: 0; + width: auto; + } + + input[type="date"] { + position: relative; + padding-right: 40px; + } + + input[type="date"]:after { + content: "📅"; + position: absolute; + right: 12px; + top: 50%; + transform: translateY(-50%); + pointer-events: none; + font-size: 16px; + } + /* Button Styles */ .btn-cancel { background: #f7fafc; @@ -664,8 +562,6 @@ font-weight: 600; padding: 12px 30px; transition: all 0.3s ease; - font-family: 'Inter', sans-serif; - font-size: 14px; } .btn-cancel:hover { @@ -679,12 +575,11 @@ background: linear-gradient(135deg, #48bb78, #38a169); color: white; font-weight: 600; - font-size: 14px; + font-size: 16px; border-radius: 10px; padding: 12px 35px; border: none; transition: all 0.3s ease; - font-family: 'Inter', sans-serif; } .btn-create:hover { @@ -700,7 +595,6 @@ border-spacing: 0 8px; margin: 0; min-width: 1300px; - font-family: 'Inter', sans-serif; } .custom-table-modal thead th { @@ -711,10 +605,9 @@ border: 1px solid #e2e8f0; text-align: center; position: relative; - font-size: 14px; + font-size: 0.9rem; letter-spacing: 0.3px; white-space: nowrap; - font-family: 'Inter', sans-serif; } .custom-table-modal thead th:first-child { @@ -751,8 +644,6 @@ position: relative; color: #4a5568; white-space: nowrap; - font-family: 'Inter', sans-serif; - font-size: 14px; } .custom-table-modal tbody tr td:first-child { @@ -765,6 +656,38 @@ border-bottom-right-radius: 10px; } + /* Checkbox Styling */ + input[type="checkbox"] { + width: 20px; + height: 20px; + border-radius: 6px; + border: 2px solid #cbd5e0; + cursor: pointer; + position: relative; + transition: all 0.2s ease; + background: #f7fafc; + } + + input[type="checkbox"]:checked { + background: var(--primary); + border-color: var(--primary); + } + + /* Link Styling */ + a.text-primary { + color: var(--primary) !important; + text-decoration: none; + font-weight: 600; + transition: all 0.3s ease; + position: relative; + color: #4361ee !important; + } + + a.text-primary:hover { + color: var(--primary-dark) !important; + text-decoration: underline; + } + /* Shipment Details Modal */ .shipment-details-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); @@ -772,12 +695,10 @@ border: none; padding: 25px 30px 15px; border-radius: 20px 20px 0 0; - font-family: 'Inter', sans-serif; } .shipment-details-body { padding: 40px 45px; - font-family: 'Inter', sans-serif; } .shipment-info-row { @@ -788,7 +709,6 @@ background: #f8fafc; border-radius: 12px; box-shadow: 0 2px 10px rgba(0,0,0,0.05); - font-family: 'Inter', sans-serif; } .shipment-info-item { @@ -802,14 +722,12 @@ color: #64748b; font-size: 14px; margin-bottom: 5px; - font-family: 'Inter', sans-serif; } .shipment-info-value { font-weight: 700; font-size: 18px; color: var(--dark); - font-family: 'Inter', sans-serif; } .shipment-details-table { @@ -818,7 +736,6 @@ border-spacing: 0 8px; margin-top: 20px; min-width: 1400px; - font-family: 'Inter', sans-serif; } .shipment-details-table th { @@ -830,8 +747,6 @@ border: none; position: relative; white-space: nowrap; - font-family: 'Inter', sans-serif; - font-size: 14px; } .shipment-details-table th:first-child { @@ -851,8 +766,6 @@ background: white; box-shadow: 0 2px 5px rgba(0,0,0,0.05); white-space: nowrap; - font-family: 'Inter', sans-serif; - font-size: 14px; } .shipment-details-table tr td:first-child { @@ -865,31 +778,6 @@ border-bottom-right-radius: 10px; } - /* Delete Button for Orders */ - .btn-delete-order { - background: linear-gradient(135deg, #f87171, #ef4444); - color: white; - border: none; - border-radius: 6px; - padding: 6px 12px; - cursor: pointer; - transition: all 0.3s ease; - font-size: 12px; - font-weight: 600; - font-family: 'Inter', sans-serif; - display: flex; - align-items: center; - gap: 4px; - min-width: 80px; - justify-content: center; - } - - .btn-delete-order:hover { - background: linear-gradient(135deg, #ef4444, #dc2626); - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3); - } - /* Shipment Totals Section */ .shipment-totals { margin-top: 25px; @@ -898,7 +786,6 @@ border-radius: 12px; box-shadow: 0 4px 6px rgba(0,0,0,0.05); border-left: 4px solid #4361ee; - font-family: 'Inter', sans-serif; } .shipment-totals-row { @@ -925,7 +812,6 @@ margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.5px; - font-family: 'Inter', sans-serif; } .shipment-total-value { @@ -933,7 +819,6 @@ font-size: 20px; color: #1e293b; line-height: 1.2; - font-family: 'Inter', sans-serif; } .total-amount { @@ -1006,7 +891,6 @@ /* Status Filter Styles */ .status-filter-container { position: relative; - margin-left:350px; } .status-filter-select { @@ -1021,7 +905,20 @@ padding-right: 40px !important; } - /* Pagination Styles */ + /* Shipment row styling for filtering */ + .shipment-row { + transition: all 0.3s ease; + } + + .shipment-row.hidden { + display: none !important; + } + + .shipment-row.visible { + display: table-row; + } + + /* ---------- Pagination Styles (Same as Account Dashboard) ---------- */ .pagination-container { display: flex; justify-content: space-between; @@ -1029,14 +926,12 @@ margin-top: 15px; padding: 12px 25px; border-top: 1px solid #eef3fb; - font-family: 'Inter', sans-serif; } .pagination-info { font-size: 13px; color: #9ba5bb; font-weight: 600; - font-family: 'Inter', sans-serif; } .pagination-controls { @@ -1060,7 +955,6 @@ justify-content: center; min-width: 40px; height: 32px; - font-family: 'Inter', sans-serif; } .pagination-btn:hover:not(:disabled) { @@ -1089,7 +983,6 @@ transition: all 0.3s ease; min-width: 36px; text-align: center; - font-family: 'Inter', sans-serif; } .pagination-page-btn:hover { @@ -1114,9 +1007,9 @@ color: #9ba5bb; font-size: 13px; padding: 0 4px; - font-family: 'Inter', sans-serif; } + /* Image-based pagination buttons */ .pagination-img-btn { background: #fff; border: 1px solid #e3eaf6; @@ -1169,42 +1062,6 @@ justify-content: center; } } - - /* Delete Confirmation Modal */ - .delete-confirmation-modal .modal-header { - background: linear-gradient(135deg, #ef4444, #dc2626); - } - - .delete-confirmation-modal .btn-confirm-delete { - background: linear-gradient(135deg, #ef4444, #dc2626); - color: white; - border: none; - border-radius: 8px; - padding: 10px 20px; - font-weight: 600; - transition: all 0.3s ease; - } - - .delete-confirmation-modal .btn-confirm-delete:hover { - background: linear-gradient(135deg, #dc2626, #b91c1c); - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(220, 38, 38, 0.3); - } - - .delete-confirmation-modal .btn-cancel-delete { - background: #f7fafc; - color: #718096; - border: 1px solid #cbd5e0; - border-radius: 8px; - padding: 10px 20px; - font-weight: 600; - transition: all 0.3s ease; - } - - .delete-confirmation-modal .btn-cancel-delete:hover { - background: #edf2f7; - color: #4a5568; - }
    @@ -1226,27 +1083,12 @@
    @endif - + + +
    -
    -
    - - -
    -
    - + 🔍 +
    +
    - + + +