$locale_settings->datatables ]); } /** * Show the form for creating a new resource. * * @return Application|Factory|View */ public function create(GeneralSettings $general_settings) { return view('admin.products.create', [ 'locations' => Location::with('nodes')->get(), 'nests' => Nest::with('eggs')->get(), 'credits_display_name' => $general_settings->credits_display_name ]); } public function clone(Product $product) { return view('admin.products.create', [ 'product' => $product, 'locations' => Location::with('nodes')->get(), 'nests' => Nest::with('eggs')->get(), ]); } /** * Store a newly created resource in storage. * * @param Request $request * @return RedirectResponse */ public function store(Request $request) { $request->validate([ 'name' => 'required|max:30', 'price' => 'required|numeric|max:1000000|min:0', 'memory' => 'required|numeric|max:1000000|min:5', 'cpu' => 'required|numeric|max:1000000|min:0', 'swap' => 'required|numeric|max:1000000|min:0', 'description' => 'required|string|max:191', 'disk' => 'required|numeric|max:1000000|min:5', 'minimum_credits' => 'required|numeric|max:1000000|min:-1', 'io' => 'required|numeric|max:1000000|min:0', 'databases' => 'required|numeric|max:1000000|min:0', 'backups' => 'required|numeric|max:1000000|min:0', 'allocations' => 'required|numeric|max:1000000|min:0', 'nodes.*' => 'required|exists:nodes,id', 'eggs.*' => 'required|exists:eggs,id', 'disabled' => 'nullable', ]); $disabled = ! is_null($request->input('disabled')); $product = Product::create(array_merge($request->all(), ['disabled' => $disabled])); //link nodes and eggs $product->eggs()->attach($request->input('eggs')); $product->nodes()->attach($request->input('nodes')); return redirect()->route('admin.products.index')->with('success', __('Product has been created!')); } /** * Display the specified resource. * * @param Product $product * @return Application|Factory|View */ public function show(Product $product, UserSettings $user_settings, GeneralSettings $general_settings) { return view('admin.products.show', [ 'product' => $product, 'minimum_credits' => $user_settings->min_credits_to_make_server, 'credits_display_name' => $general_settings->credits_display_name ]); } /** * Show the form for editing the specified resource. * * @param Product $product * @return Application|Factory|View */ public function edit(Product $product, GeneralSettings $general_settings) { return view('admin.products.edit', [ 'product' => $product, 'locations' => Location::with('nodes')->get(), 'nests' => Nest::with('eggs')->get(), 'credits_display_name' => $general_settings->credits_display_name ]); } /** * Update the specified resource in storage. * * @param Request $request * @param Product $product * @return RedirectResponse */ public function update(Request $request, Product $product): RedirectResponse { $request->validate([ 'name' => 'required|max:30', 'price' => 'required|numeric|max:1000000|min:0', 'memory' => 'required|numeric|max:1000000|min:5', 'cpu' => 'required|numeric|max:1000000|min:0', 'swap' => 'required|numeric|max:1000000|min:0', 'description' => 'required|string|max:191', 'disk' => 'required|numeric|max:1000000|min:5', 'io' => 'required|numeric|max:1000000|min:0', 'minimum_credits' => 'required|numeric|max:1000000|min:-1', 'databases' => 'required|numeric|max:1000000|min:0', 'backups' => 'required|numeric|max:1000000|min:0', 'allocations' => 'required|numeric|max:1000000|min:0', 'nodes.*' => 'required|exists:nodes,id', 'eggs.*' => 'required|exists:eggs,id', 'disabled' => 'nullable', ]); $disabled = ! is_null($request->input('disabled')); $product->update(array_merge($request->all(), ['disabled' => $disabled])); //link nodes and eggs $product->eggs()->detach(); $product->nodes()->detach(); $product->eggs()->attach($request->input('eggs')); $product->nodes()->attach($request->input('nodes')); return redirect()->route('admin.products.index')->with('success', __('Product has been updated!')); } /** * @param Request $request * @param Product $product * @return RedirectResponse */ public function disable(Product $product) { $product->update(['disabled' => ! $product->disabled]); return redirect()->route('admin.products.index')->with('success', 'Product has been updated!'); } /** * Remove the specified resource from storage. * * @param Product $product * @return RedirectResponse */ public function destroy(Product $product) { $servers = $product->servers()->count(); if ($servers > 0) { return redirect()->back()->with('error', "Product cannot be removed while it's linked to {$servers} servers"); } $product->delete(); return redirect()->back()->with('success', __('Product has been removed!')); } /** * @return JsonResponse|mixed * * @throws Exception|Exception */ public function dataTable() { $query = Product::with(['servers']); return datatables($query) ->addColumn('actions', function (Product $product) { return '
'.csrf_field().' '.method_field('DELETE').'
'; }) ->addColumn('servers', function (Product $product) { return $product->servers()->count(); }) ->addColumn('nodes', function (Product $product) { return $product->nodes()->count(); }) ->addColumn('eggs', function (Product $product) { return $product->eggs()->count(); }) ->addColumn('disabled', function (Product $product) { $checked = $product->disabled == false ? 'checked' : ''; return '
'.csrf_field().' '.method_field('PATCH').'
'; }) ->editColumn('minimum_credits', function (Product $product, UserSettings $user_settings) { return $product->minimum_credits==-1 ? $user_settings->min_credits_to_make_server : $product->minimum_credits; }) ->editColumn('created_at', function (Product $product) { return $product->created_at ? $product->created_at->diffForHumans() : ''; }) ->rawColumns(['actions', 'disabled']) ->make(); } }