public function actionGetPhotoInfoList($sn, $page = 1, $numPerPage = 50, $tagId = 0) { $start = ($page - 1) * $numPerPage; if ($tagId == 0) { $imageList = Image::find()->limit($numPerPage)->offset($start)->asArray()->all(); } else { $imageList = Image::find()->leftJoin('image_tag', 'image.id = image_tag.imageId')->where(['image_tag.tagId' => $tagId])->limit($numPerPage)->offset($start)->asArray()->all(); } $imageIdList = []; foreach ($imageList as $image) { $imageIdList[] = $image['id']; } //是否收藏 $favoriteList = Favorite::find()->where(['isDelete' => 0, 'imageId' => $imageIdList])->asArray()->all(); $favoriteMap = []; foreach ($favoriteList as $favorite) { $favoriteMap[$favorite['imageId']] = true; } $output = []; //更改链接 foreach ($imageList as &$image) { $t = []; $t['id'] = $image['id']; $t['url'] = './image/' . Image::getUrlFromResizedFilePath($image['filePath']); // $t['rawUrl'] = './rawImage/'.Image::getUrlFromRawFilePath($image['rawFilePath']); $t['thumbnailUrl'] = './image/' . Image::getUrlFromResizedFilePath($image['thumbnailFilePath']); $t['isFavorite'] = isset($favoriteMap[$image['id']]) ? true : false; $output[] = $t; } Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return ['sn' => $sn, 'data' => $output]; }
public function attachImage($id, $media_id) { $product = $this->model->find($id); $media = Image::find($media_id); $product->images()->save($media); return true; }
/** * Get all of the products of a given Breeder * * @param Breeder $breeder * @return Collection */ public function forBreeder(Breeder $breeder) { $products = $breeder->products()->where('status', 'requested')->get(); $reservations = $breeder->reservations()->get(); $items = []; // Include all "requested" products foreach ($products as $product) { if ($product->quantity == 0) { continue; } $itemDetail = []; $itemDetail['uuid'] = (string) Uuid::uuid4(); $itemDetail['id'] = $product->id; $itemDetail['reservation_id'] = 0; $itemDetail['img_path'] = '/images/product/' . Image::find($product->primary_img_id)->name; $itemDetail['breeder_id'] = $product->breeder_id; $itemDetail['farm_province'] = FarmAddress::find($product->farm_from_id)->province; $itemDetail['name'] = $product->name; $itemDetail['type'] = $product->type; $itemDetail['age'] = $this->computeAge($product->birthdate); $itemDetail['breed'] = $this->transformBreedSyntax(Breed::find($product->breed_id)->name); $itemDetail['quantity'] = $product->quantity; $itemDetail['adg'] = $product->adg; $itemDetail['fcr'] = $product->fcr; $itemDetail['bft'] = $product->backfat_thickness; $itemDetail['status'] = $product->status; $itemDetail['customer_id'] = 0; $itemDetail['customer_name'] = ''; $itemDetail['date_needed'] = ''; $itemDetail['special_request'] = ''; array_push($items, (object) $itemDetail); } // Include "reserved" / "paid" / "on_delivery" / "sold" products foreach ($reservations as $reservation) { $product = Product::find($reservation->product_id); $itemDetail = []; $itemDetail['uuid'] = (string) Uuid::uuid4(); $itemDetail['id'] = $product->id; $itemDetail['reservation_id'] = $reservation->id; $itemDetail['img_path'] = '/images/product/' . Image::find($product->primary_img_id)->name; $itemDetail['breeder_id'] = $product->breeder_id; $itemDetail['farm_province'] = FarmAddress::find($product->farm_from_id)->province; $itemDetail['name'] = $product->name; $itemDetail['type'] = $product->type; $itemDetail['age'] = $this->computeAge($product->birthdate); $itemDetail['breed'] = $this->transformBreedSyntax(Breed::find($product->breed_id)->name); $itemDetail['quantity'] = $reservation->quantity; $itemDetail['adg'] = $product->adg; $itemDetail['fcr'] = $product->fcr; $itemDetail['bft'] = $product->backfat_thickness; $itemDetail['status'] = $reservation->order_status; $itemDetail['customer_id'] = $reservation->customer_id; $itemDetail['customer_name'] = Customer::find($reservation->customer_id)->users()->first()->name; $itemDetail['date_needed'] = $this->transformDateSyntax($reservation->date_needed); $itemDetail['special_request'] = $reservation->special_request; array_push($items, (object) $itemDetail); } // dd($items); return collect($items)->toJson(); }
public function actionTest() { // $rawFilePath = '/homeNASDownloads/photo_2011-2012/DSC_0155.JPG'; // $match = []; // if (preg_match('/\/homeNASDownloads\/photo_[0-9\-]+(.*)/', dirname($rawFilePath), $match)) { //// if (preg_match('/\/homeNASDownloads\/(.*)/i', $rawFilePath, $match)) { // var_dump($match); // }else{ // echo "o my god!\n"; // } $image = Image::find()->where(['id' => 2])->one(); var_dump($image->tags); }
/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Image::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } $query->andFilterWhere(['id' => $this->id]); $query->andFilterWhere(['like', 'title', $this->title])->andFilterWhere(['like', 'url', $this->url]); return $dataProvider; }
/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Image::find(); // add conditions that should always apply here $dataProvider = new ActiveDataProvider(['query' => $query]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } // grid filtering conditions $query->andFilterWhere(['like', 'id', $this->id])->andFilterWhere(['like', 'model_name', $this->model_name])->andFilterWhere(['like', 'model_id', $this->model_id])->andFilterWhere(['like', 'file', $this->file])->andFilterWhere(['like', 'path', $this->path])->andFilterWhere(['like', 'link', $this->link])->andFilterWhere(['like', 'author_id', $this->author_id])->andFilterWhere(['like', 'updater_id', $this->updater_id])->andFilterWhere(['like', 'created_at', $this->created_at])->andFilterWhere(['like', 'updated_at', $this->updated_at]); return $dataProvider; }
/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Image::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails $query->where('0=1'); return $dataProvider; } $query->joinWith(['tags']); $query->groupBy(['image.id']); $query->andFilterWhere(['image.id' => $this->id, 'owner_id' => $this->owner_id, 'tag.id' => $this->tag_id]); $query->andFilterWhere(['like', 'image.name', $this->name])->andFilterWhere(['like', 'url', $this->url]); return $dataProvider; }
/** * Get items in the Swine Cart * [!]AJAX * * @param Request $request * @return JSON/Array */ public function getSwineCartItems(Request $request) { if ($request->ajax()) { $customer = $this->user->userable; $swineCartItems = $customer->swineCartItems()->where('if_requested', 0)->get(); $items = []; foreach ($swineCartItems as $item) { $itemDetail = []; $product = Product::find($item->product_id); $itemDetail['item_id'] = $item->id; $itemDetail['product_id'] = $item->product_id; $itemDetail['product_name'] = $product->name; $itemDetail['product_type'] = $product->type; $itemDetail['product_breed'] = Breed::find($product->breed_id)->name; $itemDetail['img_path'] = '/images/product/' . Image::find($product->primary_img_id)->name; $itemDetail['breeder'] = Breeder::find($product->breeder_id)->users()->first()->name; $itemDetail['token'] = csrf_token(); array_push($items, $itemDetail); } $itemsCollection = collect($items); return $itemsCollection->toJson(); } else { $customer = $this->user->userable; $swineCartItems = $customer->swineCartItems()->where('if_rated', 0)->get(); $products = []; $log = $customer->transactionLogs()->get(); $history = []; foreach ($swineCartItems as $item) { $itemDetail = []; $product = Product::find($item->product_id); $reviews = Breeder::find($product->breeder_id)->reviews()->get(); $itemDetail['request_status'] = $item->if_requested; $itemDetail['request_quantity'] = $item->quantity; $itemDetail['status'] = $item->reservation_id ? ProductReservation::find($item->reservation_id)->order_status : $product->status; $itemDetail['staus'] = $product->status; $itemDetail['item_id'] = $item->id; $itemDetail['customer_id'] = $customer->id; $itemDetail['breeder_id'] = $product->breeder_id; $itemDetail['breeder'] = Breeder::find($product->breeder_id)->users()->first()->name; $itemDetail['product_id'] = $item->product_id; $itemDetail['product_province'] = FarmAddress::find($product->farm_from_id)->province; $itemDetail['product_name'] = $product->name; $itemDetail['product_type'] = $product->type; $itemDetail['product_quantity'] = $product->quantity; $itemDetail['product_breed'] = $this->transformBreedSyntax(Breed::find($product->breed_id)->name); $itemDetail['product_birthdate'] = $this->transformDateSyntax($product->birthdate); $itemDetail['product_age'] = $this->computeAge($product->birthdate); $itemDetail['product_adg'] = $product->adg; $itemDetail['product_fcr'] = $product->fcr; $itemDetail['product_backfat_thickness'] = $product->backfat_thickness; $itemDetail['other_details'] = $product->other_details; $itemDetail['avg_delivery'] = $reviews->avg('rating_delivery'); $itemDetail['avg_transaction'] = $reviews->avg('rating_transaction'); $itemDetail['avg_productQuality'] = $reviews->avg('rating_productQuality'); if ($item->date_needed == '0000-00-00') { $itemDetail['date_needed'] = ''; } else { $itemDetail['date_needed'] = $this->transformDateSyntax($item->date_needed); } $itemDetail['special_request'] = $item->special_request; $itemDetail['img_path'] = '/images/product/' . Image::find($product->primary_img_id)->name; if ($item->transactionLog) { $itemDetail['status_transactions'] = json_decode($item->transactionLog->status_transactions, true); } else { $itemDetail['status_transactions'] = ["requested" => '', "reserved" => '', "on_delivery" => '', "paid" => '', "sold" => '', "rated" => '']; } array_push($products, (object) $itemDetail); } $products = collect($products); $history = collect($history); $token = csrf_token(); $customerId = $customer->id; return view('user.customer.swineCart', compact('products', 'history', 'token', 'customerId')); } }
/** * Store a setting * * @return Response */ public function store() { if (!Input::has('setting')) { return new JSend('error', (array) Input::all(), 'Tidak ada data setting.'); } $errors = new MessageBag(); DB::beginTransaction(); //1. Validate StoreSetting Parameter $setting = Input::get('setting'); if (is_null($setting['id'])) { $is_new = true; } else { $is_new = false; } //2. Validate setting parameter //2a. Slider if (!$errors->count() && $setting['type'] == 'slider') { $setting_data = \App\Models\Slider::findornew($setting['id']); $setting_rules = ['started_at' => 'date_format:"Y-m-d H:i:s"', 'ended_at' => 'date_format:"Y-m-d H:i:s"|after:started_at']; $validator = Validator::make($setting, $setting_rules); } elseif (!$errors->count() && in_array($setting['type'], ['about_us', 'why_join', 'term_and_condition'])) { $setting_data = \App\Models\StorePage::findornew($setting['id']); $setting_rules = ['started_at' => 'date_format:"Y-m-d H:i:s"']; $validator = Validator::make($setting, $setting_rules); } elseif (!$errors->count() && in_array($setting['type'], ['url', 'logo', 'facebook_url', 'twitter_url', 'instagram_url', 'email', 'phone', 'address', 'bank_information'])) { $setting_data = \App\Models\Store::findornew($setting['id']); $setting_rules = ['started_at' => 'date_format:"Y-m-d H:i:s"']; $validator = Validator::make($setting, $setting_rules); } else { $setting_data = \App\Models\Policy::findornew($setting['id']); $setting_rules = ['started_at' => 'date_format:"Y-m-d H:i:s"']; $validator = Validator::make($setting, $setting_rules); } if (!$validator->passes()) { $errors->add('StoreSetting', $validator->errors()); } else { //if validator passed, save setting $setting_data = $setting_data->fill($setting); if (!$setting_data->save()) { $errors->add('StoreSetting', $setting_data->getError()); } } //3. save image for slider if (!$errors->count() && isset($setting['images']) && is_array($setting['images']) && $setting_data['type'] == 'slider') { $image_current_ids = []; foreach ($setting['images'] as $key => $value) { if (!$errors->count()) { $image_data = \App\Models\Image::findornew($value['id']); $image_rules = ['thumbnail' => 'required|max:255', 'image_xs' => 'required|max:255', 'image_sm' => 'required|max:255', 'image_md' => 'required|max:255', 'image_lg' => 'required|max:255', 'is_default' => 'boolean']; $validator = Validator::make($value, $image_rules); //if there was image and validator false if (!$validator->passes()) { $errors->add('Image', $validator->errors()); } else { $value['imageable_id'] = $setting_data['id']; $value['imageable_type'] = get_class($setting_data); $image_data = $image_data->fill($value); if (!$image_data->save()) { $errors->add('Image', $image_data->getError()); } else { $image_current_ids[] = $image_data['id']; } } } //if there was no error, check if there were things need to be delete if (!$errors->count()) { $images = \App\Models\Image::imageableid($setting['id'])->get(['id'])->toArray(); $image_should_be_ids = []; foreach ($images as $key => $value) { $image_should_be_ids[] = $value['id']; } $difference_image_ids = array_diff($image_should_be_ids, $image_current_ids); if ($difference_image_ids) { foreach ($difference_image_ids as $key => $value) { $image_data = \App\Models\Image::find($value); if (!$image_data->delete()) { $errors->add('Image', $image_data->getError()); } } } } } } if ($errors->count()) { DB::rollback(); return new JSend('error', (array) Input::all(), $errors); } DB::commit(); if ($setting_data['type'] == 'slider') { $final_setting = \App\Models\Slider::id($setting_data['id'])->with(['images'])->first()->toArray(); } else { $final_setting = \App\Models\StoreSetting::id($setting_data['id'])->first()->toArray(); } return new JSend('success', (array) $final_setting); }
public function deleteImage($projectId, $imageId) { /* @var Project $project */ /* @var Image $image */ $project = Project::find($projectId); $image = Image::find($imageId); $project->images()->detach($image->id); if ($image->delete()) { return $image; } return response("Cannot Delete image", 400); }
/** * View Details of a Product * * @param Product $product * @return View */ public function customerViewProductDetail(Product $product) { // $product = Product::find($productId); $product->img_path = '/images/product/' . Image::find($product->primary_img_id)->name; $product->breeder = Breeder::find($product->breeder_id)->users->first()->name; $product->birthdate = $this->transformBirthdateSyntax($product->birthdate); $product->age = $this->computeAge($product->birthdate); $product->type = ucfirst($product->type); $product->breed = $this->transformBreedSyntax(Breed::find($product->breed_id)->name); $product->farm_province = FarmAddress::find($product->farm_from_id)->province; $product->other_details = $this->transformOtherDetailsSyntax($product->other_details); $product->imageCollection = $product->images()->where('id', '!=', $product->primary_img_id)->get(); $product->videoCollection = $product->videos; return view('user.customer.viewProductDetail', compact('product')); }
/** * Store a Product Extension * * 1. Save Extension * 2. Save Image * * @return Response */ public function store() { if (!Input::has('extension')) { return new JSend('error', (array) Input::all(), 'Tidak ada data extension.'); } $errors = new MessageBag(); DB::beginTransaction(); //1. Validate Extension Parameter $extension = Input::get('extension'); if (is_null($extension['id'])) { $is_new = true; } else { $is_new = false; } $extension_rules = ['name' => 'required|max:255', 'price' => 'numeric', 'is_active' => 'boolean', 'is_customize' => 'boolean']; //1a. Get original data $extension_data = \App\Models\ProductExtension::findornew($extension['id']); //1b. Validate Basic Extension Parameter $validator = Validator::make($extension, $extension_rules); if (!$validator->passes()) { $errors->add('Extension', $validator->errors()); } else { //if validator passed, save Extension $extension_data = $extension_data->fill($extension); if (!$extension_data->save()) { $errors->add('Extension', $extension_data->getError()); } } //End of validate Extension //2. Validate Extension Image Parameter if (!$errors->count() && isset($extension['images']) && is_array($extension['images'])) { $image_current_ids = []; foreach ($extension['images'] as $key => $value) { if (!$errors->count()) { $image_data = \App\Models\Image::findornew($value['id']); $image_rules = ['imageable_id' => 'exists:Extensions,id|' . ($is_new ? '' : 'in:' . $extension_data['id']), 'imageable_type' => $is_new ? '' : 'in:' . get_class($extension_data), 'thumbnail' => 'required|max:255', 'image_xs' => 'required|max:255', 'image_sm' => 'required|max:255', 'image_md' => 'required|max:255', 'image_lg' => 'required|max:255', 'is_default' => 'boolean']; $validator = Validator::make($value, $image_rules); //if there was image and validator false if (!$validator->passes()) { $errors->add('Image', $validator->errors()); } else { $value['imageable_id'] = $extension_data['id']; $value['imageable_type'] = get_class($extension_data); $image_data = $image_data->fill($value); if (!$image_data->save()) { $errors->add('Image', $image_data->getError()); } else { $image_current_ids[] = $image_data['id']; } } } } //if there was no error, check if there were things need to be delete if (!$errors->count()) { $images = \App\Models\Image::imageableid($extension['id'])->imageabletype(get_class($extension_data))->get(['id'])->toArray(); $image_should_be_ids = []; foreach ($images as $key => $value) { $image_should_be_ids[] = $value['id']; } $difference_image_ids = array_diff($image_should_be_ids, $image_current_ids); if ($difference_image_ids) { foreach ($difference_image_ids as $key => $value) { $image_data = \App\Models\Image::find($value); if (!$image_data->delete()) { $errors->add('Image', $image_data->getError()); } } } } } //End of validate Extension image if ($errors->count()) { DB::rollback(); return new JSend('error', (array) Input::all(), $errors); } DB::commit(); $final_extension = \App\Models\ProductExtension::id($extension_data['id'])->with(['images'])->first()->toArray(); return new JSend('success', (array) $final_extension); }
/** * Store a product * * 1. Save Product * 2. Save Varian * 3. Save Price * 4. Save Category * 5. Save Tag * 6. Save Label * 7. Save Image * * @return Response */ public function store() { if (!Input::has('product')) { return new JSend('error', (array) Input::all(), 'Tidak ada data produk.'); } $errors = new MessageBag(); DB::beginTransaction(); //1. Validate Product Parameter $product = Input::get('product'); //1a. Get original data if (is_null($product['id'])) { $product_data = new \App\Models\Product(); $is_new = true; } else { $product_data = \App\Models\Product::findornew($product['id']); $is_new = false; } if (isset($product['description'])) { $product['description'] = json_decode($product['description'], true); } $product_rules = ['name' => 'required|max:255', 'upc' => 'required|max:255|unique:products,upc,' . (!is_null($product['id']) ? $product['id'] : ''), 'slug' => 'max:255|unique:products,slug,' . (!is_null($product['id']) ? $product['id'] : ''), 'description.description' => 'max:512', 'description.fit' => 'max:512']; //1b. Validate Basic Product Parameter $validator = Validator::make($product, $product_rules); if (!$validator->passes()) { $errors->add('Product', $validator->errors()); } else { //if validator passed, save product if (isset($product['description'])) { $product['description'] = json_encode($product['description']); } else { $product['description'] = json_encode(['description' => '', 'fit' => '']); } $product_data = $product_data->fill($product); if (!$product_data->save()) { $errors->add('Product', $product_data->getError()); } } //End of validate product //2. Validate Product Varian Parameter if (!$errors->count() && isset($product['varians']) && is_array($product['varians'])) { $varian_current_ids = []; foreach ($product['varians'] as $key => $value) { if (!$errors->count()) { $varian_data = \App\Models\Varian::findornew($value['id']); $varian_rules = ['product_id' => 'exists:products,id|' . ($is_new ? '' : 'in:' . $product_data['id']), 'sku' => 'required|max:255|unique:varians,sku,' . (!is_null($value['id']) ? $value['id'] : ''), 'size' => 'required|max:255']; $validator = Validator::make($value, $varian_rules); //if there was varian and validator false if (!$validator->passes()) { $errors->add('Varian', $validator->errors); } else { $value['product_id'] = $product_data['id']; $varian_data = $varian_data->fill($value); if (!$varian_data->save()) { $errors->add('Varian', $varian_data->getError()); } else { $varian_current_ids[] = $varian_data['id']; } } } } //if there was no error, check if there were things need to be delete if (!$errors->count()) { $varians = \App\Models\Varian::productid($product['id'])->get(['id'])->toArray(); $varian_should_be_ids = []; foreach ($varians as $key => $value) { $varian_should_be_ids[] = $value['id']; } $difference_varian_ids = array_diff($varian_should_be_ids, $varian_current_ids); if ($difference_varian_ids) { foreach ($difference_varian_ids as $key => $value) { $varian_data = \App\Models\Varian::find($value); if (!$varian_data->delete()) { $errors->add('Varian', $varian_data->getError()); } } } } } //End of validate product varian //3. Validate Product Price Parameter if (!$errors->count() && isset($product['prices']) && is_array($product['prices'])) { $price_current_ids = []; foreach ($product['prices'] as $key => $value) { if (!$errors->count()) { $price_data = \App\Models\Price::findornew($value['id']); $price_rules = ['product_id' => 'exists:products,id|' . ($is_new ? '' : 'in:' . $product_data['id']), 'price' => 'required|numeric', 'promo_price' => 'numeric|max:price', 'started_at' => 'required|date_format:"Y-m-d H:i:s"']; $validator = Validator::make($value, $price_rules); //if there was price and validator false if (!$validator->passes()) { $errors->add('Price', $validator->errors()); } else { $value['product_id'] = $product_data['id']; $price_data = $price_data->fill($value); if (!$price_data->save()) { $errors->add('Price', $price_data->getError()); } else { $price_current_ids[] = $price_data['id']; } } } } //if there was no error, check if there were things need to be delete if (!$errors->count()) { $prices = \App\Models\Price::productid($product['id'])->get(['id'])->toArray(); $price_should_be_ids = []; foreach ($prices as $key => $value) { $price_should_be_ids[] = $value['id']; } $difference_price_ids = array_diff($price_should_be_ids, $price_current_ids); if ($difference_price_ids) { foreach ($difference_price_ids as $key => $value) { $price_data = \App\Models\Price::find($value); if (!$price_data->delete()) { $errors->add('Price', $price_data->getError()); } } } } } //End of validate product price $cluster_current_ids = []; //4. Validate Product Category Parameter if (!$errors->count() && isset($product['categories']) && is_array($product['categories'])) { $category_current_ids = []; foreach ($product['categories'] as $key => $value) { $category = \App\Models\Category::find($value['id']); if ($category) { $category_current_ids[] = $value['id']; $cluster_current_ids[] = $value['id']; } elseif (isset($value['name'])) { $category_data = new \App\Models\Category(); $category_data = $category_data->fill(['name' => $value['name']]); if (!$category_data->save()) { $errors->add('Category', $category_data->getError()); } else { $category_current_ids[] = $category_data['id']; $cluster_current_ids[] = $category_data['id']; } } } // if(!$errors->count()) // { // if(!$product_data->categories()->sync($category_current_ids)) // { // $errors->add('Category', 'Kategori produk tidak tersimpan.'); // } // } } //End of validate product category //5. Validate Product Tag Parameter if (!$errors->count() && isset($product['tags']) && is_array($product['tags'])) { $tag_current_ids = []; foreach ($product['tags'] as $key => $value) { $tag = \App\Models\Tag::find($value['id']); if ($tag) { $tag_current_ids[] = $value['id']; $cluster_current_ids[] = $value['id']; } elseif (isset($value['name'])) { $tag_data = new \App\Models\Tag(); $tag_data = $tag_data->fill(['name' => $value['name']]); if (!$tag_data->save()) { $errors->add('Tag', $tag_data->getError()); } else { $tag_current_ids[] = $tag_data['id']; $cluster_current_ids[] = $tag_data['id']; } } } // if(!$errors->count()) // { // if(!$product_data->tags()->sync($tag_current_ids)) // { // $errors->add('Tag', 'Tag produk tidak tersimpan.'); // } // } } if (!$errors->count() && isset($cluster_current_ids)) { if (!$product_data->clusters()->sync($cluster_current_ids)) { $errors->add('Product', 'Tag/Kategori produk tidak tersimpan.'); } } //End of validate product category //6. Validate Product Label Parameter if (!$errors->count() && isset($product['labels']) && is_array($product['labels'])) { $label_current_ids = []; foreach ($product['labels'] as $key => $value) { if (!$errors->count()) { $label_data = \App\Models\ProductLabel::findornew($value['id']); $label_rules = ['product_id' => 'exists:products,id|' . ($is_new ? '' : 'in:' . $product_data['id']), 'label' => 'max:255', 'started_at' => 'required|date_format:"Y-m-d H:i:s"', 'ended_at' => 'date_format:"Y-m-d H:i:s"']; if (!isset($value['ended_at']) || !strtotime($value['ended_at'])) { unset($value['ended_at']); } $validator = Validator::make($value, $label_rules); //if there was label and validator false if (!$validator->passes()) { $errors->add('ProductLabel', $validator->errors()); } else { $value['product_id'] = $product_data['id']; if (isset($value['label'])) { $value['lable'] = $value['label']; } $label_data = $label_data->fill($value); if (!$label_data->save()) { $errors->add('ProductLabel', $label_data->getError()); } else { $label_current_ids[] = $label_data['id']; } } } } //if there was no error, check if there were things need to be delete if (!$errors->count()) { $labels = \App\Models\ProductLabel::productid($product['id'])->get(['id'])->toArray(); $label_should_be_ids = []; foreach ($labels as $key => $value) { $label_should_be_ids[] = $value['id']; } $difference_label_ids = array_diff($label_should_be_ids, $label_current_ids); if ($difference_label_ids) { foreach ($difference_label_ids as $key => $value) { $label_data = \App\Models\ProductLabel::find($value); if (!$label_data->delete()) { $errors->add('ProductLabel', $label_data->getError()); } } } } } //End of validate product label //7. Validate Product Image Parameter if (!$errors->count() && isset($product['images']) && is_array($product['images'])) { $image_current_ids = []; foreach ($product['images'] as $key => $value) { if (!$errors->count()) { $image_data = \App\Models\Image::findornew($value['id']); $image_rules = ['imageable_id' => 'exists:products,id|' . ($is_new ? '' : 'in:' . $product_data['id']), 'imageable_type' => $is_new ? '' : 'in:' . get_class($product_data), 'thumbnail' => 'required|max:255', 'image_xs' => 'required|max:255', 'image_sm' => 'required|max:255', 'image_md' => 'required|max:255', 'image_lg' => 'required|max:255', 'is_default' => 'boolean']; $validator = Validator::make($value, $image_rules); //if there was image and validator false if (!$validator->passes()) { $errors->add('Image', $validator->errors()); } else { $value['imageable_id'] = $product_data['id']; $value['imageable_type'] = get_class($product_data); $image_data = $image_data->fill($value); if (!$image_data->save()) { $errors->add('Image', $image_data->getError()); } else { $image_current_ids[] = $image_data['id']; } } } } //if there was no error, check if there were things need to be delete if (!$errors->count()) { $images = \App\Models\Image::imageableid($product['id'])->imageabletype(get_class($product_data))->get(['id'])->toArray(); $image_should_be_ids = []; foreach ($images as $key => $value) { $image_should_be_ids[] = $value['id']; } $difference_image_ids = array_diff($image_should_be_ids, $image_current_ids); if ($difference_image_ids) { foreach ($difference_image_ids as $key => $value) { $image_data = \App\Models\Image::find($value); if (!$image_data->delete()) { $errors->add('Image', $image_data->getError()); } } } } } //End of validate product image if ($errors->count()) { DB::rollback(); return new JSend('error', (array) Input::all(), $errors); } DB::commit(); $final_product = \App\Models\Product::id($product_data['id'])->with(['varians', 'categories', 'tags', 'labels', 'images', 'prices'])->first()->toArray(); return new JSend('success', (array) $final_product); }
/** * Lists all Image models. * @return mixed */ public function actionIndex() { $dataProvider = new ActiveDataProvider(['query' => Image::find()]); return $this->render('index', ['dataProvider' => $dataProvider]); }
public function getImages() { return Image::find()->where(['table' => $this->owner->formName(), 'object_id' => $this->owner->id])->orderBy(['default' => SORT_DESC, 'id' => SORT_ASC])->all(); }