/**
  * Edit Dailyspecail And Campaign Action
  * @param Request $request
  * @param $did
  * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  * @throws \Exception
  * @author: Vini Dubey<*****@*****.**>
  * @since: xx-xx-xxxx
  */
 public function editDailyspecial(Request $request, $did)
 {
     $objProductCategory = ProductCategory::getInstance();
     $objCampaignModel = Campaigns::getInstance();
     $objProductModel = Products::getInstance();
     $supplierId = Session::get('fs_supplier')['id'];
     if ($request->isMethod('post')) {
         $rules = array('campaign_name' => 'unique:campaigns,campaign_name,' . $did . ',campaign_id', 'dailyspecial_image' => 'image');
         $validator = Validator::make($request->all(), $rules);
         if ($validator->fails()) {
             return Redirect::back()->withErrors($validator)->withInput();
         }
         $postData = $request->all();
         if (sizeof($postData['product']) >= 10) {
             if (Input::hasFile('dailyspecial_image')) {
                 $filePath = uploadImageToStoragePath(Input::file('dailyspecial_image'), 'flashsale', 'flashsale_' . $supplierId . '_' . time() . ".jpg");
                 $data['campaign_banner'] = $filePath;
             }
             $data['campaign_name'] = $postData['campaign_name'];
             $data['campaign_type'] = 2;
             $data['discount_type'] = '2';
             //            if ($data['discount_type'] == '1') {
             //                $data['discount_value'] = $postData['flatdiscount'];
             //            } else {
             $data['discount_value'] = $postData['percentagediscount'];
             //            }
             $validFrom = strtotime(str_replace("-", "", $postData['availablefromdate']));
             $validTo = strtotime(str_replace("-", "", $postData['availableuptodate']));
             $data['available_from'] = $validFrom;
             $data['available_upto'] = $validTo;
             $categ = $postData['productcategories'];
             if (isset($postData['productsubcategories'])) {
                 $subcat = $postData['productsubcategories'];
             } else {
                 $subcat = [];
             }
             $tmp = [];
             foreach ($categ as $index => $item) {
                 $tmp[$item] = array_values(array_filter(array_map(function ($cat) use($item) {
                     if (explode('_', $cat)[0] == $item) {
                         return explode('_', $cat)[1];
                     }
                 }, $subcat)));
             }
             $data['for_category_ids'] = json_encode($tmp);
             $data['by_user_id'] = $supplierId;
             //                $product = $postData['product'];
             $data['for_product_ids'] = implode(",", $postData['product']);
             $where = ['rawQuery' => 'campaign_id = ?', 'bindParams' => [$did]];
             $campaigns = 'Flashsale';
             //                print_a($data);
         } else {
             if (Input::hasFile('dailyspecial_image')) {
                 $filePath = uploadImageToStoragePath(Input::file('dailyspecial_image'), 'dailyspecial', 'dailyspecial_' . $supplierId . '_' . time() . ".jpg");
                 $data['campaign_banner'] = $filePath;
             }
             $data['campaign_name'] = $postData['campaign_name'];
             $data['campaign_type'] = $postData['campaign_type'];
             $data['discount_type'] = '2';
             $data['discount_value'] = $postData['percentagediscount'];
             $validFrom = strtotime(str_replace("-", "", $postData['availablefromdate']));
             $validTo = strtotime(str_replace("-", "", $postData['availableuptodate']));
             $data['available_from'] = $validFrom;
             $data['available_upto'] = $validTo;
             $categ = $postData['productcategories'];
             if (isset($postData['productsubcategories'])) {
                 $subcat = $postData['productsubcategories'];
             } else {
                 $subcat = [];
             }
             //                print_r($categ);
             //                print_a($subcat);
             $tmp = [];
             foreach ($categ as $index => $item) {
                 $tmp[$item] = array_values(array_filter(array_map(function ($cat) use($item) {
                     if (explode('_', $cat)[0] == $item) {
                         return explode('_', $cat)[1];
                     }
                 }, $subcat)));
             }
             //                print_a(json_encode($tmp));
             $data['for_category_ids'] = json_encode($tmp);
             $data['by_user_id'] = $supplierId;
             //                $product = $postData['product'];
             $data['for_product_ids'] = implode(",", $postData['product']);
             //                $data['for_product_ids'] = $postData['product'][0];
             $where = ['rawQuery' => 'campaign_id = ?', 'bindParams' => [$did]];
             $campaigns = 'Dailyspecial';
             //                print_a($data);
         }
         $campaignUpdate = $objCampaignModel->updateFlashsaleStatus($data, $where);
         if ($campaignUpdate) {
             if (isset($filePath)) {
                 deleteImageFromStoragePath($postData['oldImage']);
             }
             return Redirect::back()->with(['status' => 'success', 'msg' => $campaigns . ' ' . 'Updated Successfully.']);
         } else {
             return Redirect::back()->with(['status' => 'error', 'msg' => $campaigns . ' ' . 'Some Error try again.']);
         }
     }
     $where = ['rawQuery' => 'campaign_id = ? AND by_user_id = ?', 'bindParams' => [$did, $supplierId]];
     $selectedColumn = ['campaigns.*', 'users.username'];
     $dailyspecialInfo = $objCampaignModel->getAllFlashsaleDetails($where, $selectedColumn);
     //        print_a($dailyspecialInfo);
     if (isset($dailyspecialInfo) && !empty($dailyspecialInfo)) {
         foreach ($dailyspecialInfo as $flashkey => $flashval) {
             $categoryIds = json_decode($flashval->for_category_ids, true);
             $categoryMerg = array_merge(array_keys($categoryIds));
             $categoryMergee = array_merge(array_flatten($categoryIds));
             $categoryMerge = array_merge(array_keys($categoryIds), array_flatten($categoryIds));
             //                echo'<pre>';print_r($categoryMerg);
             //                echo'<pre>';print_r($categoryMergee);
             //                print_a($categoryMerge);
             $where = ['rawQuery' => 'category_id IN(' . implode(",", $categoryMerge) . ')'];
             $selectedColumn = [DB::raw('GROUP_CONCAT(DISTINCT category_name) AS category_name'), DB::raw('GROUP_CONCAT(DISTINCT category_id) AS category_id')];
             $getcategory = $objProductCategory->getCategoryNameById($where, $selectedColumn);
             foreach ($getcategory as $catkey => $catval) {
                 $dailyspecialInfo[$flashkey]->category = $catval->category_name;
                 $dailyspecialInfo[$flashkey]->category_ids = $catval->category_id;
             }
             $whereProduct = ['rawQuery' => 'product_id IN(' . $flashval->for_product_ids . ')'];
             $selectedColumn = [DB::raw('GROUP_CONCAT(DISTINCT product_name) AS product_name'), DB::raw('GROUP_CONCAT(DISTINCT product_id) AS product_id')];
             $getproduct = $objProductModel->getProductNameById($whereProduct, $selectedColumn);
             foreach ($getproduct as $prodkey => $prodval) {
                 $dailyspecialInfo[$flashkey]->product_name = $prodval->product_name;
                 $dailyspecialInfo[$flashkey]->product_id = $prodval->product_id;
             }
         }
         $where = ['rawQuery' => 'category_status = ? AND parent_category_id = ?', 'bindParams' => [1, 0]];
         $selectedColumn = ['category_id', 'category_name', 'category_status', 'for_shop_id'];
         $allactivecategories = $objProductCategory->getAllMainCategories($where, $selectedColumn);
         $where = ['rawQuery' => 'category_status = ?', 'bindParams' => [1]];
         $selectedColumn = ['product_categories.*', DB::raw('GROUP_CONCAT(category_id)AS main_category_id'), DB::raw('GROUP_CONCAT(category_name)AS main_category_name')];
         $allActiveSubcategories = $objProductCategory->getSubCategoriesForMaincategory($where, $selectedColumn);
         $mainCategory = array_filter(array_map(function ($category) {
             if ($category->parent_category_id == 0) {
                 return $category;
             }
         }, $allActiveSubcategories))[0];
         $finalCatData = [];
         foreach (explode(',', $mainCategory->main_category_id) as $index => $mainCatID) {
             foreach ($allActiveSubcategories as $subCatKey => $allActiveSubcategory) {
                 if ($allActiveSubcategory->parent_category_id == $mainCatID) {
                     $allActiveSubcategory->main_cat_name = explode(',', $mainCategory->main_category_name)[$index];
                     $finalCatData[$mainCatID] = $allActiveSubcategory;
                 }
             }
         }
         $where = ['rawQuery' => 'added_by = ? AND product_type = ?', 'bindParams' => [$supplierId, 0]];
         $selectedColumn = ['product_id', 'product_name'];
         $allproducts = $objProductModel->getAllSupplierProducts($where, $selectedColumn);
         return view('Supplier/Views/dailyspecial/editDailySpecial', ['dailyspecialInfo' => $dailyspecialInfo[0], 'activeCategory' => $allactivecategories, 'allProducts' => $allproducts, 'allcategories' => $finalCatData]);
     } else {
         return view('Supplier/Views/dailyspecial/editDailySpecial');
     }
 }
 /**
  * Edit category action
  * @param Request $request
  * @param $id Category id
  * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  * @throws \FlashSale\Http\Modules\Admin\Models\Exception
  * @since 20-12-2015
  * @author Dinanath Thakur <*****@*****.**>
  */
 public function editCategory(Request $request, $id)
 {
     $objCategoryModel = ProductCategory::getInstance();
     if ($request->isMethod('post')) {
         Validator::extend('word_count', function ($field, $value, $parameters) {
             if (count(explode(' ', $value)) > 10) {
                 return false;
             }
             return true;
         }, 'Meta keywords should not contain more than 10 words.');
         $rules = array('category_name' => 'required|max:50|unique:product_categories,category_name,' . $id . ',category_id', 'category_desc' => 'max:255', 'status' => 'required', 'seo_name' => 'max:100', 'page_title' => 'max:70', 'meta_desc' => 'max:160', 'meta_keywords' => 'word_count');
         $validator = Validator::make($request->all(), $rules);
         if ($validator->fails()) {
             return Redirect::back()->with(["status" => 'error', 'msg' => 'Please correct the following errors.'])->withErrors($validator)->withInput();
         } else {
             if (Input::hasFile('category_image')) {
                 $filePath = uploadImageToStoragePath(Input::file('category_image'), 'category');
                 if ($filePath) {
                     $dataToUpdate['category_banner_url'] = $filePath;
                 }
             }
             $dataToUpdate['category_name'] = $request->input('category_name');
             $dataToUpdate['category_desc'] = $request->input('category_desc');
             $dataToUpdate['category_status'] = $request->input('status');
             $dataToUpdate['is_visible'] = $request->input('is_visible');
             $dataToUpdate['parent_category_id'] = $request->input('parent_category');
             $dataToUpdate['page_title'] = $request->input('page_title');
             $dataToUpdate['meta_description'] = $request->input('meta_desc');
             $dataToUpdate['meta_keywords'] = $request->input('meta_keywords');
             $whereForUpdate = ['rawQuery' => 'category_id =?', 'bindParams' => [$id]];
             $updateResult = $objCategoryModel->updateCategoryWhere($dataToUpdate, $whereForUpdate);
             if ($updateResult > 0) {
                 if (isset($filePath)) {
                     deleteImageFromStoragePath($request->input('old_image'));
                 }
                 return Redirect::back()->with(['status' => 'success', 'msg' => 'Category details has been updated.']);
             } else {
                 return Redirect::back()->with(['status' => 'info', 'msg' => 'Nothing to update.']);
             }
         }
     }
     $where = ['rawQuery' => 'category_id =?', 'bindParams' => [$id]];
     $categoryDetails = $objCategoryModel->getCategoryDetailsWhere($where);
     $allCategories = '';
     if ($categoryDetails) {
         //            $where = ['rawQuery' => 'category_status =?', 'bindParams' => [1]];
         $where = ['rawQuery' => '1'];
         $allCategories = $objCategoryModel->getAllCategoriesWhere($where);
         //            foreach ($allCategories as $key => $value) {
         //                $allCategories[$key]->display_name = $this->getCategoryDisplayName($value->category_id);
         //            }
     }
     return view('Admin/Views/category/editCategory', ['categoryDetails' => $categoryDetails, 'allCategories' => $allCategories]);
 }
 public function editProduct(Request $request, $productId)
 {
     $temp = ["cacheid" => "testcacheid1", "testsdata" => [["lessonid" => "1", "drills" => [["drillid" => "1", "result_ids" => "1,2,3"], ["drillid" => "2", "result_ids" => "4"]]], ["lessonid" => "2", "drills" => [["drillid" => "1", "result_ids" => "1,2,3"], ["drillid" => "2", "result_ids" => "4"]]]]];
     dd(json_encode($temp, true));
     die;
     //GET from product            //GET from productmeta
     $objModelProducts = Products::getInstance();
     $whereForProduct = ['rawQuery' => 'products.product_id = ?', 'bindParams' => [$productId]];
     $productData = json_decode($objModelProducts->getProductWhere($whereForProduct), true);
     if (!empty($productData['data'])) {
         $objModelCategory = ProductCategory::getInstance();
         $objModelFeatures = ProductFeatures::getInstance();
         $objModelProductMeta = ProductMeta::getInstance();
         $objModelProductImage = ProductImage::getInstance();
         $objModelProductOption = ProductOption::getInstance();
         $objModelProductOptionVariant = ProductOptionVariant::getInstance();
         $objModelProductOptionVariantRelation = ProductOptionVariantRelation::getInstance();
         $objModelProductFeatureVariantRelation = ProductFeatureVariantRelation::getInstance();
         $objModelProductOptVarCombination = ProductOptionVariantsCombination::getInstance();
         $objModelProductFeature = ProductFeatures::getInstance();
         $userId = Session::get('fs_admin')['id'];
         $whereForCat = ['rawQuery' => 'category_status =?', 'bindParams' => [1]];
         $allCategories = $objModelCategory->getAllCategoriesWhere($whereForCat);
         $whereForFeatureGroup = ['rawQuery' => 'group_flag =? and status = ?', 'bindParams' => [1, 1]];
         $allFeatureGroups = $objModelFeatures->getAllFeaturesWhere($whereForFeatureGroup);
         //GET from product_feature_variant_relation
         $catId = (int) $productData['data']['category_id'];
         $catFlag = true;
         $parentCategory = array();
         $count = 1;
         $bindParamsForFeature = array();
         $queryForFeature = "";
         $queryForFeatureGroup = "";
         while ($catFlag) {
             if ($count == 1) {
                 $queryForFeatureGroup = '(product_features.group_flag = 1) and (product_features.for_categories LIKE ? OR product_features.for_categories LIKE ? OR product_features.for_categories LIKE ? OR product_features.for_categories LIKE ?';
                 $queryForFeature = '(group_flag = 0 and parent_id = 0) and (for_categories LIKE ? OR for_categories LIKE ? OR for_categories LIKE ? OR for_categories LIKE ?';
             } else {
                 $count++;
                 $catId = $parentCategory['category_id'];
                 $queryForFeatureGroup .= 'OR product_features.for_categories LIKE ? OR product_features.for_categories LIKE ? OR product_features.for_categories LIKE ? OR product_features.for_categories LIKE ?';
                 $queryForFeature .= 'OR for_categories LIKE ? OR for_categories LIKE ? OR for_categories LIKE ? OR for_categories LIKE ?';
             }
             array_push($bindParamsForFeature, "%,{$catId}");
             array_push($bindParamsForFeature, "%,{$catId},%");
             array_push($bindParamsForFeature, "{$catId},%");
             array_push($bindParamsForFeature, "{$catId}");
             $parentCategory = array();
             $whereForCat = ['rawQuery' => 'parent_category_id = ?', "bindParams" => [$catId]];
             $parentCategory = $objModelCategory->getCategoryDetailsWhere($whereForCat);
             if (!$parentCategory) {
                 $catFlag = false;
             }
         }
         $queryForFeature .= ")";
         $queryForFeatureGroup .= ")";
         $whereForFeature = ['rawQuery' => $queryForFeature, 'bindParams' => $bindParamsForFeature];
         $featureDetails = json_decode($objModelProductFeature->getAllFeaturesWithVariantsWhere($whereForFeature), true);
         //            $featureDetails = json_decode($objModelProductFeature->getAllFeaturesWithFVRelationWhere($whereForFeature), true);
         $whereForFeatureGroup = ['rawQuery' => $queryForFeatureGroup, 'bindParams' => $bindParamsForFeature];
         $featureGroups = json_decode($objModelProductFeature->getAllFGsWithFsWhere($whereForFeatureGroup), true);
         foreach ($featureGroups['data'] as $keyFG => $valueFG) {
             $whereForFs = ['rawQuery' => "product_features.parent_id IN (?)", "bindParams" => [$valueFG['feature_ids']]];
             $featureGroups['data'][$keyFG]['featureDetails'] = json_decode($objModelProductFeature->getAllFeaturesWithVariantsWhere($whereForFs), true)['data'];
         }
         $whereForFVRelation = ['rawQuery' => "product_id = ?", 'bindParams' => [$productId]];
         $fvRelations = $objModelProductFeatureVariantRelation->getAllFeatureVariantRelationsWhere($whereForFVRelation);
         //            dd($fvRelations);
         $response['code'] = $featureDetails['code'];
         $response['message'] = $featureDetails['message'];
         $response['data']['featureDetails'] = $featureDetails['data'];
         $response['data']['featureGroupDetails'] = $featureGroups['data'];
         //GET from options
         $whereForOptions = ['rawQuery' => 'status = 1'];
         $allOptions = $objModelProductOption->getAllOptionsWhere($whereForOptions);
         //GET from option_variants
         //            $objModelProductOptionVariant->getVariants
         //GET from option_variant_relation
         $whereForOptVar = ['rawQuery' => "1"];
         //product_id = ?", 'bindParams' => [$productId]];
         $whereForJoin = ['column' => 'product_id', 'condition' => '=', 'value' => "{$productId}"];
         $dataOptVarWithRelations = json_decode($objModelProductOptionVariant->getOptionVarWithRelationsWhere($whereForOptVar, ['*'], $whereForJoin), true);
         //            dd(json_decode($dataOptVarWithRelations, true));//$objModelProductOptionVariantRelation
         //GET from option_variants_combination
         $whereForOptVarCombinations = ['rawQuery' => "product_id = ?", 'bindParams' => [$productId]];
         $dataOptVarCombs = json_decode($objModelProductOptVarCombination->getAllCombinationsWhere($whereForOptVarCombinations), true);
         //            dd(json_decode($dataOptVarCombs, true));//$objModelProductOptionVariantRelation
         //GET from product_images
         $whereForImages = ['rawQuery' => 'for_product_id = ? and for_combination_id = ?', 'bindParams' => [$productId, 0]];
         $dataDefaultImages = json_decode($objModelProductImage->getAllImagesWhere($whereForImages), true);
         //            dd($dataImages);
         if ($request->isMethod('post')) {
             dd($request);
             //            $inputData = $request->input('product_data');//Excludes image
             $inputData = $request->all()['product_data'];
             //Includes image
             //            print_a($inputData['options']);
             //            print_a($_FILES);
             $returnData = ['code' => 400, "message" => "Nothing to update.", "data" => null];
             if (isset($inputData['updateFormName'])) {
                 $updateFormName = $inputData['updateFormName'];
                 $errors = array();
                 switch ($updateFormName) {
                     case "general":
                         $rules = ['product_name' => 'required', 'price' => 'required', 'in_stock' => 'required', 'comment' => 'max:100'];
                         $messages = array();
                         $validator = Validator::make($inputData, $rules, $messages);
                         if ($validator->fails()) {
                             return Redirect::back()->with(["code" => 400, "status" => 'error', 'message' => 'Please correct the following errors.'])->withErrors($validator)->withInput();
                         } else {
                             $productData = array();
                             $productData['product_name'] = trim($inputData['product_name']);
                             $productData['for_shop_id'] = $inputData['shop_id'];
                             if (array_key_exists('product_type', $inputData)) {
                                 $productData['product_type'] = 1;
                             }
                             $productData['min_qty'] = $inputData['minimum_order_quantity'];
                             $productData['max_qty'] = $inputData['maximum_order_quantity'];
                             $productData['category_id'] = $inputData['category_id'];
                             $productData['for_gender'] = $inputData['for_gender'];
                             $productData['price_total'] = $inputData['price'];
                             $productData['list_price'] = $inputData['list_price'];
                             $productData['in_stock'] = $inputData['in_stock'];
                             $productData['added_date'] = time();
                             $productData['added_by'] = $userId;
                             $productData['status_set_by'] = $userId;
                             $returnData = $objModelProducts->updateProductsWhere($productData);
                             //                                $returnData['code'] = 200;
                             //                                $returnData['message'] = "General details saved successfully";
                             //                                $returnData['data'] = null;
                         }
                         //--------------------------PRODUCT-METADATA----------------------------//
                         $productMetaData['product_id'] = $productId;
                         $productMetaData['full_description'] = trim($inputData['full_description']);
                         $productMetaData['short_description'] = trim($inputData['short_description']);
                         $productMetaData['weight'] = $inputData['shipping_properties']['weight'];
                         $productMetaData['shipping_freight'] = $inputData['shipping_properties']['shipping_freight'];
                         $shippingParams = array();
                         $shippingParams['min_items'] = $inputData['shipping_properties']['min_items'];
                         $shippingParams['max_items'] = $inputData['shipping_properties']['min_items'];
                         if (array_key_exists('box_length', $inputData['shipping_properties'])) {
                             $shippingParams['box_length'] = $inputData['shipping_properties']['box_length'];
                         }
                         if (array_key_exists('box_width', $inputData['shipping_properties'])) {
                             $shippingParams['box_width'] = $inputData['shipping_properties']['box_width'];
                         }
                         if (array_key_exists('box_height', $inputData['shipping_properties'])) {
                             $shippingParams['box_height'] = $inputData['shipping_properties']['box_height'];
                         }
                         $productMetaData['shipping_params'] = json_encode($shippingParams);
                         $productMetaData['quantity_discount'] = json_encode($inputData['quantity_discount']);
                         $productMetaData['product_tabs'] = json_encode($inputData['product_tabs']);
                         $insertedProductMetaId = $objModelProductMeta->addProductMetaData($productMetaData);
                         if (!$insertedProductMetaId) {
                             $errors[] = 'Sorry, some of the product data were not added, please update the same on the edit section.';
                         }
                         //--------------------------END PRODUCT-METADATA----------------------------//
                         //------------------------PRODUCT FEATURES START HERE---------------------//
                         if (array_key_exists('features', $inputData)) {
                             $productDataFeatures = $inputData['features'];
                             $fvrDataToInsert = array();
                             foreach ($productDataFeatures as $keyPDF => $valuePDF) {
                                 if (array_key_exists("single", $productDataFeatures[$keyPDF])) {
                                     //                            $fvrDataToInsert[] = ['product_id' => $insertedProductId, 'feature_id' => $keyPDF, 'variant_ids' => 0, 'display_status' => $productDataFeatures[$keyPDF]['status']];
                                     $objModelProductFeatureVariantRelation->addFeatureVariantRelation(['product_id' => $insertedProductId, 'feature_id' => $keyPDF, 'variant_ids' => 0, 'display_status' => $productDataFeatures[$keyPDF]['status']]);
                                 } else {
                                     if (array_key_exists("muliple", $productDataFeatures[$keyPDF])) {
                                         //                            $fvrDataToInsert[] = ['product_id' => $insertedProductId, 'feature_id' => $keyPDF, 'variant_ids' => implode(",", array_keys($valuePDF['multiple'])), 'display_status' => $valuePDF['status']];
                                         $objModelProductFeatureVariantRelation->addFeatureVariantRelation(['product_id' => $insertedProductId, 'feature_id' => $keyPDF, 'variant_ids' => implode(",", array_keys($valuePDF['multiple'])), 'display_status' => $valuePDF['status']]);
                                     } else {
                                         if (array_key_exists("select", $productDataFeatures[$keyPDF])) {
                                             //                            $fvrDataToInsert[] = ['product_id' => $insertedProductId, 'feature_id' => $keyPDF, 'variant_ids' => $valuePDF['select'], 'display_status' => $valuePDF['status']];
                                             $objModelProductFeatureVariantRelation->addFeatureVariantRelation(['product_id' => $insertedProductId, 'feature_id' => $keyPDF, 'variant_ids' => "" . $valuePDF['select'], 'display_status' => $valuePDF['status']]);
                                         }
                                     }
                                 }
                             }
                             //                    $objModelProductFeatureVariantRelation->addFeatureVariantRelation($fvrDataToInsert);
                         }
                         //------------------------PRODUCT FEATURES END HERE---------------------//
                         break;
                         //TODO update main image here
                     //TODO update main image here
                     case "images":
                         $rules = ['mainimage' => 'image|mimes:jpeg,bmp,png|max:1000'];
                         $messages['mainimage.image'] = 'Only jpg, jpeg, gif images allowed for upload.';
                         $validator = Validator::make($inputData, $rules, $messages);
                         if ($validator->fails()) {
                             return Redirect::back()->with(["code" => 400, "status" => 'error', 'message' => 'Please correct the following errors.'])->withErrors($validator)->withInput();
                         } else {
                             //TODO update otherimages here
                             //----------------------------PRODUCT-IMAGES------------------------------//
                             $productImages = $_FILES['product_data'];
                             $imageData = array();
                             if ($productImages['error']['mainimage'] == 0) {
                                 $mainImageURL = uploadImageToStoragePath($productImages['tmp_name']['mainimage'], 'product_' . $insertedProductId, 'product_' . $insertedProductId . '_0_' . time() . '.jpg', 724, 1024);
                                 if ($mainImageURL) {
                                     $mainImageData['for_product_id'] = $insertedProductId;
                                     $mainImageData['image_type'] = 0;
                                     $mainImageData['image_upload_type'] = 0;
                                     $mainImageData['image_url'] = $mainImageURL;
                                     $imageData[] = $mainImageData;
                                 }
                             } else {
                                 $errors[] = 'Sorry, something went wrong. Main image could not be uploaded, You can upload it on edit section.';
                             }
                             if (array_key_exists('otherimages', $productImages['name'])) {
                                 foreach ($productImages['tmp_name']['otherimages'] as $otherImageKey => $otherImage) {
                                     if ($otherImage != '') {
                                         $otherImageURL = uploadImageToStoragePath($otherImage, 'product_' . $insertedProductId, 'product_' . $insertedProductId . '_' . ($otherImageKey + 1) . '_' . time() . '.jpg', 724, 1024);
                                         if ($otherImageURL) {
                                             $otherImageData['for_product_id'] = $insertedProductId;
                                             $otherImageData['image_type'] = 1;
                                             $otherImageData['image_upload_type'] = 0;
                                             $otherImageData['image_url'] = $otherImageURL;
                                             $imageData[] = $otherImageData;
                                         }
                                     }
                                 }
                             }
                             if (!empty($imageData)) {
                                 $objModelProductImage->addNewImage($imageData);
                             }
                             //--------------------------END PRODUCT-IMAGES----------------------------//
                             $returnData['code'] = 200;
                             $returnData['message'] = "Images updated successfully";
                             $returnData['data'] = null;
                         }
                         break;
                     case "options":
                         $rules = ['mainimage' => 'image|mimes:jpeg,bmp,png|max:1000'];
                         $messages['mainimage.image'] = 'Only jpg, jpeg, gif images allowed for upload.';
                         $validator = Validator::make($inputData, $rules, $messages);
                         if ($validator->fails()) {
                             return Redirect::back()->with(["code" => 400, "status" => 'error', 'message' => 'Please correct the following errors.'])->withErrors($validator)->withInput();
                         } else {
                             //TODO options code here
                             if (array_key_exists('options', $inputData)) {
                                 $finalOptionVariantRelationData = array();
                                 $varDataForCombinations = array();
                                 foreach ($inputData['options'] as $key => $optionValue) {
                                     $optionVariantRelationData['product_id'] = $insertedProductId;
                                     $optionVariantRelationData['option_id'] = $optionValue['option_id'];
                                     $optionVariantRelationData['status'] = $optionValue['status'];
                                     $tempOptionVariantData = array();
                                     $variantIds = array();
                                     //-------------------------OLD OPTION VARIANT START-----------------------//
                                     /*
                                     if (array_key_exists('variantData', $optionValue)) {
                                         foreach ($optionValue['variantData'] as $variantKey => $variantValue) {
                                             $temp = array();
                                             if ($variantValue['variant_id'] == 0) {
                                                 $variantData['option_id'] = $optionValue['option_id'];
                                                 $variantData['variant_name'] = $variantValue['variant_name'];
                                                 $variantData['added_by'] = $userId;
                                                 $variantData['status'] = $variantValue['status'];
                                                 $variantData['created_at'] = NULL;
                                     
                                                 $insertedVariantId = $objModelProductOptionVariant->addNewVariantAndGetID($variantData);
                                                 if ($insertedVariantId > 0) {
                                                     array_push($variantIds, $insertedVariantId);
                                                     $temp['VID'] = $insertedVariantId;
                                                     $temp['VN'] = $variantValue['variant_name'];
                                                     $temp['PM'] = $variantValue['price_modifier'];
                                                     $temp['PMT'] = $variantValue['price_modifier_type'];
                                                     $temp['WM'] = $variantValue['weight_modifier'];
                                                     $temp['WMT'] = $variantValue['weight_modifier_type'];
                                                     $temp['STTS'] = $variantValue['status'];
                                                 }
                                             } else {
                                                 array_push($variantIds, $variantValue['variant_id']);
                                                 $temp['VID'] = $variantValue['variant_id'];
                                                 $temp['VN'] = $variantValue['variant_name'];
                                                 $temp['PM'] = $variantValue['price_modifier'];
                                                 $temp['PMT'] = $variantValue['price_modifier_type'];
                                                 $temp['WM'] = $variantValue['weight_modifier'];
                                                 $temp['WMT'] = $variantValue['weight_modifier_type'];
                                                 $temp['STTS'] = $variantValue['status'];
                                             }
                                             $tempOptionVariantData[] = $temp;
                                         }
                                         if (!empty($variantIds) && !empty($tempOptionVariantData)) {
                                             $optionVariantRelationData['variant_ids'] = implode(',', $variantIds);
                                             $optionVariantRelationData['variant_data'] = json_encode($tempOptionVariantData);
                                         }
                                     }
                                     */
                                     //-------------------------OLD OPTION VARIANT END-----------------------//
                                     //-------------------------NEW OPTION VARIANT START---------------------//
                                     if (array_key_exists('variantData', $optionValue)) {
                                         foreach ($optionValue['variantData'] as $variantKey => $variantValue) {
                                             $temp = array();
                                             array_push($variantIds, $variantValue['variant_id']);
                                             $temp['VID'] = $variantValue['variant_id'];
                                             $temp['VN'] = $variantValue['variant_name'];
                                             $temp['PM'] = $variantValue['price_modifier'];
                                             $temp['PMT'] = $variantValue['price_modifier_type'];
                                             $temp['WM'] = $variantValue['weight_modifier'];
                                             $temp['WMT'] = $variantValue['weight_modifier_type'];
                                             $temp['STTS'] = $variantValue['status'];
                                             $tempOptionVariantData[] = $temp;
                                         }
                                     }
                                     if (array_key_exists('variantDataNew', $optionValue)) {
                                         foreach ($optionValue['variantDataNew'] as $variantKey => $variantValue) {
                                             $temp = array();
                                             $variantData['option_id'] = $optionValue['option_id'];
                                             $variantData['variant_name'] = $variantValue['variant_name'];
                                             $variantData['added_by'] = $userId;
                                             $variantData['status'] = $variantValue['status'];
                                             $variantData['created_at'] = NULL;
                                             $insertedVariantId = $objModelProductOptionVariant->addNewVariantAndGetID($variantData);
                                             if ($insertedVariantId > 0) {
                                                 $varDataForCombinations[$variantValue['variant_id']] = $insertedVariantId;
                                                 array_push($variantIds, $insertedVariantId);
                                                 $temp['VID'] = $insertedVariantId;
                                                 $temp['VN'] = $variantValue['variant_name'];
                                                 $temp['PM'] = $variantValue['price_modifier'];
                                                 $temp['PMT'] = $variantValue['price_modifier_type'];
                                                 $temp['WM'] = $variantValue['weight_modifier'];
                                                 $temp['WMT'] = $variantValue['weight_modifier_type'];
                                                 $temp['STTS'] = $variantValue['status'];
                                             }
                                             $tempOptionVariantData[] = $temp;
                                         }
                                     }
                                     if (!empty($variantIds) && !empty($tempOptionVariantData)) {
                                         $optionVariantRelationData['variant_ids'] = implode(',', $variantIds);
                                         $optionVariantRelationData['variant_data'] = json_encode($tempOptionVariantData);
                                     }
                                     //-------------------------NEW OPTION VARIANT END---------------------//
                                     $finalOptionVariantRelationData[] = $optionVariantRelationData;
                                 }
                                 if (!empty($finalOptionVariantRelationData)) {
                                     $objModelProductOptionVariantRelation->addNewOptionVariantRelation($finalOptionVariantRelationData);
                                 }
                                 //------------------------PRODUCT OPTION COMBINATIONS START HERE---------------------//
                                 foreach ($inputData['opt_combination'] as $keyCombination => $valueCombination) {
                                     $flags = explode("_", $valueCombination['newflag']);
                                     $combinationVarIds = explode("_", $keyCombination);
                                     $flagKeys = array_keys($flags, "1");
                                     foreach ($flagKeys as $keyFK => $valueFK) {
                                         $combinationVarIds[$keyFK] = $varDataForCombinations[$combinationVarIds[[$keyFK]]];
                                     }
                                     //TODO ADD BARCODE, shippig info and image data for the combination here
                                     $dataCombinations['product_id'] = $insertedProductId;
                                     $dataCombinations['variant_ids'] = implode("_", $combinationVarIds);
                                     $dataCombinations['quantity'] = $valueCombination['quantity'];
                                     $dataCombinations['exception_flag'] = 0;
                                     if (isset($valueCombination['excludeflag']) && $valueCombination['excludeflag'] == 'on') {
                                         $dataCombinations['exception_flag'] = 1;
                                     }
                                     $objModelProductOptVarCombination->addNewOptionVariantsCombination($dataCombinations);
                                 }
                                 //------------------------PRODUCT OPTION COMBINATIONS END HERE---------------------//
                             }
                             $returnData['code'] = 200;
                             $returnData['message'] = "Options saved successfully";
                             $returnData['data'] = null;
                         }
                         break;
                         /* case "features":
                            $returnData['code'] = 200;
                            $returnData['message'] = "Features saved successfully";
                            $returnData['data'] = null;
                            break; */
                     /* case "features":
                        $returnData['code'] = 200;
                        $returnData['message'] = "Features saved successfully";
                        $returnData['data'] = null;
                        break; */
                     case "filters":
                         $rules = ['mainimage' => 'image|mimes:jpeg,bmp,png|max:1000'];
                         $messages['mainimage.image'] = 'Only jpg, jpeg, gif images allowed for upload.';
                         $validator = Validator::make($inputData, $rules, $messages);
                         if ($validator->fails()) {
                             return Redirect::back()->with(["code" => 400, "status" => 'error', 'message' => 'Please correct the following errors.'])->withErrors($validator)->withInput();
                         } else {
                             $returnData['code'] = 200;
                             $returnData['message'] = "Filters saved successfully";
                             $returnData['data'] = null;
                         }
                         break;
                     case "tabs":
                         $rules = ['mainimage' => 'image|mimes:jpeg,bmp,png|max:1000'];
                         $messages['mainimage.image'] = 'Only jpg, jpeg, gif images allowed for upload.';
                         $validator = Validator::make($inputData, $rules, $messages);
                         if ($validator->fails()) {
                             return Redirect::back()->with(["code" => 400, "status" => 'error', 'message' => 'Please correct the following errors.'])->withErrors($validator)->withInput();
                         } else {
                             $returnData['code'] = 200;
                             $returnData['message'] = "Tab details saved successfully";
                             $returnData['data'] = null;
                         }
                         break;
                     default:
                         break;
                 }
             }
         }
         foreach ($allCategories as $key => $value) {
             $allCategories[$key]->display_name = $this->getCategoryDisplayName($value->category_id);
         }
         return view('Admin/Views/product/editProduct', ['code' => '', 'allCategories' => $allCategories, 'allOptions' => $allOptions, 'featureGroups' => json_decode($allFeatureGroups, true), 'productData' => $productData['data'], 'dataOptVarWithRelations' => $dataOptVarWithRelations, 'dataOptVarCombs' => $dataOptVarCombs, 'dataDefaultImages' => $dataDefaultImages]);
     } else {
         return view('Admin/Views/product/editProduct', ['code' => '400', 'message' => 'No such product exists.', 'productData' => array()]);
     }
 }
 /**
  * @param Request $request
  * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  */
 public function addNewShop(Request $request)
 {
     $userId = Session::get('fs_supplier')['id'];
     $objCategoryModel = ProductCategory::getInstance();
     $objLocationModel = Location::getInstance();
     $objShopModel = Shop::getInstance();
     $objShopMetadataModel = ShopMetadata::getInstance();
     $whereforCategory = ['rawQuery' => 'category_status =? and parent_category_id =?', 'bindParams' => [1, 0]];
     $allCategories = $objCategoryModel->getAllCategoriesWhere($whereforCategory);
     $whereforCountry = ['rawQuery' => 'is_visible =? and location_type =?', 'bindParams' => [0, 0]];
     $allCountry = $objLocationModel->getAllLocationsWhere($whereforCountry);
     $whereforShop = ['rawQuery' => 'user_id =?', 'bindParams' => [$userId]];
     $allShop = $objShopModel->getAllshopsWhere($whereforShop);
     //echo "<pre>";print_r($allShop);die;
     /////////////////////////////Flag Set By admin side///////////////Todo- Flag Set By admin side
     $multiple_store_flag = 1;
     // Value 1 if flag is set
     $sub_store_flag = 1;
     // Value 1 if flag is set
     $parent_category_flag = 1;
     // Value 1 if flag is set
     /////////////////////////////////////////////////////////////////
     $flag['multiple_store_flag'] = $multiple_store_flag;
     $flag['sub_store_flag'] = $sub_store_flag;
     $flag['parent_category_flag'] = $parent_category_flag;
     $data['allCategories'] = $allCategories;
     $data['Country'] = $allCountry;
     $data['Shop'] = $allShop;
     if (!empty($allShop) && $multiple_store_flag != 1) {
         //Error msg if multiple shop not allowed and shopeady added
         return view("Supplier/Views/supplier/addNewShop", ['multiple_store_err' => "Shop already added, Can not add Multiple Shop"]);
     } else {
         $parentCategoryId = 0;
         if (isset($request['parent_category']) && !empty($request['parent_category'])) {
             $parentCategoryId = $request['parent_category'];
         }
         $parentShopId = "";
         if (isset($request['parent_shop']) && !empty($request['parent_shop'])) {
             $parentShopId = $request['parent_shop'];
         }
         if ($request->isMethod('post')) {
             if ($parentShopId == '') {
                 //Sub store flag is not set
                 $rules = array('shop_name' => 'required');
             } else {
                 //Sub store flag is set
                 $rules = array();
             }
             $validator = Validator::make($request->all(), $rules);
             if ($validator->fails()) {
                 return Redirect::back()->withErrors($validator)->withInput();
             } else {
                 try {
                     $addressLine1 = "";
                     if (isset($request['address_line_1'])) {
                         $addressLine1 = $request['address_line_1'];
                     }
                     $addressLine2 = "";
                     if (isset($request['address_line_2'])) {
                         $addressLine2 = $request['address_line_2'];
                     }
                     $country = "";
                     if (isset($request['country'])) {
                         $country = $request['country'];
                     }
                     $state = "";
                     if (isset($request['state'])) {
                         $state = $request['state'];
                     }
                     $city = "";
                     if (isset($request['city'])) {
                         $city = $request['city'];
                     }
                     $zipcode = "";
                     if (isset($request['zipcode'])) {
                         $zipcode = $request['zipcode'];
                     }
                     $shop_flag = 1;
                     if (isset($request['shop_flag'])) {
                         $shop_flag = $request['shop_flag'];
                     }
                     $show_shop = 2;
                     if (isset($request['show_shop'])) {
                         $show_shop = $request['show_shop'];
                     }
                     ////////////Upload Shop Banner Start///////////////////////
                     if (isset($_FILES["shop_banner"]["name"]) && !empty($_FILES["shop_banner"]["name"])) {
                         $bannerFilePath = uploadImageToStoragePath(Input::file('shop_banner'), 'shopbanner', 'shopbanner_' . $userId . '_' . time() . ".jpg");
                     } else {
                         $bannerFilePath = uploadImageToStoragePath($_SERVER['DOCUMENT_ROOT'] . "/assets/images/no-image.png", 'shopbanner', 'shopbanner_' . $userId . '_' . time() . ".jpg");
                     }
                     ////////////Upload Shop banner End///////////////////////
                     ////////////Upload Shop Logo Start///////////////////////
                     if (isset($_FILES["shop_logo"]["name"]) && !empty($_FILES["shop_logo"]["name"])) {
                         $logoFilePath = uploadImageToStoragePath(Input::file('shop_logo'), 'shoplogo', 'shoplogo_' . $userId . '_' . time() . ".jpg");
                     } else {
                         $logoFilePath = uploadImageToStoragePath($_SERVER['DOCUMENT_ROOT'] . "/assets/images/no-image.png", 'shoplogo', 'shoplogo_' . $userId . '_' . time() . ".jpg");
                     }
                     ////////////Upload Shop Logo End///////////////////////
                     if ($parentShopId == "") {
                         //Sub store flag is not set
                         $shopdata = array('user_id' => $userId, 'shop_name' => $request['shop_name'], 'shop_banner' => $bannerFilePath, 'shop_logo' => $logoFilePath, 'parent_category_id' => $parentCategoryId, 'shop_flag' => $shop_flag);
                         $addShop = $objShopModel->addShop($shopdata);
                         $shop_id = $addShop;
                         $shopType = "0";
                     } else {
                         //Sub store flag is set
                         $shopType = "1";
                         $shop_id = $parentShopId;
                     }
                     $shopMatadata = array('shop_id' => $shop_id, 'shop_type' => $shopType, 'address_line_1' => $addressLine1, 'address_line_2' => $addressLine2, 'city' => $city, 'state' => $state, 'country' => $country, 'zipcode' => $zipcode, 'added_date' => time(), 'show_shop_address' => $show_shop, 'shop_metadata_status' => 1);
                     $addShop = $objShopMetadataModel->addShopMetadata($shopMatadata);
                     if ($addShop) {
                         if ($parentShopId == "") {
                             return redirect()->back()->with('shop_success_msg', 'Shop Added Successfully, Waiting for Admin Approval.');
                         } else {
                             return redirect()->back()->with('shop_success_msg', 'Shop Added Successfully.');
                         }
                     }
                 } catch (\Exception $ex) {
                     return redirect()->back()->with('exception', 'An exception occurred, please reload the page and try again.');
                 }
             }
         }
         return view("Supplier/Views/supplier/addNewShop", ['data' => $data], ['flag' => $flag]);
     }
 }
 /**
  * Edit category action
  * @param Request $request
  * @param $id Category id
  * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  * @throws \FlashSale\Http\Modules\Supplier\Models\Exception
  * @since 29-01-2016
  * @author Dinanath Thakur <*****@*****.**>
  */
 public function editCategory(Request $request, $id)
 {
     $objCategoryModel = ProductCategory::getInstance();
     $userId = Session::get('fs_supplier')['id'];
     if ($request->isMethod('post')) {
         Validator::extend('word_count', function ($field, $value, $parameters) {
             if (count(explode(' ', $value)) > 10) {
                 return false;
             }
             return true;
         }, 'Meta keywords should not contain more than 10 words.');
         $rules = array('category_name' => 'required|max:50|unique:product_categories,category_name,' . $id . ',category_id', 'category_desc' => 'max:255', 'status' => 'required', 'seo_name' => 'max:100', 'page_title' => 'max:70', 'meta_desc' => 'max:160', 'meta_keywords' => 'word_count');
         $validator = Validator::make($request->all(), $rules);
         if ($validator->fails()) {
             return Redirect::back()->with(["status" => 'error', 'msg' => 'Please correct the following errors.'])->withErrors($validator)->withInput();
         } else {
             if (Input::hasFile('category_image')) {
                 $filePath = uploadImageToStoragePath(Input::file('category_image'), 'category');
                 if ($filePath) {
                     $dataToUpdate['category_banner_url'] = $filePath;
                 }
             }
             $dataToUpdate['category_name'] = $request->input('category_name');
             $dataToUpdate['category_desc'] = $request->input('category_desc');
             $dataToUpdate['category_status'] = $request->input('status');
             $dataToUpdate['parent_category_id'] = $request->input('parent_category');
             $dataToUpdate['page_title'] = $request->input('page_title');
             $dataToUpdate['meta_description'] = $request->input('meta_desc');
             $dataToUpdate['meta_keywords'] = $request->input('meta_keywords');
             $whereForUpdate = ['rawQuery' => 'category_id =?', 'bindParams' => [$id]];
             $updateResult = $objCategoryModel->updateCategoryWhere($dataToUpdate, $whereForUpdate);
             if ($updateResult > 0) {
                 if (isset($filePath)) {
                     deleteImageFromStoragePath($request->input('old_image'));
                 }
                 return Redirect::back()->with(['status' => 'success', 'msg' => 'Category details has been updated.']);
             } else {
                 return Redirect::back()->with(['status' => 'info', 'msg' => 'Nothing to update.']);
             }
         }
     }
     $where = ['rawQuery' => 'category_id =? AND category_status IN(0,1,2) AND created_by=?', 'bindParams' => [$id, $userId]];
     $categoryDetails = $objCategoryModel->getCategoryDetailsWhere($where);
     $allCategories = '';
     if ($categoryDetails) {
         $allCategories = $objCategoryModel->getAllCategoriesWhere(['rawQuery' => 'created_by IN (' . DB::raw("SELECT `id` FROM `users` WHERE `role` IN(4,5)") . ') OR created_by=? AND  category_status IN(0,1,2)', 'bindParams' => [$userId]]);
     }
     return view('Supplier/Views/category/editCategory', ['categoryDetails' => $categoryDetails, 'allCategories' => $allCategories]);
 }
 public function editFlashsale(Request $request, $fid)
 {
     $objCategoryModel = ProductCategory::getInstance();
     $objCampaignModel = Campaigns::getInstance();
     $postData = $request->all();
     $supplierId = Session::get('fs_supplier')['id'];
     if ($request->isMethod('POST')) {
         $rules = array('campaign_name' => 'unique:campaigns,campaign_name,' . $fid . ',campaign_id', 'flashsale_image' => 'image');
         $validator = Validator::make($request->all(), $rules);
         if ($validator->fails()) {
             return Redirect::back()->withErrors($validator)->withInput();
         } else {
             if (Input::hasFile('flashsale_image')) {
                 $filePath = uploadImageToStoragePath(Input::file('flashsale_image'), 'flashsale', 'flashsale_' . $supplierId . '_' . time() . ".jpg");
                 $data['campaign_banner'] = $filePath;
             }
             $postData = $request->all();
             $data['campaign_name'] = $postData['campaign_name'];
             $data['for_shop_id'] = $postData['suppliershop'];
             $data['discount_type'] = $postData['discounttype'];
             if ($postData['discounttype'] == 1) {
                 $data['discount_value'] = $postData['flatdiscount'];
             } else {
                 $data['discount_value'] = $postData['percentagediscount'];
             }
             $validFrom = strtotime(str_replace("-", "", $postData['availablefromdate']));
             $validTo = strtotime(str_replace("-", "", $postData['availableuptodate']));
             $data['available_from'] = $validFrom;
             $data['available_upto'] = $validTo;
             $categ = $postData['productcategories'];
             $data['for_category_ids'] = implode(",", $categ);
             $where = ['rawQuery' => 'campaign_id = ?', 'bindParams' => [$fid]];
             $campaignUpdate = $objCampaignModel->updateFlashsaleStatus($data, $where);
             if ($campaignUpdate) {
                 if (isset($filePath)) {
                     deleteImageFromStoragePath($postData['oldImage']);
                 }
                 return Redirect::back()->with(['status' => 'success', 'msg' => 'FlashSale Added Successfully.']);
             } else {
                 return Redirect::back()->with(['status' => 'error', 'msg' => 'Some Error try again.']);
             }
         }
     }
     $where = ['rawQuery' => 'campaign_id = ?', 'bindParams' => [$fid]];
     $selectedColumn = ['campaigns.*', 'users.username'];
     $flashsaleInfo = $objCampaignModel->getAllFlashsaleDetails($where, $selectedColumn);
     if (isset($flashsaleInfo) && !empty($flashsaleInfo)) {
         foreach ($flashsaleInfo as $flashkey => $flashval) {
             $categoryIds = $flashval->for_category_ids;
             $where = ['rawQuery' => 'category_id IN(' . $categoryIds . ')'];
             $getcategory = $objCategoryModel->getCategoryNameById($where);
             foreach ($getcategory as $catkey => $catval) {
                 $flashsaleInfo[$flashkey]->category = $catval->category_name;
             }
         }
         //            echo'<pre>';print_r($flashsaleInfo);die("dxv");
         $where = ['rawQuery' => 'category_status = ? AND parent_category_id = ?', 'bindParams' => [1, 0]];
         $selectedColumn = ['category_id', 'category_name', 'category_status', 'for_shop_id'];
         $allactivecategories = $objCategoryModel->getAllMainCategories($where, $selectedColumn);
         return view('Supplier/Views/flashsale/editFlashsale', ['flashsaleDetails' => $flashsaleInfo[0], 'activeflashsale' => $allactivecategories]);
     } else {
         return view('Supplier/Views/flashsale/editFlashsale');
     }
 }
 /**
  *  This service is use to handle profile it has 4 methods changegeneralinfo, changeshippinginfo, changepassword and changeavtar
  * @param changegeneralinfo : method, user_id, firstname, lastname, contact_no, api_token, secondary_email
  * @return $updategeneralinfo
  * @param changeshippinginfo : method, user_id,  mytoken, city, state, zipcode, api_token, address_line_1, address_line_2
  * @return $updateshippinginfo
  * @param changepassword : method, user_id, oldPassword, newPassword, reNewPassword, api_token
  * @return $Updatepassword
  * @param changeavtar : method, user_id, api_token, input_file_preview
  * @return $url
  */
 public function profileAjaxHandler(Request $request)
 {
     $response = new stdClass();
     if ($request->isMethod("POST")) {
         $postData = $request->all();
         $API_TOKEN = env('API_TOKEN');
         $method = "";
         if (isset($postData['method'])) {
             $method = $postData['method'];
         }
         $objuser = new User();
         $objusermetamodel = new Usersmeta();
         switch ($method) {
             case "changegeneralinfo":
                 $userId = "";
                 if (isset($postData['user_id'])) {
                     $userId = $postData['user_id'];
                 }
                 $firstname = "";
                 if (isset($postData['firstname'])) {
                     $firstname = $postData['firstname'];
                 }
                 $lastname = "";
                 if (isset($postData['lastname'])) {
                     $lastname = $postData['lastname'];
                 }
                 $contact_no = "";
                 if (isset($postData['contact_no'])) {
                     $contact_no = $postData['contact_no'];
                 }
                 $email = "";
                 if (isset($postData['email'])) {
                     $email = $postData['email'];
                 }
                 $username = "";
                 if (isset($postData['username'])) {
                     $username = $postData['username'];
                 }
                 $authFlag = false;
                 if (isset($postData['api_token'])) {
                     $apitoken = $postData['api_token'];
                     if ($apitoken == $API_TOKEN) {
                         $authFlag = true;
                     } else {
                         if ($userId != '') {
                             $whereForUpdate = ['rawQuery' => 'id =?', 'bindParams' => [$userId]];
                             $Userscredentials = $objuser->getUsercredsWhere($whereForUpdate);
                             if ($apitoken == $Userscredentials->login_token) {
                                 $authFlag = true;
                             }
                         }
                     }
                 }
                 if ($authFlag) {
                     $rules = array('firstname' => 'required|regex:/^[A-Za-z\\s]+$/|max:255', 'lastname' => 'required|regex:/^[A-Za-z\\s]+$/|max:255', 'username' => 'required|regex:/^[A-Za-z0-9._\\s]+$/|max:255', 'email' => 'required|email|max:255', 'user_id' => 'required');
                     $messages = ['firstname.regex' => 'The :attribute cannot contain special characters.', 'lastname.regex' => 'The :attribute cannot contain special characters.', 'username.regex' => 'The :attribute cannot contain special characters.'];
                     $validator = Validator::make($request->all(), $rules, $messages);
                     if ($validator->fails()) {
                         $response->code = 100;
                         $response->message = $validator->messages();
                         $response->data = null;
                         echo json_encode($response, true);
                     } else {
                         $whereForUpdate = ['rawQuery' => 'id =?', 'bindParams' => [$userId]];
                         $currentUserDetails = $objuser->getUsercredsWhere($whereForUpdate);
                         $uniqueflag = false;
                         if ($currentUserDetails->username == $username && $currentUserDetails->username == $email) {
                             $uniqueflag = true;
                         } else {
                             if ($currentUserDetails->username != $username && $currentUserDetails->username == $email) {
                                 $uniqueflag = true;
                             } else {
                                 if ($currentUserDetails->username == $username && $currentUserDetails->username != $email) {
                                     $uniqueflag = true;
                                 } else {
                                     $rules = array('username' => 'unique:users', 'email' => 'unique:users');
                                     $validator = Validator::make($request->all(), $rules);
                                     if ($validator->fails()) {
                                         $response->code = 100;
                                         $response->message = $validator->messages();
                                         $response->data = null;
                                         echo json_encode($response, true);
                                     } else {
                                         $uniqueflag = true;
                                     }
                                 }
                             }
                         }
                         if ($uniqueflag) {
                             $whereForId = ['rawQuery' => 'id =?', 'bindParams' => [$userId]];
                             $data = array('name' => $firstname, 'last_name' => $lastname, 'username' => $username, 'email' => $email);
                             $updategeneralinfo = $objuser->UpdateUserDetailsbyId($whereForId, $data);
                             $whereForUserId = ['rawQuery' => 'user_id =?', 'bindParams' => [$userId]];
                             $Isuseravailable = $objusermetamodel->getUsermetaWhere($whereForUserId);
                             if ($Isuseravailable) {
                                 $dataupdate = array('phone' => "{$contact_no}");
                                 $UpdateUsermeta = $objusermetamodel->UpdateUsermetawhere($whereForUserId, $dataupdate);
                             } else {
                                 $dataadd = array('user_id' => $userId, 'phone' => $contact_no);
                                 $Addusermeta = $objusermetamodel->addUsermeta($dataadd);
                             }
                             if ($updategeneralinfo) {
                                 $response->code = 200;
                                 $response->message = "Update Successful";
                                 $response->data = $updategeneralinfo;
                                 echo json_encode($response, true);
                             } else {
                                 $response->code = 400;
                                 $response->message = "Something went wrong";
                                 $response->data = 1;
                                 echo json_encode($response, true);
                             }
                         }
                     }
                 } else {
                     $response->code = 401;
                     $response->message = "Access Denied";
                     $response->data = null;
                     echo json_encode($response, true);
                 }
                 break;
             case "changeshippinginfo":
                 $userId = "";
                 if (isset($postData['user_id'])) {
                     $userId = $postData['user_id'];
                 }
                 $City = "";
                 if (isset($postData['city'])) {
                     $City = $postData['city'];
                 }
                 $State = "";
                 if (isset($postData['state'])) {
                     $State = $postData['state'];
                 }
                 $Zip_code = "";
                 if (isset($postData['zipcode'])) {
                     $Zip_code = $postData['zipcode'];
                 }
                 //                    $country = "";
                 //                    if (isset($postData['country'])) {
                 //                        $country = $postData['country'];
                 //                    }
                 $Address1 = "";
                 if (isset($postData['address_line_1'])) {
                     $Address1 = $postData['address_line_1'];
                 }
                 $Address2 = "";
                 if (isset($postData['address_line_2'])) {
                     $Address2 = $postData['address_line_2'];
                 }
                 $authFlag = false;
                 if (isset($postData['api_token'])) {
                     $apitoken = $postData['api_token'];
                     if ($apitoken == $API_TOKEN) {
                         $authFlag = true;
                     } else {
                         if ($userId != '') {
                             $whereForUpdate = ['rawQuery' => 'id =?', 'bindParams' => [$userId]];
                             $Userscredentials = $objuser->getUsercredsWhere($whereForUpdate);
                             if ($apitoken == $Userscredentials->login_token) {
                                 $authFlag = true;
                             }
                         }
                     }
                 }
                 if ($authFlag) {
                     $rules = array('city' => 'required', 'state' => 'required', 'zipcode' => 'required', 'address_line_1' => 'required');
                     $validator = Validator::make($request->all(), $rules);
                     if ($validator->fails()) {
                         $response->code = 100;
                         $response->message = $validator->messages();
                         $response->data = null;
                         echo json_encode($response);
                     } else {
                         $whereForUserId = ['rawQuery' => 'user_id =?', 'bindParams' => [$userId]];
                         $Isuseravailable = $objusermetamodel->getUsermetaWhere($whereForUserId);
                         if ($Isuseravailable) {
                             $data = array('city' => $City, 'state' => $State, 'zipcode' => $Zip_code, 'addressline1' => $Address1, 'addressline2' => $Address2);
                             $updateshippinginfo = $objusermetamodel->UpdateUsermetawhere($whereForUserId, $data);
                         } else {
                             $dataadd = array('user_id' => $userId, 'city' => $City, 'state' => $State, 'zipcode' => $Zip_code, 'addressline1' => $Address1, 'addressline2' => $Address2);
                             $Addusermeta = $objusermetamodel->addUsermeta($dataadd);
                         }
                         if ($updateshippinginfo || $Addusermeta) {
                             $response->code = 200;
                             $response->message = "Update Successful";
                             $response->data = 1;
                             echo json_encode($response, true);
                         } else {
                             $response->code = 400;
                             $response->message = "Something went Wrong";
                             $response->data = null;
                             echo json_encode($response, true);
                         }
                     }
                 } else {
                     $response->code = 401;
                     $response->message = "Access Denied";
                     $response->data = null;
                     echo json_encode($response, true);
                 }
                 break;
             case "changepassword":
                 $userId = "";
                 if (isset($postData['user_id'])) {
                     $userId = $postData['user_id'];
                 }
                 $oldpassword = "";
                 if (isset($postData['oldPassword'])) {
                     $oldpassword = $postData['oldPassword'];
                 }
                 $newpassword = "";
                 if (isset($postData['newPassword'])) {
                     $newpassword = $postData['newPassword'];
                 }
                 $renewpassword = "";
                 if (isset($postData['reNewPassword'])) {
                     $renewpassword = $postData['reNewPassword'];
                 }
                 $authFlag = false;
                 if (isset($postData['api_token'])) {
                     $apitoken = $postData['api_token'];
                     if ($apitoken == $API_TOKEN) {
                         $authFlag = true;
                     } else {
                         if ($userId != '') {
                             $whereForUpdate = ['rawQuery' => 'id =?', 'bindParams' => [$userId]];
                             $Userscredentials = $objuser->getUsercredsWhere($whereForUpdate);
                             if ($apitoken == $Userscredentials->login_token) {
                                 $authFlag = true;
                             }
                         }
                     }
                 }
                 if ($authFlag) {
                     $rules = array('oldPassword' => 'required', 'newPassword' => 'required', 'reNewPassword' => 'required', 'user_id' => 'required');
                     $validator = Validator::make($request->all(), $rules);
                     if ($validator->fails()) {
                         $response->code = 100;
                         $response->message = $validator->messages();
                         $response->data = null;
                         echo json_encode($response);
                     } else {
                         if ($newpassword != $oldpassword) {
                             if ($newpassword == $renewpassword) {
                                 $where = ['rawQuery' => 'id =?', 'bindParams' => [$userId]];
                                 $currentUserDetails = $objuser->getUsercredsWhere($where);
                                 if (Hash::check($oldpassword, $currentUserDetails->password)) {
                                     $newpassword = Hash::make($newpassword);
                                     $data = array('password' => $newpassword);
                                     $Updatepassword = $objuser->UpdateUserDetailsbyId($where, $data);
                                     $response->code = 200;
                                     $response->message = "Password Changed Successfully";
                                     $response->data = 1;
                                     echo json_encode($response, true);
                                 } else {
                                     $response->code = 400;
                                     $response->message = "Invalid Password";
                                     $response->data = null;
                                     echo json_encode($response, true);
                                 }
                             } else {
                                 $response->code = 400;
                                 $response->message = "Both New password should be same";
                                 $response->data = null;
                                 echo json_encode($response, true);
                             }
                         } else {
                             $response->code = 400;
                             $response->message = "New and old password should not be same";
                             $response->data = null;
                             echo json_encode($response, true);
                         }
                     }
                 } else {
                     $response->code = 401;
                     $response->message = "Access Denied";
                     $response->data = null;
                     echo json_encode($response, true);
                 }
                 break;
             case "changeavtar":
                 //This method is directly called from Ajax call of profile-setting.blade.php page
                 $userId = "";
                 if (isset($postData['user_id'])) {
                     $userId = $postData['user_id'];
                 }
                 $authFlag = false;
                 if (isset($postData['api_token'])) {
                     $apitoken = $postData['api_token'];
                     if ($apitoken == $API_TOKEN) {
                         $authFlag = true;
                     } else {
                         if ($userId != '') {
                             $whereForUpdate = ['rawQuery' => 'id =?', 'bindParams' => [$userId]];
                             $Userscredentials = $objuser->getUsercredsWhere($whereForUpdate);
                             if ($apitoken == $Userscredentials->login_token) {
                                 $authFlag = true;
                             }
                         }
                     }
                 }
                 if ($authFlag) {
                     if ($userId != '') {
                         if (Input::hasFile('file')) {
                             $validator = Validator::make($request->all(), ['file' => 'image']);
                             if ($validator->fails()) {
                                 $response->code = 100;
                                 $response->message = $validator->messages();
                                 $response->data = null;
                                 echo json_encode($response);
                             } else {
                                 $filePath = uploadImageToStoragePath(Input::file('file'), 'profileavatar', 'profileavatar_' . $userId . '_' . time() . ".jpg");
                                 if ($filePath) {
                                     $updateData['profilepic'] = $filePath;
                                     $where = ['rawQuery' => 'id =?', 'bindParams' => [$userId]];
                                     $UserData = $objuser->getUsercredsWhere($where);
                                     $updatedResult = $objuser->UpdateUserDetailsbyId($where, $updateData);
                                     if ($updatedResult) {
                                         if ($UserData->profilepic != '') {
                                             if (!strpos($UserData->profilepic, 'placeholder')) {
                                                 deleteImageFromStoragePath($UserData->profilepic);
                                             }
                                         }
                                         //
                                         $response->code = 200;
                                         $response->message = "Successfully updated profile image.";
                                         $response->data = $filePath;
                                         echo json_encode($response);
                                     } else {
                                         $response->code = 400;
                                         $response->message = "Something went wrong, please try again.";
                                         $response->data = null;
                                         echo json_encode($response);
                                     }
                                 } else {
                                     $response->code = 400;
                                     $response->message = "Something went wrong, please reload the page and try again..";
                                     $response->data = null;
                                     echo json_encode($response);
                                 }
                             }
                         } else {
                             $response->code = 400;
                             $response->message = "Give correct input and Input Image files should be(jpg,gif,png,jpeg)only";
                             $response->data = null;
                             echo json_encode($response, true);
                         }
                     } else {
                         $response->code = 400;
                         $response->message = "You need to login to change Avtar.";
                         $response->data = null;
                         echo json_encode($response, true);
                     }
                 } else {
                     $response->code = 401;
                     $response->message = "Access Denied";
                     $response->data = null;
                     echo json_encode($response, true);
                 }
                 break;
             default:
                 break;
         }
     } else {
         $response->code = 401;
         $response->message = "Invalid request";
         $response->data = null;
         echo json_encode($response, true);
     }
 }