관리-도구
편집 파일: SiteController.php
<?php namespace App\Http\Controllers; use App; use App\Models\Comment; use App\Models\GeneralSetting; use App\Models\Page; use App\Models\Payment; use App\Models\Property; use App\Models\Review; use App\Models\SectionData; use App\Models\Transaction; use App\Models\Wishlist; use \App\Models\Refferal; use Auth; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Str; class SiteController extends Controller { public function index() { $pageTitle = 'Home'; $page = Page::where('name', 'home')->where('language_id',selectedLanguage()->id)->firstOrFail(); return view('frontend.home', compact('pageTitle', 'page')); } public function page(Request $request) { $page = Page::where('slug', $request->pages)->where('language_id',selectedLanguage()->id)->firstOrFail(); if($page->slug == 'home'){ return redirect()->route('home'); } $pageTitle = "{$page->name}"; $htmlData = $page->page_content; $data = $this->processHtmlData($htmlData); $processedHtml = $data['content']; $hasSection = $data['shortcode_count'] > 0 ? true : false; return view('frontend.pages', compact('pageTitle', 'processedHtml','page','hasSection')); } public function processHtmlData($htmlData) { $pattern = '/\[\[(.*?)\]\]/'; $shortcodeCount = 0; // Initialize the counter // Replace the shortcodes with section content $processedContent = preg_replace_callback($pattern, function ($matches) use (&$shortcodeCount) { $shortcode = $matches[1]; $shortcodeCount++; // Increment the counter for each match $html = view('frontend.sections.' . $shortcode)->render(); return $html ?? ''; }, $htmlData); // Return the processed content and the shortcode count return [ 'content' => $processedContent, 'shortcode_count' => $shortcodeCount, ]; } public function contactSend(Request $request) { $data = $request->validate([ 'name' => 'required', 'email' => 'required|email', 'subject' => 'required', 'message' => 'required', ]); sendGeneralMail($data); $notify[] = ['success', 'Contact With us successfully']; return back()->withNotify($notify); } public function investmentProperty() { $pageTitle = "Investment Plan"; $properties = Property::where('status', 1)->get(); return view('frontend.pages.invest', compact('pageTitle', 'properties')); } public function blog($id) { $pageTitle = "Recent Blog"; $data = SectionData::where('key', 'blog.element')->where('id', $id)->first(); $comments = Comment::with('user')->where('blog_id', $id)->latest()->paginate(); $recentblog = SectionData::where('key', 'blog.element')->latest()->limit(6)->paginate(); $shareComponent = \Share::page( url()->current(), 'Share', ) ->facebook() ->twitter() ->linkedin() ->telegram() ->whatsapp() ->reddit(); return view('frontend.pages.blog', compact('pageTitle', 'data', 'comments', 'recentblog', 'shareComponent')); } public function blogComment(Request $request, $id) { $request->validate([ 'comment' => 'required', ]); Comment::create([ 'user_id' => Auth::id(), 'blog_id' => $id, 'comment' => $request->comment, ]); $notify[] = ['success', 'Comment Post Successfully']; return back()->withNotify($notify); } public function allInvestmentProperty(Request $request) { $pageTitle = "Investment Property"; $properties = Property::where('status', 1); $properties = $properties->get(); $findData = $properties->count(); return view('frontend.pages.investmentproperty', compact('pageTitle', 'properties', 'findData')); } public function affiliate() { $pageTitle = "Affiliates"; $invest = Refferal::where('type', 'invest')->first(); $commission = Refferal::where('type', 'interest')->first(); $sections = Page::where('name', 'affiliate')->first(); return view('frontend.pages.affiliate', compact('pageTitle', 'invest', 'commission', 'sections')); } public function allblog() { $pageTitle = 'Blog'; $blogs = SectionData::where('key', 'blog.element')->paginate(6); return view('frontend.pages.allblog', compact('pageTitle', 'blogs')); } public function changeLang($lang) { App::setLocale($lang); session()->put('locale', $lang); return redirect()->back()->with('success', __('Successfully Changed Language')); } public function investLog() { $pageTitle = 'Invest Log'; $transactions = Payment::where('user_id', auth()->id())->where('payment_status', 1)->paginate(); return view('frontend.user.invest_log', compact('pageTitle', 'transactions')); } public function investmentUsingBalannce(Request $request) { $request->validate([ 'amount' => 'required|numeric', ]); $general = GeneralSetting::first(); $property_id = Property::with('time')->findOrFail($request->property_id); if ($property_id->amount_type == 0) { if ($property_id->maximum_amount) { if ($request->amount > $property_id->maximum_amount) { return redirect()->back()->with('error', 'Maximum Invest Limit ' . number_format($property_id->maximum_amount, 2)); } } if ($property_id->minimum_amount) { if ($request->amount < $property_id->minimum_amount) { return redirect()->back()->with('error', 'Minimum Invest Limit ' . number_format($property_id->minimum_amount, 2)); } } } if ($property_id->amount_type == 1) { if ($property_id->amount) { if ($request->amount != $property_id->amount) { return redirect()->back()->with('error', 'Fixed Invest Limit ' . number_format($property_id->amount, 2)); } } } $next_payment_date = Carbon::now()->addHours($property_id->time->time); $trx = strtoupper(Str::random()); $user = auth()->user(); if ($user->balance < $request->amount) { return redirect()->back()->with('error', 'You dont have sufficient balance to invest'); } $user->balance = $user->balance - $request->amount; $user->save(); $deposit = Payment::create([ 'property_id' => $property_id->id, 'gateway_id' => 0, 'user_id' => auth()->id(), 'transaction_id' => $trx, 'amount' => $request->amount, 'rate' => 0, 'charge' => 0, 'final_amount' => $request->amount, 'payment_status' => 1, 'next_payment_date' => $next_payment_date, ]); refferMoney($deposit->user->id, 'invest', $deposit->amount); Transaction::create([ 'trx' => $deposit->transaction_id, 'gateway_id' => $deposit->gateway_id, 'amount' => $deposit->final_amount, 'currency' => $general->site_currency, 'details' => 'Payment Successfull', 'charge' => 0, 'type' => '-', 'gateway_transaction' => '', 'user_id' => auth()->id(), 'payment_status' => 1, ]); sendMail('PAYMENT_SUCCESSFULL', [ 'property' => $deposit->property->property_name, 'trx' => $deposit->transaction_id, 'amount' => $deposit->amount, 'currency' => $general->site_currency, ], $deposit->user); return redirect()->route('user.dashboard')->with('success', 'Successfully Invest'); } public function details($id) { $property = Property::where('status', 1)->findOrFail($id); $moreProperties = Property::where('id', '!=', $property->id)->where('status', 1)->get(); $property->increment('views'); $shareComponent = \Share::page( url()->current(), 'Share', ) ->facebook() ->twitter() ->linkedin() ->telegram() ->whatsapp() ->reddit(); return view('frontend.pages.details', compact('property', 'shareComponent', 'moreProperties')); } public function bookmark(Property $property) { $wishlist = Wishlist::where('user_id', auth()->id())->where('property_id', $property->id)->first(); if (!$wishlist) { Wishlist::create([ 'user_id' => auth()->id(), 'property_id' => $property->id ]); return redirect()->back()->with('success', 'Bookmarked'); } $wishlist->delete(); return redirect()->back()->with('success', 'Bookmark remove'); } public function wishlistProperty() { $pageTitle = 'Wishlist'; $wishlists = Wishlist::where('user_id', auth()->id())->latest()->paginate(); return view('frontend.user.wishlist', compact('wishlists', 'pageTitle')); } public function propertySearch(Request $request) { $properties = Property::where('status', 1) ->where(function ($query) use ($request) { // Search for partial match in JSON field $query->when($request->search, function ($item) use ($request) { $item->whereRaw("JSON_UNQUOTE(JSON_EXTRACT(property, '$.address')) LIKE ?", ['%' . $request->search . '%']); }); // Handle amount filtering based on type if ($request->type == 1) { $query->when($request->amount, function ($item) use ($request) { $item->where('amount', '>=', $request->amount); }); } else { $query->when($request->amount, function ($item) use ($request) { $item->where('amount', '>=', $request->min); })->when($request->max, function ($item) use ($request) { $item->where('amount', '<=', $request->max); }); } }); // Apply sorting based on the order parameter if ($request->order == 'all') { // No additional ordering, return all properties with status 1 $properties = $properties; } elseif ($request->order == 'latest') { $properties = $properties->latest(); } elseif ($request->order == 'low_to_high') { $properties = $properties->orderBy('amount', 'asc'); } else { // High to low ordering $properties = $properties->orderBy('amount', 'desc'); } // Fetch results and count $properties = $properties->get(); $findData = $properties->count(); $pageTitle = "Investment Property"; return view('frontend.pages.investmentproperty', compact('pageTitle', 'properties', 'findData')); } public function Review(Request $request, $id) { $property_exist = Payment::where('property_id', $id)->where('user_id', auth()->id())->where('next_payment_date', '!=', null)->where('payment_status', 1)->first(); $review = Review::where('user_id', auth()->id())->where('property_id', $id)->first(); if ($review) { return redirect()->back()->with('error', 'Already reviewed this property'); } if (!$property_exist) { return redirect()->back()->with('error', 'Please invest to give review'); } $request->validate([ 'rating' => 'required|numeric|between:1,5', 'name' => 'required', 'email' => 'required|email', 'message' => 'required' ]); Review::create([ 'user_id' => auth()->id(), 'property_id' => $id, 'rating' => $request->rating, 'name' => $request->name, 'email' => $request->email, 'message' => $request->message ]); return redirect()->back()->with('success', 'Reviewed Successfully'); } public function reviewUpdate(Request $request, $id) { $request->validate([ 'rating' => 'required|numeric|between:1,5', 'name' => 'required', 'email' => 'required|email', 'message' => 'required' ]); $review = Review::findOrFail($id); $review->update([ 'rating' => $request->rating, 'name' => $request->name, 'email' => $request->email, 'message' => $request->message ]); return redirect()->back()->with('success', 'Reviewed Updated Successfully'); } }