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);
}