/
var
/
www
/
html
/
gnet
/
gnet
/
App
/
Http
/
Controllers
/
Upload File
HOME
<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Http\Request; use App\Models\Category; use App\Models\Brand; use App\Models\Product; use App\Models\ProductType; use App\Models\Tags; use App\Models\Banner; use App\Models\ProductRecommendation; use Butschster\Head\Facades\Meta; use Butschster\Head\Packages\Entities\OpenGraphPackage; use Butschster\Head\Packages\Entities\TwitterCardPackage; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Validator; use function PHPUnit\Framework\isEmpty; class ProductController extends Controller { // public function __construct() // { // $this->middleware('auth'); // } public function fetchProducts(Request $request) { // Get selected brand values from the request $selectedBrands = $request->input('brands'); // Query products based on selected brands $products = Product::whereHas('brand', function ($query) use ($selectedBrands) { $query->whereIn('name', $selectedBrands); })->get(); // Return a view or JSON response with the updated products return view('shop', compact('products')); } public function productList(Request $request, $category = null, $brand = null) { $allCategories = Category::all(); $allBrands = Brand::orderBy('name')->get(); // Dapatkan kategori berdasarkan URL jika disediakan $selectedCategory = $category ? Category::where('url', $category)->first() : null; $category = $category ? Category::where('url', $category)->first() : null; $selectedBrands = (array) $request->input('brands'); // Jika tidak ada kategori yang dipilih, tampilkan produk dari kategori "Atap" $selectedCategory = $selectedCategory ?? Category::where('short_name', 'Atap')->first(); // Dapatkan produk dengan kategori yang sesuai dan mungkin merek $query = Product::with('category')->where('category_id', $selectedCategory->id); if ($selectedBrands) { $query->whereIn('brand_id', Brand::whereIn('name', $selectedBrands)->pluck('id')); } $products = $query->paginate(12); foreach ($products as $product) { if (!is_null($product->productImages->first()) && !is_null($product->productImages->first()->image_hd)) { $product->coverImage = $product->productImages->first()->image_hd; } else { $product->coverImage = ''; } } // Tentukan tab mana yang aktif $activeTab = $selectedCategory->short_name; return view('shop', compact('products', 'allCategories', 'activeTab', 'allBrands', 'selectedBrands', 'selectedCategory', 'category')); } public function productsByCategory(Request $request, $category) { $categories = Category::all(); $brands = Brand::orderBy('name')->get(); // Dapatkan kategori berdasarkan URL jika disediakan $selectedCategory = $category ? Category::where('url', $category)->first() : null; $selectedCategory = $selectedCategory ?? Category::where('short_name', 'Atap')->first(); // Jika kategori tidak ditemukan, tanggapi dengan 404 if (!$selectedCategory) { abort(404, 'Kategori tidak ditemukan'); } $query = Product::with('category')->where('category_id', $selectedCategory->id); $selectedBrands = (array) $request->input('brands'); if (!empty($selectedBrands)) { $query->whereIn('brand_id', Brand::whereIn('name', $selectedBrands)->pluck('id')); } // Dapatkan produk dengan kategori yang sesuai $products = $query->paginate(12); foreach ($products as $product) { if (!is_null($product->productImages->first()) && !is_null($product->productImages->first()->image_hd)) { $product->coverImage = $product->productImages->first()->image_hd; } else { $product->coverImage = ''; } } // Tentukan tab mana yang aktif $activeTab = $selectedCategory->short_name; // Dapatkan semua kategori (untuk menampilkan semua tab) $allCategories = Category::all(); $allBrands = Brand::orderBy('name')->get(); return view('shop', compact('products', 'activeTab', 'allCategories', 'allBrands', 'selectedCategory', 'selectedBrands')); } public function treeview() { $urltambah = '/tambah-master-product'; $category = Category::all(); $brand = Brand::all(); $tags = Tags::all(); $banner = Banner::all(); $product = Product::all(); $create_view = view('create.create-product', compact('category', 'brand')); // $edit_view = view('edit.edit-kategori'); $url_edit = '/master-product/{id}'; $tableHeader = ['Name', 'Url', 'Category', 'Brand', 'Keywords', 'Action']; $url = '/data-product'; $columns = [ ["data" => "name"], ["data" => "url"], ["data" => "category"], ["data" => "brand"], ["data" => "keywords"], ["data" => "action"] ]; return view('admin', compact('urltambah', 'url', 'columns', 'tableHeader', 'category', 'url_edit', 'create_view', 'brand', 'tags', 'banner', 'product')); } public function index() { $urltambah = '/tambah-master-product'; $category = Category::all(); $brand = Brand::all(); $tags = Tags::all(); $banner = Banner::all(); $images = Brand::all(); $product = Product::all(); $create_view = view('create.create-product', compact('category', 'brand')); // ambil 5 artikel terbaru $articles = Article::orderBy('created_at', 'desc') ->take(5) ->get(); // rekomendasi produk (products of your choice) $recommendations = ProductRecommendation::with(['category', 'product']) ->orderBy('category_id', 'asc') ->orderBy('product_id', 'asc') ->get(); $productsByCategory = []; foreach ($recommendations as $recommendation) { $categoryUrl = $recommendation->category->url; if (!isset($productsByCategory[$categoryUrl])) { $productsByCategory[$categoryUrl] = [ 'categoryName' => $recommendation->category->short_name, 'products' => [], ]; } $productsByCategory[$categoryUrl]['products'][] = $recommendation->product; } $url_edit = '/master-product/{id}'; $tableHeader = ['Name', 'Url', 'Category', 'Brand', 'Keywords', 'Action']; $url = '/data-product'; $columns = [ ["data" => "name"], ["data" => "url"], ["data" => "category"], ["data" => "brand"], ["data" => "keywords"], ["data" => "action"] ]; return view('index_admin', compact('urltambah', 'url', 'columns', 'tableHeader', 'category', 'url_edit', 'create_view', 'brand', 'tags', 'banner', 'product', 'images', 'productsByCategory', 'articles')); } public function getData(Request $request) { $draw = $request->get('draw'); $start = $request->get("start"); $rowperpage = $request->get("length"); $columnIndex_arr = $request->get('order'); $columnName_arr = $request->get('columns'); $order_arr = $request->get('order'); $search_arr = $request->get('search'); $columnIndex = $columnIndex_arr[0]['column']; $columnName = $columnName_arr[$columnIndex]['data']; $columnSortOrder = $order_arr[0]['dir']; $searchValue = $search_arr['value']; // Total records $totalRecords = DB::table('product') // ->leftJoin('users', 'users.id', '=', 'product.user_id') ->select('product.*') ->count(); $totalRecordswithFilter = DB::table('product') // ->leftJoin('users', 'users.id', '=', 'product.user_id') ->select('product.*') ->where(function ($query) use ($searchValue) { $query->where('name', 'like', '%' . $searchValue . '%') ->orWhere('url', 'like', '%' . $searchValue . '%') ->orWhere('category_id', 'like', '%' . $searchValue . '%') ->orWhere('brand_id', 'like', '%' . $searchValue . '%') ->orWhere('keywords', 'like', '%' . $searchValue . '%'); }) ->count(); $records = DB::table('product') // ->leftJoin('users', 'users.id', '=', 'product.user_id') ->select( 'product.*', DB::raw("(SELECT (product_category.name) FROM product_category WHERE product.category_id = product_category.id) AS category"), DB::raw("(SELECT (brand.name) FROM brand WHERE product.brand_id = brand.id) AS brand"), DB::raw("CONCAT('<ul class=\"list-inline m-0\"><li class=\"list-inline-item\"><a id=\"openCategoryModalBtnEdit\" href=\"/master-product/', product.id, '/edit\" class=\"btn btn-success shadow btn-xs sharp me-1 btn-edit\" data-toggle=\"modal\" data-target=\"#modal-edit\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"Edit\"><i class=\"fa fa-edit\"></i></a></li><li class=\"list-inline-item\"><a href=\"/master-product/', product.id, '\" class=\"btn btn-danger shadow btn-xs sharp me-1 btn-delete\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"Delete\"><i class=\"fa fa-trash\"></i></a></li></ul>') AS action") ) ->where(function ($query) use ($searchValue) { $query->where('name', 'like', '%' . $searchValue . '%') ->orWhere('url', 'like', '%' . $searchValue . '%') ->orWhere('category_id', 'like', '%' . $searchValue . '%') ->orWhere('brand_id', 'like', '%' . $searchValue . '%') ->orWhere('keywords', 'like', '%' . $searchValue . '%'); }) ->orderBy($columnName, $columnSortOrder) ->skip($start) ->take($rowperpage) ->get(); $data_arr = array(); $sno = $start + 1; foreach ($records as $record) { $id = $record->id; $name = $record->name; $url = $record->url; $category = $record->category; $brand = $record->brand; $keywords = $record->keywords; $data_arr[] = array( "id" => $id, "name" => $name, "url" => $url, "category" => $category, "brand" => $brand, "keywords" => $keywords, "action" => $record->action ); } $response = array( "draw" => intval($draw), "iTotalRecords" => $totalRecords, "iTotalDisplayRecords" => $totalRecordswithFilter, "aaData" => $data_arr ); echo json_encode($response); exit; return response()->json($response); return view('index_admin', compact('create_view', 'news_view', 'banner_view', 'urltambah', 'products', 'brand', 'category', 'tags', 'articles', 'productsByCategory')); } public function show($categoryUrl, $productUrl, $typeUrl = null) { // Jika terautentikasi, redirect ke URL '/product_admin/...' if (auth()->check()) { return redirect()->route('product.edit_details', [ 'categoryUrl' => $categoryUrl, 'productUrl' => $productUrl, ]); } $category = Category::where('url', $categoryUrl)->first(); // Jika kategori tidak ditemukan, tanggapi dengan 404 if (!$category) { abort(404, 'Kategori tidak ditemukan'); } // Dapatkan produk berdasarkan URL dan kategori $product = $category->products() ->with(['brand', 'productImages']) ->where('url', $productUrl) ->first(); // Jika produk tidak ditemukan, tanggapi dengan 404 if (!$product) { abort(404, 'Produk tidak ditemukan'); } // Dapatkan gambar produk $productImages = $product->productImages; // Ambil ID produk yang sedang dibuka $productId = $product->id; // Dapatkan kategori produk yang sedang dibuka $productCategory = $product->category; // Dapatkan produk lain dari kategori yang sama, kecuali produk yang sedang dibuka $relatedProducts = $productCategory->products() ->with('category') ->where('id', '!=', $productId) ->inRandomOrder() ->limit(5) ->get(); foreach ($relatedProducts as $item) { if (!is_null($item->productImages->first()) && !is_null($item->productImages->first()->image_hd)) { $item->coverImage = $item->productImages->first()->image_hd; } else { $item->coverImage = ''; } } $tags = DB::table('tags') ->join('product_tags', 'tags.id', '=', 'product_tags.tags_id') ->where('product_tags.product_id', $product->id) ->pluck('tags.name') ->toArray(); $additionalInfo = [ 'product_info' => $product->additional_info, ]; $catalogueLink = 'https://drive.google.com/file/d/1yt0zlqmk5zEcQUb4eQNZ2J4650B-b_ZI/view'; // PRODUCT TYPE $productTypes = ProductType::where('main_product_id', $productId)->get(); $selectedType = null; if (!is_null($typeUrl)) { $selectedType = ProductType::with('productTypeImages')->where('url', $typeUrl)->first(); // jika tipe produk yang dipilih memiliki image, // maka tampilkan untuk mengganti image produk utama if (!$selectedType->productTypeImages->isEmpty()) { $productImages = $selectedType->productTypeImages; } } // END PRODUCT TYPE // META TAGS $actualLink = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $homeLink = "https://" . $_SERVER["HTTP_HOST"]; $metaTitle = !is_null($selectedType) ? $product->name . ' - ' . $selectedType->name : $product->name; $metaDesc = !is_null($selectedType) ? $selectedType->short_text : $product->short_text; $og = new OpenGraphPackage('Product Details'); $og->setType('product') ->setTitle($metaTitle) ->setDescription($metaDesc ?? '') ->setUrl($actualLink); if (!isEmpty($productImages)) { $og->addImage($homeLink . '/assets/img/products/' . $productImages->first()->image_hd); } $card = new TwitterCardPackage('Product_Details'); $card->setType('summary_large_image') ->setTitle($metaTitle) ->setDescription($metaDesc ?? ''); if (!isEmpty($productImages)) { $card->setImage($homeLink . '/assets/img/products/' . $productImages->first()->image_hd); } Meta::prependTitle($metaTitle) ->setCanonical($actualLink) ->setDescription($metaDesc) ->setKeywords($product->keywords) ->registerPackage($og) ->registerPackage($card); // END META TAGS return view('product-details-fixs', compact('product', 'tags', 'additionalInfo', 'catalogueLink', 'category', 'relatedProducts', 'productImages', 'productTypes', 'selectedType')); } public function cms_edit($categoryUrl, $productUrl, $typeUrl = null) { $category = Category::where('url', $categoryUrl)->first(); // Jika kategori tidak ditemukan, tanggapi dengan 404 if (!$category) { abort(404, 'Kategori tidak ditemukan'); } // Dapatkan produk berdasarkan URL dan kategori $product = $category->products() ->with(['brand', 'productImages']) ->where('url', $productUrl) ->first(); // Dapatkan gambar produk $productImages = $product->productImages; // Jika produk tidak ditemukan, tanggapi dengan 404 if (!$product) { abort(404, 'Produk tidak ditemukan'); } // Ambil ID produk yang sedang dibuka $productId = $product->id; // Dapatkan kategori produk yang sedang dibuka $productCategory = $product->category; // Dapatkan produk lain dari kategori yang sama, kecuali produk yang sedang dibuka $relatedProducts = $productCategory->products() ->with('category') ->where('id', '!=', $productId) ->inRandomOrder() ->limit(5) ->get(); foreach ($relatedProducts as $item) { if (!is_null($item->productImages->first()) && !is_null($item->productImages->first()->image_hd)) { $item->coverImage = $item->productImages->first()->image_hd; } else { $item->coverImage = ''; } } $tags = DB::table('tags') ->join('product_tags', 'tags.id', '=', 'product_tags.tags_id') ->where('product_tags.product_id', $product->id) ->pluck('tags.name') ->toArray(); $additionalInfo = [ 'product_info' => $product->additional_info, ]; $catalogueLink = 'https://drive.google.com/file/d/1yt0zlqmk5zEcQUb4eQNZ2J4650B-b_ZI/view'; // PRODUCT TYPE $productTypes = ProductType::where('main_product_id', $productId)->get(); $selectedType = null; if (!is_null($typeUrl)) { $selectedType = ProductType::with('productTypeImages')->where('url', $typeUrl)->first(); // jika tipe produk yang dipilih memiliki image, // maka tampilkan untuk mengganti image produk utama if (!$selectedType->productTypeImages->isEmpty()) { $productImages = $selectedType->productTypeImages; } } // END PRODUCT TYPE // META TAGS $actualLink = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $homeLink = "https://" . $_SERVER["HTTP_HOST"]; $metaTitle = !is_null($selectedType) ? $product->name . ' - ' . $selectedType->name : $product->name; $metaDesc = !is_null($selectedType) ? $selectedType->short_text : $product->short_text; $og = new OpenGraphPackage('Product Details'); $og->setType('product') ->setTitle($metaTitle) ->setDescription($metaDesc ?? '') ->setUrl($actualLink); if (!isEmpty($productImages)) { $og->addImage($homeLink . '/assets/img/products/' . $productImages->first()->image_hd); } $card = new TwitterCardPackage('Product_Details'); $card->setType('summary_large_image') ->setTitle($metaTitle) ->setDescription($metaDesc ?? ''); if (!isEmpty($productImages)) { $card->setImage($homeLink . '/assets/img/products/' . $productImages->first()->image_hd); } Meta::prependTitle($metaTitle) ->setCanonical($actualLink) ->setDescription($metaDesc) ->setKeywords($product->keywords) ->registerPackage($og) ->registerPackage($card); // END META TAGS return view('product-details-cms', compact('product', 'tags', 'additionalInfo', 'catalogueLink', 'category', 'relatedProducts', 'productImages', 'productTypes', 'selectedType')); } public function create() { $create_view = view('create.create-product'); $news_view = view('create.create-news'); $banner_view = view('create.create-banner'); return view('index_admin', compact('create_view', 'news_view', 'banner_view')); } public function store(Request $request) { $validatedData = Validator::make($request->all(), [ 'name' => 'required', 'url' => 'required', 'category_id' => 'required', 'brand_id' => 'required', 'keywords' => 'nullable', 'short_text' => 'required', 'product_info' => 'required', 'additional_info' => 'required', 'tags' => 'nullable|array', 'wa_text' => 'required', ]); if ($validatedData->fails()) { return response()->json($validatedData->errors(), 422); } $name = $request->input('name'); $url = $request->input('url'); $category_id = $request->input('category_id'); $brand_id = $request->input('brand_id'); $keywords = $request->input('keywords'); $short_text = $request->input('short_text'); $product_info = $request->input('product_info'); $additional_info = $request->input('additional_info'); $wa_text = $request->input('wa_text'); $product = new Product(); // $product->user_id = $user_id; $product->name = $name; $product->url = $url; $product->category_id = $category_id; $product->brand_id = $brand_id; $product->keywords = $keywords; $product->short_text = $short_text; $product->product_info = $product_info; $product->additional_info = $additional_info; $product->wa_text = $wa_text; $product->save(); $tags = $request->input('tags', []); // Assuming tags is an array $product->tags()->attach($tags); return response()->json([ 'success' => true, 'message' => 'Data berhasil ditambahkan.' ]); } public function edit($id) { $product = Product::find($id); $categories = Category::all(); $brand = Brand::all(); return view('edit.edit-product', compact('product', 'categories', 'brand')); } public function update(Request $request, $id) { // get existing stok $product = Product::find($id); $validatedData = Validator::make($request->all(), [ 'name' => 'required', 'url' => 'required', 'category_id' => 'required', 'brand_id' => 'required', 'keywords' => 'nullable', 'short_text' => 'required', 'product_info' => 'required', 'additional_info' => 'required', 'tags' => 'nullable|array', 'wa_text' => 'required', ]); if ($validatedData->fails()) { return response()->json($validatedData->errors(), 422); } $name = $request->input('name'); $url = $request->input('url'); $category_id = $request->input('category_id'); $brand_id = $request->input('brand_id'); $keywords = $request->input('keywords'); $short_text = $request->input('short_text'); $product_info = $request->input('product_info'); $additional_info = $request->input('additional_info'); $wa_text = $request->input('wa_text'); // Update data product $product->name = $name; $product->url = $url; $product->category_id = $category_id; $product->brand_id = $brand_id; $product->keywords = $keywords; $product->short_text = $short_text; $product->product_info = $product_info; $product->additional_info = $additional_info; $product->wa_text = $wa_text; $product->save(); return response()->json([ 'success' => true, 'message' => 'Data stok berhasil diupdate.' ]); } public function destroy($id) { Product::where('id', $id)->delete(); //return response return response()->json([ 'success' => true, 'message' => 'Data Berhasil Dihapus!.', ]); } }