⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.63
Server IP:
217.76.53.76
Server:
Linux vmi1397931.contaboserver.net 5.4.0-105-generic #119-Ubuntu SMP Mon Mar 7 18:49:24 UTC 2022 x86_64
Server Software:
Apache
PHP Version:
8.2.27
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
www
/
wwwroot
/
gsm.com.ng
/
app
/
Http
/
Controllers
/
User
/
View File Name :
CardController.php
middleware('auth'); } /** * Show the application dashboard. * * @return \Illuminate\Contracts\Support\Renderable */ // All user cards public function cards() { // Queries $active_plan = Plan::where('plan_id', Auth::user()->plan_id)->first(); $plan = User::where('user_id', Auth::user()->user_id)->first(); $active_plan = json_decode($plan->plan_details); // Check active plan in user if ($active_plan != null) { // Queries $business_cards = DB::table('business_cards') ->join('users', 'business_cards.user_id', '=', 'users.user_id') ->select('users.user_id', 'users.plan_validity', 'business_cards.*') ->where('business_cards.user_id', Auth::user()->user_id)->where('business_cards.card_type', 'vcard')->where('business_cards.status', 1)->where('business_cards.card_status', '!=', 'deleted')->orderBy('business_cards.id', 'desc')->get(); // Queries $settings = Setting::where('status', 1)->first(); return view('user.cards.cards', compact('business_cards', 'settings')); } else { return redirect()->route('user.plans'); } } // All user stores public function stores() { // Queries $active_plan = Plan::where('plan_id', Auth::user()->plan_id)->first(); $plan = User::where('user_id', Auth::user()->user_id)->first(); $active_plan = json_decode($plan->plan_details); // Check active plan in user if ($active_plan != null) { $business_cards = DB::table('business_cards') ->join('users', 'business_cards.user_id', '=', 'users.user_id') ->select('users.user_id', 'users.plan_validity', 'business_cards.*') ->where('business_cards.user_id', Auth::user()->user_id)->where('business_cards.card_type', 'store')->where('business_cards.status', 1)->where('business_cards.card_status', '!=', 'deleted')->orderBy('business_cards.id', 'desc')->get(); // Queries $settings = Setting::where('status', 1)->first(); return view('user.stores.index', compact('business_cards', 'settings')); } else { return redirect()->route('user.plans'); } } // Plans public function plans() { // Queries $plans = DB::table('plans')->where('is_private', 0)->where('status', 1)->get(); $config = DB::table('config')->get(); $free_plan = Transaction::where('user_id', Auth::user()->id)->where('transaction_amount', '0')->count(); $plan = User::where('user_id', Auth::user()->user_id)->first(); $active_plan = json_decode($plan->plan_details); $settings = Setting::where('status', 1)->first(); $currency = Currency::where('iso_code', $config[1]->config_value)->first(); $remaining_days = 0; // Check active plan in user if (isset($active_plan)) { // Get plan validity into current date (remaining days) $plan_validity = \Carbon\Carbon::createFromFormat('Y-m-d H:s:i', Auth::user()->plan_validity); $current_date = Carbon::now(); $remaining_days = $current_date->diffInDays($plan_validity, false); } return view('user.plans.plans', compact('plans', 'settings', 'currency', 'active_plan', 'remaining_days', 'config', 'free_plan')); } // View Card Preview public function viewPreview(Request $request, $id) { // Queries $card_details = DB::table('business_cards')->where('card_id', $id)->where('status', 1)->first(); // Check storage folder if (!File::isDirectory('storage')) { Artisan::call('storage:link'); } // Check specify active card / store in user if (isset($card_details)) { // Check store if ($card_details->card_type == "store") { // Queries $business_card_details = DB::table('business_cards')->where('business_cards.card_id', $card_details->card_id) ->join('users', 'business_cards.user_id', '=', 'users.user_id') ->join('themes', 'business_cards.theme_id', '=', 'themes.theme_id') ->select('business_cards.*', 'users.plan_details', 'themes.theme_code') ->first(); // Get store details if ($business_card_details) { // Get store products $products = StoreProduct::join('categories', 'store_products.category_id', '=', 'categories.category_id') ->where('store_products.card_id', $card_details->card_id) ->where('categories.user_id', $business_card_details->user_id) ->where('store_products.product_status', 'instock') ->where('categories.status', 1); $products = $products->orderBy('store_products.id', 'desc'); if ($request->has('category')) { $products->where('category_name', ucfirst($request->category)); } $products = $products->paginate(12); // Get categories $getCategories = DB::table('store_products')->select('category_id')->groupBy('category_id')->where('card_id', $card_details->card_id)->where('user_id', $business_card_details->user_id); $categories = Category::whereIn('category_id', $getCategories)->get(); // Queries $settings = Setting::where('status', 1)->first(); $config = DB::table('config')->get(); $plan_details = json_decode($business_card_details->plan_details, true); $store_details = json_decode($business_card_details->description, true); // Enquiry button $enquiry_button = '#'; if ($store_details['whatsapp_no'] != null) { $enquiry_button = $store_details['whatsapp_no']; } $whatsapp_msg = $store_details['whatsapp_msg']; $currency = $store_details['currency']; // Static URL $url = URL::to('/') . "/" . strtolower(preg_replace('/\s+/', '-', $card_details->card_url)); $business_name = $card_details->title; $profile = URL::to('/') . "/" . $business_card_details->profile; // Share message $shareContent = $config[30]->config_value; $shareContent = str_replace("{ business_name }", $business_name, $shareContent); $shareContent = str_replace("{ business_url }", $url, $shareContent); $shareContent = str_replace("{ appName }", $config[0]->config_value, $shareContent); // If branding enabled, then show app name. if ($plan_details['hide_branding'] == "1") { $shareContent = str_replace("{ appName }", $business_name, $shareContent); } else { $shareContent = str_replace("{ appName }", $config[0]->config_value, $shareContent); } // PWA $icons = [ '512x512' => [ 'path' => url($business_card_details->profile), 'purpose' => 'any' ] ]; $splash = [ '640x1136' => url($business_card_details->profile), '750x1334' => url($business_card_details->profile), '828x1792' => url($business_card_details->profile), '1125x2436' => url($business_card_details->profile), '1242x2208' => url($business_card_details->profile), '1242x2688' => url($business_card_details->profile), '1536x2048' => url($business_card_details->profile), '1668x2224' => url($business_card_details->profile), '1668x2388' => url($business_card_details->profile), '2048x2732' => url($business_card_details->profile), ]; $shortcuts = [ [ 'name' => $business_card_details->title, 'description' => $business_card_details->sub_title, 'url' => asset($business_card_details->card_url), 'icons' => [ "src" => url($business_card_details->profile), "purpose" => "any" ] ] ]; $fill = [ "name" => $business_card_details->title, "short_name" => $business_card_details->title, "start_url" => asset($business_card_details->card_url), "theme_color" => "#ffffff", "icons" => $icons, "splash" => $splash, "shortcuts" => $shortcuts, ]; $out = $this->generateNew($fill); Storage::disk('public')->put("manifest/" . $business_card_details->card_id . '.json', json_encode($out)); $manifest = url("storage/manifest/" . $business_card_details->card_id . '.json'); $url = urlencode($url); $shareContent = urlencode($shareContent); Session::put('locale', $business_card_details->card_lang); app()->setLocale(Session::get('locale')); $qr_url = "https://chart.googleapis.com/chart?chs=250x250&cht=qr&chl=" . $url; $shareComponent['facebook'] = "https://www.facebook.com/sharer/sharer.php?u=$url"e=$shareContent"; $shareComponent['twitter'] = "https://twitter.com/intent/tweet?text=$shareContent"; $shareComponent['linkedin'] = "https://www.linkedin.com/shareArticle?mini=true&url=$url"; $shareComponent['telegram'] = "https://telegram.me/share/url?text=$shareContent&url=$url"; $shareComponent['whatsapp'] = "https://api.whatsapp.com/send/?phone&text=$shareContent"; // Datas $datas = compact('card_details', 'plan_details', 'store_details', 'categories', 'business_card_details', 'products', 'settings', 'shareComponent', 'shareContent', 'config', 'enquiry_button', 'whatsapp_msg', 'currency', 'manifest'); return view('vcard.'.$business_card_details->theme_code, $datas); } else { alert()->error(trans('Please fill out the basic business details.')); return redirect()->route('user.edit.card', $id); } } else { $enquiry_button = "#"; // Get vcard details $business_card_details = DB::table('business_cards')->where('business_cards.card_id', $card_details->card_id) ->join('users', 'business_cards.user_id', '=', 'users.user_id') ->join('themes', 'business_cards.theme_id', '=', 'themes.theme_id') ->select('business_cards.*', 'users.plan_details', 'themes.theme_code') ->first(); // Check vcard details if ($business_card_details) { // Queries $feature_details = DB::table('business_fields')->where('card_id', $card_details->card_id)->orderBy('id', 'asc')->get(); $service_details = DB::table('services')->where('card_id', $card_details->card_id)->orderBy('id', 'asc')->get(); $product_details = DB::table('vcard_products')->where('card_id', $card_details->card_id)->orderBy('id', 'asc')->get(); $galleries_details = DB::table('galleries')->where('card_id', $card_details->card_id)->orderBy('id', 'asc')->get(); $testimonials = Testimonial::where('card_id', $card_details->card_id)->orderBy('id', 'asc')->get(); $payment_details = DB::table('payments')->where('card_id', $card_details->card_id)->get(); $business_hours = DB::table('business_hours')->where('card_id', $card_details->card_id)->first(); $make_enquiry = DB::table('business_fields')->where('card_id', $card_details->card_id)->where('type', 'wa')->first(); $iframes = DB::table('business_fields')->where('type', 'iframe')->where('card_id', $card_details->card_id)->orderBy('id', 'asc')->get(); $customTexts = DB::table('business_fields')->where('type', 'text')->where('card_id', $card_details->card_id)->orderBy('id', 'asc')->get(); if ($make_enquiry != null) { $enquiry_button = $make_enquiry->content; } // Queries $settings = Setting::where('status', 1)->first(); $config = DB::table('config')->get(); $plan_details = json_decode($business_card_details->plan_details, true); // Static URL $url = URL::to('/') . "/" . strtolower(preg_replace('/\s+/', '-', $card_details->card_url)); $business_name = $card_details->title; $profile = URL::to('/') . "/" . $business_card_details->profile; // PWA $icons = [ '512x512' => [ 'path' => url($business_card_details->profile), 'purpose' => 'any' ] ]; $splash = [ '640x1136' => url($business_card_details->profile), '750x1334' => url($business_card_details->profile), '828x1792' => url($business_card_details->profile), '1125x2436' => url($business_card_details->profile), '1242x2208' => url($business_card_details->profile), '1242x2688' => url($business_card_details->profile), '1536x2048' => url($business_card_details->profile), '1668x2224' => url($business_card_details->profile), '1668x2388' => url($business_card_details->profile), '2048x2732' => url($business_card_details->profile), ]; $shortcuts = [ [ 'name' => $business_card_details->title, 'description' => $business_card_details->sub_title, 'url' => asset($business_card_details->card_url), 'icons' => [ "src" => url($business_card_details->profile), "purpose" => "any" ] ] ]; $fill = [ "name" => $business_card_details->title, "short_name" => $business_card_details->title, "start_url" => asset($business_card_details->card_url), "theme_color" => "#ffffff", "icons" => $icons, "splash" => $splash, "shortcuts" => $shortcuts, ]; $out = $this->generateNew($fill); Storage::disk('public')->put("manifest/" . $business_card_details->card_id . '.json', json_encode($out)); $manifest = url("storage/manifest/" . $business_card_details->card_id . '.json'); // Share message $shareContent = $config[30]->config_value; $shareContent = str_replace("{ business_name }", $business_name, $shareContent); $shareContent = str_replace("{ business_url }", $url, $shareContent); $shareContent = str_replace("{ appName }", $config[0]->config_value, $shareContent); // If branding enabled, then show app name. if ($plan_details['hide_branding'] == "1") { $shareContent = str_replace("{ appName }", $business_name, $shareContent); } else { $shareContent = str_replace("{ appName }", $config[0]->config_value, $shareContent); } $url = urlencode($url); $shareContent = urlencode($shareContent); // Create new lang session Session::put('locale', $business_card_details->card_lang); app()->setLocale(Session::get('locale')); // Generate vcard QR code $qr_url = "https://chart.googleapis.com/chart?chs=250x250&cht=qr&chl=" . $url; $shareComponent['facebook'] = "https://www.facebook.com/sharer/sharer.php?u=$url"e=$shareContent"; $shareComponent['twitter'] = "https://twitter.com/intent/tweet?text=$shareContent"; $shareComponent['linkedin'] = "https://www.linkedin.com/shareArticle?mini=true&url=$url"; $shareComponent['telegram'] = "https://telegram.me/share/url?text=$shareContent&url=$url"; $shareComponent['whatsapp'] = "https://api.whatsapp.com/send/?phone&text=$shareContent"; // Datas $datas = compact('card_details', 'plan_details', 'business_card_details', 'feature_details', 'service_details', 'product_details', 'galleries_details', 'testimonials', 'payment_details', 'business_hours', 'settings', 'shareComponent', 'shareContent', 'config', 'enquiry_button', 'iframes', 'customTexts', 'manifest'); return view('vcard.'.$business_card_details->theme_code, $datas); } else { alert()->error(trans('Please fill out the basic business details.')); return redirect()->route('user.company.details', $id); } } } else { http_response_code(404); return view('errors.404'); } } // Choose a card type public function chooseCardType() { // Queries $settings = Setting::where('status', 1)->first(); $cards = BusinessCard::where('user_id', Auth::user()->user_id)->where('card_type', 'vcard')->where('card_status', 'activated')->count(); // Active plan details in user $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Check unlimited cards if ($plan_details->no_of_vcards == 999) { $no_cards = 999999; } else { $no_cards = $plan_details->no_of_vcards; } // Chech vcard creation limit if ($cards < $no_cards) { return view('user.cards.choose-a-card', compact('settings', 'plan_details')); } else { alert()->error(trans('The maximum limit has been exceeded. Please upgrade your plan.')); return redirect()->route('user.cards'); } } // Create Card public function CreateCard() { // Queries $themes = Theme::where('theme_description', 'vCard')->where('status', 1)->orderBy('id', 'asc')->get(); $settings = Setting::where('status', 1)->first(); $cards = BusinessCard::where('user_id', Auth::user()->user_id)->where('card_type', 'vcard')->where('card_status', 'activated')->count(); // Active plan details in user $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); $config = DB::table('config')->get(); // Check unlimited cards if ($plan_details->no_of_vcards == 999) { $no_cards = 999999; } else { $no_cards = $plan_details->no_of_vcards; } // Chech vcard creation limit if ($cards < $no_cards) { return view('user.cards.create-card', compact('themes', 'settings', 'plan_details', 'config')); } else { alert()->error(trans('The maximum limit has been exceeded. Please upgrade your plan.')); return redirect()->route('user.cards'); } } // Save card public function saveBusinessCard(Request $request) { // Validator $validator = Validator::make($request->all(), [ 'theme_id' => 'required', 'card_lang' => 'required', 'logo' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:' . env("SIZE_LIMIT") . '', 'title' => 'required', 'cover_type' => 'required', 'subtitle' => 'required', 'description' => 'required', ]); // Validate alert if ($validator->fails()) { return back()->with('toast_error', $validator->messages()->all()[0])->withInput(); } // Unique card ID (personalized_link) $cardId = uniqid(); if ($request->link) { $personalized_link = $request->link; } else { $personalized_link = $cardId; } // Queries $cards = BusinessCard::where('user_id', Auth::user()->user_id)->where('card_type', 'vcard')->where('card_status', 'activated')->count(); $user_details = User::where('user_id', Auth::user()->user_id)->first(); $plan_details = json_decode($user_details->plan_details, true); // Card URL $card_url = strtolower(preg_replace('/\s+/', '-', $personalized_link)); $current_card = BusinessCard::where('card_url', $card_url)->count(); // Ger purchased plan details if ($plan_details['no_of_vcards'] == 999) { $no_cards = 999999; } else { $no_cards = $plan_details['no_of_vcards']; } // Check card URL is available if ($current_card == 0) { // Checking, If the user plan allowed card creation is less than created card. if ($cards < $no_cards) { try { // Check banner image $cover = null; if ($request->has('cover')) { // Upload image $UploadExtension = $request->cover->extension(); if ($UploadExtension == "jpeg" || $UploadExtension == "png" || $UploadExtension == "jpg" || $UploadExtension == "gif" || $UploadExtension == "svg") { $cover = '/backend/img/vCards/' . 'IMG-' . uniqid() . '-' . str_replace(' ', '-', $request->cover->getClientOriginalName()); $request->cover->move(public_path('backend/img/vCards'), $cover); } } // Upload image $UploadExtension = $request->logo->extension(); if ($UploadExtension == "jpeg" || $UploadExtension == "png" || $UploadExtension == "jpg" || $UploadExtension == "gif" || $UploadExtension == "svg") { $logo = '/backend/img/vCards/' . 'IMG-' . uniqid() . '-' . str_replace(' ', '-', $request->logo->getClientOriginalName()); $request->logo->move(public_path('backend/img/vCards'), $logo); //Cover Type - Validation $cover_type = "none"; // Default Value if(in_array($request->cover_type, ["youtube","youtube-ap","vimeo","vimeo-ap","photo"], TRUE)){ $cover_type = $request->cover_type; // Cover URL no need to update for photo type. if($request->cover_type != "photo"){ $cover = $request->cover_url; } } // Save $card = new BusinessCard(); $card->card_id = $cardId; $card->user_id = Auth::user()->user_id; $card->type = $request->type; $card->theme_id = $request->theme_id; $card->card_lang = $request->card_lang; $card->cover_type = $cover_type; $card->cover = $cover; $card->profile = $logo; $card->card_url = $card_url; $card->card_type = 'vcard'; $card->title = $request->title; $card->sub_title = $request->subtitle; $card->description = $request->description; $card->save(); } else { alert()->error(trans('Invalid image format')); return redirect()->route('user.create.card'); } alert()->success(trans('New Business Card Created Successfully!')); return redirect()->route('user.social.links', $cardId); } catch (\Exception $th) { alert()->error(trans('Sorry, the personalized link was already registered.')); return redirect()->route('user.create.card'); } } else { alert()->error(trans('Maximum card creation limit is exceeded, Please upgrade your plan to add more card(s).')); return redirect()->route('user.create.card'); } } else { alert()->error(trans('Sorry, the personalized link was already registered.')); return redirect()->route('user.create.card'); } } // Social Links public function socialLinks() { // Queries $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $settings = Setting::where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); return view('user.cards.social-links', compact('plan_details', 'settings')); } // Save social links public function saveSocialLinks(Request $request, $id) { // Queries $business_card = BusinessCard::where('card_id', $id)->first(); // Check business card if ($business_card == null) { return view('errors.404'); } else { // Check icon if ($request->icon != null) { // Delete previous links BusinessField::where('card_id', $id)->delete(); // Get plan details $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Check social links limit if (count($request->icon) <= $plan_details->no_of_links) { // Check dynamic fields foreach for ($i = 0; $i < count($request->icon); $i++) { // Check dynamic fields if (isset($request->icon[$i]) && isset($request->label[$i]) && isset($request->value[$i])) { $customContent = $request->value[$i]; // Youtube if ($request->type[$i] == 'youtube') { $customContent = str_replace('https://www.youtube.com/watch?v=', '', $request->value[$i]); } // Google Map if ($request->type[$i] == 'map') { if (substr($request->value[$i], 0, 3) == 'pb=') { $customContent = $request->value[$i]; } else { $customContent = str_replace('
card_id = $id; $field->type = $request->type[$i]; $field->icon = $request->icon[$i]; $field->label = $request->label[$i]; $field->content = $customContent; $field->position = $i + 1; $field->save(); } else { alert()->error(trans('At least add one bio link.')); return redirect()->route('user.social.links', $id); } } // Check type if ($business_card->type == "personal") { alert()->success(trans('Bio links are updated.')); return redirect()->route('user.cards'); } else { alert()->success(trans('Bio links are updated.')); return redirect()->route('user.payment.links', $id); } } else { alert()->error(trans('The maximum limit was exceeded.')); return redirect()->route('user.social.links', $id); } } else { alert()->error(trans('At least add one bio link.')); return redirect()->route('user.social.links', $id); } } } // Payment links public function paymentLinks() { // Queries $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $settings = Setting::where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); return view('user.cards.payment-links', compact('plan_details', 'settings')); } // Save payment links public function savePaymentLinks(Request $request, $id) { // Queries $business_card = BusinessCard::where('card_id', $id)->first(); // Check business card if ($business_card == null) { return view('errors.404'); } else { // Check icon if ($request->icon != null) { // Delete previous payments links Payment::where('card_id', $id)->delete(); // Get plan details $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Check payment links limit if (count($request->icon) <= $plan_details->no_of_payments) { // Check dynamic fields foreach for ($i = 0; $i < count($request->icon); $i++) { // Check dynamic fields if (isset($request->icon[$i]) && isset($request->label[$i]) && isset($request->value[$i])) { // Save $payment = new Payment(); $payment->card_id = $id; $payment->type = $request->type[$i]; $payment->icon = $request->icon[$i]; $payment->label = $request->label[$i]; $payment->content = $request->value[$i]; $payment->position = $i + 1; $payment->save(); } else { alert()->error(trans('Please fill out all required fields.')); return redirect()->route('user.payment.links', $id); } } alert()->success(trans('Payment links are updated.')); return redirect()->route('user.services', $id); } else { alert()->error(trans('You have reached the plan limit!')); return redirect()->route('user.payment.links', $id); } } else { alert()->success(trans('Payment links are updated.')); return redirect()->route('user.services', $id); } } } // Services public function services() { // Queries $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); $media = Medias::where('user_id', Auth::user()->user_id)->orderBy('id', 'desc')->get(); $settings = Setting::where('status', 1)->first(); return view('user.cards.services', compact('plan_details', 'settings', 'media')); } // Save services public function saveServices(Request $request, $id) { // Queries $business_card = BusinessCard::where('card_id', $id)->first(); // Check business card if ($business_card == null) { return view('errors.404'); } else { // Get plan details $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Check dynamic fields if ($request->service_name != null) { // Check services limit if (count($request->service_name) <= $plan_details->no_of_services) { // Check dynamic fields foreach for ($i = 0; $i < count($request->service_name); $i++) { // Save $service = new Service(); $service->card_id = $id; $service->service_name = $request->service_name[$i]; $service->service_image = $request->service_image[$i]; $service->service_description = $request->service_description[$i]; $service->enable_enquiry = $request->enquiry[$i]; $service->save(); } alert()->success(trans('Service details are updated.')); return redirect()->route('user.vproducts', $id); } else { alert()->error(trans('You have reached the plan limit!')); return redirect()->route('user.services', $id); } } else { //Skipping... alert()->success(trans('Service details are updated.')); return redirect()->route('user.vproducts', $id); } } } // Products public function vProducts() { // Queries $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); $media = Medias::where('user_id', Auth::user()->user_id)->orderBy('id', 'desc')->get(); $currencies = Currency::get(); $settings = Setting::where('status', 1)->first(); return view('user.cards.products', compact('plan_details', 'settings', 'media', 'currencies')); } // Save vCard Products public function saveVProducts(Request $request, $id) { // Queries $business_card = BusinessCard::where('card_id', $id)->first(); // Check business card if ($business_card == null) { return view('errors.404'); } else { // Get plan details $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Check icon if ($request->badge != null) { // Check products (vcard) limit if (count($request->badge) <= $plan_details->no_of_vcard_products) { // Delete previous products VcardProduct::where('card_id', $id)->delete(); // Check dynamic fields foreach for ($i = 0; $i < count($request->badge); $i++) { // Save $product = new VcardProduct(); $product->card_id = $id; $product->product_id = uniqid(); $product->badge = $request->badge[$i]; $product->currency = $request->currency[$i]; $product->product_image = $request->product_image[$i]; $product->product_name = $request->product_name[$i]; $product->product_subtitle = $request->product_subtitle[$i]; $product->regular_price = $request->regular_price[$i]; $product->sales_price = $request->sales_price[$i]; $product->product_status = $request->product_status[$i]; $product->save(); } alert()->success(trans('Products are added.')); return redirect()->route('user.galleries', $id); } else { alert()->error(trans('You have reached the plan limit!')); return redirect()->route('user.vproducts', $id); } } else { alert()->success(trans('Products are updated.')); return redirect()->route('user.galleries', $id); } } } // Galleries public function galleries() { // Queries $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); $media = Medias::where('user_id', Auth::user()->user_id)->orderBy('id', 'desc')->get(); $settings = Setting::where('status', 1)->first(); return view('user.cards.galleries', compact('plan_details', 'media', 'settings')); } // Save Gallery Images public function saveGalleries(Request $request, $id) { // Queries $business_card = BusinessCard::where('card_id', $id)->first(); // Check business card if ($business_card == null) { return view('errors.404'); } else { // Get plan details $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Check gallery caption if ($request->caption != null) { // Check gallery limit if (count($request->caption) <= $plan_details->no_of_galleries) { // Delete previous gallery images Gallery::where('card_id', $id)->delete(); // Check dynamic fields foreach for ($i = 0; $i < count($request->caption); $i++) { // Save $gallery = new Gallery(); $gallery->card_id = $id; $gallery->caption = $request->caption[$i]; $gallery->gallery_image = $request->gallery_image[$i]; $gallery->save(); } alert()->success(trans('Gallery images are updated.')); return redirect()->route('user.testimonials', $id); } else { alert()->error(trans('You have reached the plan limit!')); return redirect()->route('user.galleries', $id); } } else { alert()->success(trans('Gallery images are updated.')); return redirect()->route('user.testimonials', $id); } } } // Testimonials public function testimonials() { // Queries $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); $media = Medias::where('user_id', Auth::user()->user_id)->orderBy('id', 'desc')->get(); $settings = Setting::where('status', 1)->first(); return view('user.cards.testimonials', compact('plan_details', 'media', 'settings')); } // Save Testimonial public function saveTestimonial(Request $request, $id) { // Queries $business_card = BusinessCard::where('card_id', $id)->first(); // Check business card if ($business_card == null) { return view('errors.404'); } else { // Get plan details $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Check Testimonial review if ($request->review != null) { // Check Testimonial limit if (count($request->review) <= $plan_details->no_testimonials) { // Delete previous Testimonials Testimonial::where('card_id', $id)->delete(); // Check dynamic fields foreach for ($i = 0; $i < count($request->review); $i++) { // Save $testimonial = new Testimonial(); $testimonial->card_id = $id; $testimonial->reviewer_name = $request->reviewer_name[$i]; $testimonial->reviewer_image = $request->reviewer_image[$i]; $testimonial->review_subtext = $request->review_subtext[$i]; $testimonial->review = $request->review[$i]; $testimonial->save(); } // Check business hours is "ENABLED" if ($plan_details->business_hours == 1) { alert()->success(trans('Testimonials are updated.')); return redirect()->route('user.business.hours', $id); } elseif ($plan_details->contact_form == 1) { alert()->success(trans('Testimonials are updated.')); return redirect()->route('user.contact.form', $id); } elseif ($plan_details->password_protected == 1 || $plan_details->advanced_settings == 1) { // Check contact form is "ENABLED" alert()->success(trans('Testimonials are updated.')); return redirect()->route('user.advanced.setting', $id); } else { alert()->success(trans('Your virtual business card is ready.')); return redirect()->route('user.cards'); } } else { alert()->error(trans('You have reached the plan limit!')); return redirect()->route('user.testimonials', $id); } } else { // Check business hours is "ENABLED" if ($plan_details->business_hours == 1) { alert()->success(trans('Testimonials are updated.')); return redirect()->route('user.business.hours', $id); } elseif ($plan_details->contact_form == 1) { // Check contact form is "ENABLED" alert()->success(trans('Testimonials are updated.')); return redirect()->route('user.contact.form', $id); } elseif ($plan_details->password_protected == 1 || $plan_details->advanced_settings == 1) { // Check contact form is "ENABLED" alert()->success(trans('Testimonials are updated.')); return redirect()->route('user.advanced.setting', $id); } else { alert()->success(trans('Your virtual business card is ready.')); return redirect()->route('user.cards'); } } } } // Business Hours public function businessHours() { // Queries $settings = Setting::where('status', 1)->first(); return view('user.cards.business-hours', compact('settings')); } // Save business hours public function saveBusinessHours(Request $request, $id) { // Queries $business_card = BusinessCard::where('card_id', $id)->first(); // Get plan details $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Check business card if ($business_card == null) { return view('errors.404'); } else { // Check closed timing if ($request->monday_closed == "on") { $monday = "Closed"; } else { $monday = $request->monday_open . " - " . $request->monday_closing; } if ($request->tuesday_closed == "on") { $tuesday = "Closed"; } else { $tuesday = $request->tuesday_open . " - " . $request->tuesday_closing; } if ($request->wednesday_closed == "on") { $wednesday = "Closed"; } else { $wednesday = $request->wednesday_open . " - " . $request->wednesday_closing; } if ($request->thursday_closed == "on") { $thursday = "Closed"; } else { $thursday = $request->thursday_open . " - " . $request->thursday_closing; } if ($request->friday_closed == "on") { $friday = "Closed"; } else { $friday = $request->friday_open . " - " . $request->friday_closing; } if ($request->saturday_closed == "on") { $saturday = "Closed"; } else { $saturday = $request->saturday_open . " - " . $request->saturday_closing; } if ($request->sunday_closed == "on") { $sunday = "Closed"; } else { $sunday = $request->sunday_open . " - " . $request->sunday_closing; } if ($request->always_open == "on") { $always_open = "Opening"; } else { $always_open = "Closed"; } if ($request->is_display == "on") { $is_display = 0; } else { $is_display = 1; } // Save $businessHours = new BusinessHour(); $businessHours->card_id = $id; $businessHours->Monday = $monday; $businessHours->Tuesday = $tuesday; $businessHours->Wednesday = $wednesday; $businessHours->Thursday = $thursday; $businessHours->Friday = $friday; $businessHours->Saturday = $saturday; $businessHours->Sunday = $sunday; $businessHours->is_always_open = $always_open; $businessHours->is_display = $is_display; $businessHours->save(); // Check contact form is "ENABLED" if ($plan_details->contact_form == 1) { alert()->success(trans('Business hours are updated.')); return redirect()->route('user.contact.form', $id); } elseif ($plan_details->password_protected == 1 || $plan_details->advanced_settings == 1) { // Check contact form is "ENABLED" alert()->success(trans('Business hours are updated.')); return redirect()->route('user.advanced.setting', $id); } else { alert()->success(trans('Your virtual business card is ready.')); return redirect()->route('user.cards'); } } } // Enquiry form public function contactForm() { // Queries $settings = Setting::where('status', 1)->first(); return view('user.cards.contact', compact('settings')); } // Update contact form public function saveContactForm(Request $request, $id) { // Queries $business_card = BusinessCard::where('card_id', $id)->first(); // Check business card $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Check business card if ($business_card == null) { return view('errors.404'); } else { // Check contact form is "enabled" if ($request->contact_form == "on") { $receiveEmail = null; } else { $receiveEmail = $request->receive_email; } // Update Enquiy Email BusinessCard::where('card_id', $id)->update([ 'enquiry_email' => $receiveEmail, ]); if ($plan_details->password_protected == 1 || $plan_details->advanced_settings == 1) { // Check contact form is "ENABLED" alert()->success(trans('Contact form updated.')); return redirect()->route('user.advanced.setting', $id); } else { alert()->success(trans('Your virtual business card is ready.')); return redirect()->route('user.cards'); } } } // Advanced settings public function advancedSetting(Request $request, $id) { // Queries $settings = Setting::where('status', 1)->first(); $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); return view('user.cards.advanced-settings', compact('plan_details', 'settings')); } // Save Advanced settings public function saveAdvancedSetting(Request $request, $id) { // Queries $business_card = BusinessCard::where('card_id', $id)->first(); // Check business card if ($business_card == null) { return view('errors.404'); } else { // Update BusinessCard::where('card_id', $id)->update([ 'password' => $request->password, 'custom_css' => $request->custom_css, 'custom_js' => $request->custom_js, ]); alert()->success(trans('Your virtual business card is updated!')); return redirect()->route('user.cards'); } } // Enquiries public function enquiries(Request $request, $id) { // Queries $settings = Setting::where('status', 1)->first(); // Get plan details $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Enquiries $businessEnquries = ContactForm::where('card_id', $id)->limit($plan_details->no_of_enquires)->orderBy('id', 'desc')->get(); return view('user.cards.enquiries', compact('businessEnquries', 'settings', 'plan_details')); } // Visitors public function visitors(Request $request, $id) { // Queries $settings = Setting::where('status', 1)->first(); // Enquiries $visitors = Visitor::where('card_id', $id)->orderBy('id', 'desc')->get(); return view('user.cards.visitors', compact('visitors', 'settings')); } // Skip business hours public function skipAndSave() { // Redirect alert()->success(trans('Your virtual business card is ready.')); return redirect()->route('user.cards'); } // Card Status Page public function cardStatus(Request $request, $id) { // Queries $businessCard = BusinessCard::where('card_id', $id)->first(); // Check business card if ($businessCard == null) { return view('errors.404'); } else { // Queries $business_card = BusinessCard::where('user_id', Auth::user()->user_id)->where('card_id', $id)->first(); // Check business card if ($business_card == null) { return view('errors.404'); } else { // Check active cards if ($business_card->card_status == 'inactive') { // Queries $plan = User::where('user_id', Auth::user()->user_id)->first(); $active_plan = json_decode($plan->plan_details); // vCard if ($business_card->card_type == "vcard") { // vCard $no_of_services = Service::where('card_id', $id)->count(); $no_of_vcard_products = VcardProduct::where('card_id', $id)->count(); $no_of_links = BusinessField::where('card_id', $id)->count(); $no_of_payments = Payment::where('card_id', $id)->count(); $no_of_galleries = Gallery::where('card_id', $id)->count(); $business_hours = BusinessHour::where('card_id', $id)->count(); $contact_form = ContactForm::where('card_id', $id)->count(); // Check vcard / store limitation if ($no_of_services <= $active_plan->no_of_services && $no_of_vcard_products <= $active_plan->no_of_vcard_products && $no_of_galleries <= $active_plan->no_of_galleries && $no_of_links <= $active_plan->no_of_links && $no_of_payments <= $active_plan->no_of_payments && $business_hours <= $active_plan->business_hours && $contact_form <= $active_plan->contact_form) { // Queries (vCards) $cards = BusinessCard::where('user_id', Auth::user()->user_id)->where('card_type', 'vcard')->where('card_status', 'activated')->count(); // Get plan details in user $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Number of vcards limitation if ($cards < $plan_details->no_of_vcards) { // Update (vCard) BusinessCard::where('user_id', Auth::user()->user_id)->where('card_type', 'vcard')->where('card_id', $id)->update([ 'card_status' => 'activated', ]); alert()->success(trans('Your vcard activated.')); return redirect()->route('user.cards'); } else { alert()->error(trans('The maximum limit has been exceeded. Please upgrade your plan.')); return redirect()->route('user.cards'); } } else { // Queries $cards = BusinessCard::where('user_id', Auth::user()->user_id)->where('card_type', 'vcard')->where('card_status', 'activated')->count(); // Get plan details in user $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Number of vcards limitation if ($cards < $plan_details->no_of_vcards) { return redirect()->route('user.edit.card', $id)->with('errors', 'You have downgraded your plan. Please re-configure this vcard as per your current plan features.'); } else { alert()->error(trans('The maximum limit has been exceeded. Please upgrade your plan.')); return redirect()->route('user.cards'); } } } // Store if ($business_card->card_type == "store") { // Store $no_of_categories = Category::where('user_id', auth::user()->user_id)->count(); $no_of_store_products = StoreProduct::where('card_id', $id)->count(); // Check vcard / store limitation if ($no_of_categories <= $active_plan->no_of_categories && $no_of_store_products <= $active_plan->no_of_store_products) { // Queries (Stores) $stores = BusinessCard::where('user_id', Auth::user()->user_id)->where('card_type', 'store')->where('card_status', 'activated')->count(); // Get plan details in user $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Number of stores limitation if ($stores < $plan_details->no_of_stores) { // Update (Stores) BusinessCard::where('user_id', Auth::user()->user_id)->where('card_type', 'store')->where('card_id', $id)->update([ 'card_status' => 'activated', ]); alert()->success(trans('Your store link was activated.')); return redirect()->route('user.stores'); } else { alert()->error(trans('The maximum limit has been exceeded. Please upgrade your plan.')); return redirect()->route('user.stores'); } } else { // Queries (Stores) $stores = BusinessCard::where('user_id', Auth::user()->user_id)->where('card_type', 'store')->where('card_status', 'activated')->count(); // Get plan details in user $plan = DB::table('users')->where('user_id', Auth::user()->user_id)->where('status', 1)->first(); $plan_details = json_decode($plan->plan_details); // Number of stores limitation if ($stores < $plan_details->no_of_stores) { return redirect()->route('user.edit.store', $id)->with('errors', 'You have downgraded your plan. Please re-configure this vcard as per your current plan features.'); } else { alert()->error(trans('The maximum limit has been exceeded. Please upgrade your plan.')); return redirect()->route('user.stores'); } } } } else { // Update BusinessCard::where('user_id', Auth::user()->user_id)->where('card_id', $id)->update([ 'card_status' => 'inactive', ]); alert()->success(trans('Deactivated.')); return redirect()->back(); } } } } // Checkout Page public function checkout(Request $request, $id) { // Selected plan $selected_plan = Plan::where('plan_id', $id)->where('status', 1)->first(); // Check selected plan if ($selected_plan == null) { alert()->error(trans('Your current plan is not available. Please choose a different plan.')); return redirect()->route('user.plans'); } else { // Queries $config = DB::table('config')->get(); // Check selected plan if ($selected_plan == null) { return view('errors.404'); } else { // Check selected plan is "0" if ((int) $selected_plan->plan_price == 0) { // Check billing details is filled if (Auth::user()->billing_name == "") { return redirect()->route('user.billing', $id); } else { // Generate invoice details $invoice_details = []; $invoice_details['from_billing_name'] = $config[16]->config_value; $invoice_details['from_billing_address'] = $config[19]->config_value; $invoice_details['from_billing_city'] = $config[20]->config_value; $invoice_details['from_billing_state'] = $config[21]->config_value; $invoice_details['from_billing_zipcode'] = $config[22]->config_value; $invoice_details['from_billing_country'] = $config[23]->config_value; $invoice_details['from_vat_number'] = $config[26]->config_value; $invoice_details['from_billing_phone'] = $config[18]->config_value; $invoice_details['from_billing_email'] = $config[17]->config_value; $invoice_details['to_billing_name'] = $request->billing_name; $invoice_details['to_billing_address'] = $request->billing_address; $invoice_details['to_billing_city'] = $request->billing_city; $invoice_details['to_billing_state'] = $request->billing_state; $invoice_details['to_billing_zipcode'] = $request->billing_zipcode; $invoice_details['to_billing_country'] = $request->billing_country; $invoice_details['to_billing_phone'] = $request->billing_phone; $invoice_details['to_billing_email'] = $request->billing_email; $invoice_details['to_vat_number'] = $request->vat_number; $invoice_details['tax_name'] = $config[24]->config_value; $invoice_details['tax_type'] = $config[14]->config_value; $invoice_details['tax_value'] = $config[25]->config_value; $invoice_details['invoice_amount'] = 0; $invoice_details['subtotal'] = 0; $invoice_details['tax_amount'] = 0; // Save new transaction $transaction = new Transaction(); $transaction->gobiz_transaction_id = uniqid(); $transaction->transaction_date = now(); $transaction->transaction_id = uniqid(); $transaction->user_id = Auth::user()->id; $transaction->plan_id = $selected_plan->plan_id; $transaction->desciption = $selected_plan->plan_name . " Plan"; $transaction->payment_gateway_name = "FREE"; $transaction->transaction_amount = $selected_plan->plan_price; $transaction->transaction_currency = $config[1]->config_value; $transaction->invoice_details = json_encode($invoice_details); $transaction->payment_status = "SUCCESS"; $transaction->save(); // Add new plan validity $plan_validity = Carbon::now(); $plan_validity->addDays($selected_plan->validity); // Update validity in user User::where('user_id', Auth::user()->user_id)->update([ 'plan_id' => $id, 'term' => "9999", 'plan_validity' => $plan_validity, 'plan_activation_date' => now(), 'plan_details' => $selected_plan, ]); // Making all cards inactive, For Plan change BusinessCard::where('user_id', Auth::user()->user_id)->update([ 'card_status' => 'inactive', ]); alert()->success(trans("Hurray! Your FREE plan has been activated.")); return redirect()->route('user.plans'); } } else { // Queries $settings = Setting::where('status', 1)->first(); $config = DB::table('config')->get(); $currency = Currency::where('iso_code', $config[1]->config_value)->first(); $gateways = Gateway::where('is_status', 'enabled')->where('status', 1)->get(); $plan_price = $selected_plan->plan_price; $tax = $config[25]->config_value; $total = ((float) ($plan_price) * (float) ($tax) / 100) + (float) ($plan_price); return view('user.checkout.checkout', compact('settings', 'config', 'currency', 'selected_plan', 'gateways', 'total')); } } } } // Delete card public function deleteCard(Request $request) { // Delete BusinessCard::where('user_id', Auth::user()->user_id)->where('card_id', $request->query('id'))->update([ 'card_status' => 'deleted', ]); alert()->success(trans('Card Deleted!')); return redirect()->route('user.cards'); } // Check unique card / store link public function checkLink(Request $request) { // Requested link $link = $request->link; $is_present = DB::table('business_cards')->where('card_url', $link)->count(); $resp = []; $resp['status'] = 'failed'; // Check if ($is_present == 0) { $resp['status'] = 'success'; } else { $resp['status'] = 'failed'; } return response()->json($resp); } public function searchTheme(Request $request) { $query = $request->get('query'); $type = $request->get('type'); $cards = Theme::where('theme_name', 'LIKE', '%' . $query . '%')->where('theme_description', $type)->where('status', 1)->get(); return response()->json($cards); } // Generate manifest json public function generateNew($fill) { $basicManifest = [ 'name' => $fill['name'], 'short_name' => $fill['short_name'], 'start_url' => $fill['start_url'], 'background_color' => '#ffffff', 'theme_color' => '#000000', 'display' => 'standalone', 'orientation' => "any", 'status_bar' => "black", 'splash' => $fill['splash'] ]; foreach ($fill['icons'] as $size => $file) { $fileInfo = pathinfo($file['path']); $basicManifest['icons'][] = [ 'src' => $file['path'], 'type' => 'image/' . $fileInfo['extension'], 'sizes' => $size, 'purpose' => $file['purpose'] ]; } if ($fill['shortcuts']) { foreach ($fill['shortcuts'] as $shortcut) { if (array_key_exists("icons", $shortcut)) { $fileInfo = pathinfo($shortcut['icons']['src']); $icon = [ 'src' => $shortcut['icons']['src'], 'type' => 'image/' . $fileInfo['extension'], 'purpose' => $shortcut['icons']['purpose'] ]; } else { $icon = []; } $basicManifest['shortcuts'][] = [ 'name' => trans($shortcut['name']), 'description' => trans($shortcut['description']), 'url' => $shortcut['url'], 'icons' => [ $icon ] ]; } } return $basicManifest; } }