App\Http\Controllers\ProductsController::update PHP Method

update() public method

Update the specified resource in storage.
public update ( integer $id, Illuminate\Http\Request $request ) : Response
$id integer
$request Illuminate\Http\Request
return Response
    public function update($id, Request $request)
    {
        if (!$request->input('type')) {
            return redirect()->back()->withErrors(['induced_error' => [trans('globals.error') . ' ' . trans('globals.induced_error')]])->withInput();
        }
        $rules = $this->rulesByTypes($request, true);
        $order = OrderDetail::where('product_id', $id)->join('orders', 'order_details.order_id', '=', 'orders.id')->first();
        if ($order) {
            unset($rules['name']);
            unset($rules['category_id']);
            unset($rules['condition']);
        }
        $v = Validator::make($request->all(), $rules);
        if ($v->fails()) {
            return redirect()->back()->withErrors($v->errors())->withInput();
        }
        $features = $this->validateFeatures($request->all());
        if (!is_string($features)) {
            return redirect()->back()->withErrors($features)->withInput();
        }
        $product = Product::find($id);
        if (\Auth::id() != $product->user_id) {
            return redirect('products/' . $product->user_id)->withErrors(['feature_images' => [trans('globals.not_access')]]);
        }
        if (!$order) {
            $product->name = $request->input('name');
            $product->category_id = $request->input('category_id');
            $product->condition = $request->input('condition');
        }
        $product->status = $request->input('status');
        $product->description = $request->input('description');
        $product->bar_code = $request->input('bar_code');
        $product->brand = $request->input('brand');
        $product->price = $request->input('price');
        $product->features = $features;
        if ($request->input('type') == 'item') {
            $product->stock = $request->input('stock');
            $product->low_stock = $request->input('low_stock');
            if ($request->input('stock') > 0) {
                $product->status = $request->input('status');
            } else {
                $product->status = 0;
            }
        } else {
            $product->status = $request->input('status');
        }
        $product->save();
        $message = '';
        if ($request->input('type') != 'item') {
            switch ($request->input('type')) {
                case 'key':
                    if ($request->input('key') != '' && Storage::disk('local')->exists('key_code' . $request->input('key'))) {
                        $contents = Storage::disk('local')->get('key_code' . $request->input('key'));
                        $contents = explode("\n", rtrim($contents));
                        $warning = false;
                        $len = 0;
                        foreach ($contents as $row) {
                            $virtualProduct = new virtualProduct();
                            $virtualProduct->product_id = $product->id;
                            $virtualProduct->key = $row;
                            $virtualProduct->status = 'open';
                            $virtualProduct->save();
                            if ($len == 0) {
                                $len = strlen(rtrim($row));
                            } elseif (strlen(rtrim($row)) != $len) {
                                $warning = true;
                            }
                        }
                        $stock = count(VirtualProduct::where('product_id', $product->id)->where('status', 'open')->get()->toArray());
                        $product->stock = $stock;
                        if ($stock == 0) {
                            $product->status = 0;
                        }
                        $product->save();
                        $message = ' ' . trans('product.controller.review_keys');
                        if ($warning) {
                            $message .= ' ' . trans('product.controller.may_invalid_keys');
                        }
                        Storage::disk('local')->deleteDirectory('key_code/' . \Auth::id());
                    }
                    break;
                case 'software':
                    break;
                case 'software_key':
                    break;
                case 'gift_card':
                    break;
            }
        }
        Session::flash('message', trans('product.controller.saved_successfully') . $message);
        return redirect('products/' . $product->id);
    }