Пример #1
0
 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];
 }
Пример #2
0
 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);
 }
Пример #5
0
 /**
  * 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;
 }
Пример #6
0
 /**
  * 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;
 }
Пример #7
0
 /**
  * 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'));
     }
 }
Пример #9
0
 /**
  * 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);
 }
Пример #10
0
 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);
 }
Пример #13
0
 /**
  * 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);
 }
Пример #14
0
 /**
  * Lists all Image models.
  * @return mixed
  */
 public function actionIndex()
 {
     $dataProvider = new ActiveDataProvider(['query' => Image::find()]);
     return $this->render('index', ['dataProvider' => $dataProvider]);
 }
Пример #15
0
 public function getImages()
 {
     return Image::find()->where(['table' => $this->owner->formName(), 'object_id' => $this->owner->id])->orderBy(['default' => SORT_DESC, 'id' => SORT_ASC])->all();
 }