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

store() public method

Store a newly created resource in storage.
public store ( Illuminate\Http\Request $request ) : Response
$request Illuminate\Http\Request
return Response
    public function store(Request $request)
    {
        if (!$request->input('type')) {
            return redirect()->back()->withErrors(['induced_error' => [trans('globals.error') . ' ' . trans('globals.induced_error')]]);
        }
        $rules = $this->rulesByTypes($request);
        $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 = new Product();
        $product->name = $request->input('name');
        $product->category_id = $request->input('category_id');
        $product->user_id = \Auth::id();
        $product->description = $request->input('description');
        $product->bar_code = $request->input('bar_code');
        $product->brand = $request->input('brand');
        $product->price = $request->input('price');
        $product->condition = $request->input('condition');
        $product->features = $features;
        $product->type = $request->input('type');
        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':
                    $num = 0;
                    if (!Storage::disk('local')->exists($request->input('key'))) {
                        return redirect()->back()->withErrors(['induced_error' => [trans('globals.file_does_not_exist')]])->withInput();
                        // ->withErrors(array('induced_error'=>array(storage_path().'files/key_code'.$request->input('key'))))->withInput();
                    }
                    $contents = Storage::disk('local')->get($request->input('key'));
                    $contents = explode("\n", rtrim($contents));
                    $warning = false;
                    $len = 0;
                    $virtualProduct = new virtualProduct();
                    $virtualProduct->product_id = $product->id;
                    $virtualProduct->key = 'undefined';
                    $virtualProduct->status = 'cancelled';
                    $virtualProduct->save();
                    foreach ($contents as $row) {
                        $virtualProduct = new virtualProduct();
                        $virtualProduct->product_id = $product->id;
                        $virtualProduct->status = 'open';
                        $virtualProduct->key = $row;
                        $virtualProduct->save();
                        $num++;
                        if ($len == 0) {
                            $len = strlen(rtrim($row));
                        } elseif (strlen(rtrim($row)) != $len) {
                            $warning = true;
                        }
                    }
                    $product->stock = $num;
                    if ($num == 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);
    }