public function buildShopQuery()
 {
     $this->qry = ShopDetails::leftJoin('users', 'users.id', '=', 'shop_details.user_id')->leftJoin('product', function ($join) {
         $join->on('users.id', '=', 'product.product_user_id');
     })->Select("shop_details.*", "users.created_at", "users.first_name", "users.last_name", "users.email", "users.activated", "users.id", \DB::raw('count(product.id) as script_cnt'));
     $this->qry->groupBy('users.id');
     $this->qry->Where('users.id', '<>', 0);
     //form the search query
     if ($this->getSrchVal('user_code')) {
         $this->qry->whereRaw("( users.id = ?  OR users.id =  ? )", array(CUtil::getUserId($this->getSrchVal('user_code')), $this->getSrchVal('user_code')));
     }
     if ($this->getSrchVal('user_name')) {
         $name_arr = explode(" ", $this->getSrchVal('user_name'));
         if (count($name_arr) > 0) {
             foreach ($name_arr as $names) {
                 $this->qry->whereRaw("( users.first_name LIKE '%" . addslashes($names) . "%' OR users.last_name LIKE '%" . addslashes($names) . "%'  )");
             }
         }
     }
     if ($this->getSrchVal('shop_name')) {
         $name_arr = explode(" ", $this->getSrchVal('shop_name'));
         if (count($name_arr) > 0) {
             foreach ($name_arr as $names) {
                 $this->qry->whereRaw("( shop_details.shop_name LIKE '%" . addslashes($names) . "%')");
             }
         }
     }
     if ($this->getSrchVal('user_email')) {
         $this->qry->Where('users.email', $this->getSrchVal('user_email'));
     }
     if ($this->getSrchVal('shop_featured')) {
         if ($this->getSrchVal('shop_featured') == 'Yes') {
             $this->qry->Where('shop_details.is_featured_shop', 'Yes');
         } else {
             $this->qry->Where('shop_details.is_featured_shop', 'No');
         }
     }
     $this->qry->orderBy('users.created_at', 'desc');
     return $this->qry;
 }
 public function postProductActions()
 {
     $action = \Input::get('action');
     $p_id = \Input::get('product_id');
     switch ($action) {
         case 'save_product_thumb_image_title':
             $title = \Input::get('product_image_title');
             echo $this->productService->saveProductImageTitle($p_id, 'thumb', $title) ? 'success' : 'error';
             $this->productService->updateProductStatus($p_id, 'Draft');
             exit;
             break;
         case 'save_product_default_image_title':
             $title = \Input::get('product_image_title');
             echo $this->productService->saveProductImageTitle($p_id, 'default', $title) ? 'success' : 'error';
             $this->productService->updateProductStatus($p_id, 'Draft');
             exit;
             break;
         case 'upload_product_thumb_image':
             $title = \Input::get('product_image_title');
             $this->productAddService->product_media_type = 'image';
             $this->productAddService->setAllowedUploadFormats('thumb');
             $this->productAddService->setMaxUploadSize('thumb');
             $file_info = array();
             $file = \Input::file('uploadfile');
             $upload_file_name = $file->getClientOriginalName();
             $upload_status = $this->productAddService->uploadMediaFile('uploadfile', 'image', $file_info);
             if ($upload_status['status'] == 'success') {
                 $this->productService->updateItemProductImage($p_id, $title, $file_info);
                 $image_dim = CUtil::DISP_IMAGE(145, 145, $file_info['t_width'], $file_info['t_height'], true);
                 echo json_encode(array('status' => 'success', 'server_url' => $file_info['server_url'], 'filename' => $file_info['filename_no_ext'] . 'T.' . $file_info['ext'], 't_width' => $image_dim['width'], 't_height' => $image_dim['height'], 'title' => $file_info['title']));
                 $this->productService->updateProductStatus($p_id, 'Draft');
             } else {
                 echo json_encode(array('status' => 'error', 'error_message' => $upload_status['error_message'], 'filename' => $upload_file_name));
             }
             exit;
             break;
         case 'upload_item_default_image':
             $title = \Input::get('product_image_title');
             $this->productAddService->product_media_type = 'image';
             $this->productAddService->setAllowedUploadFormats('default');
             $this->productAddService->setMaxUploadSize('default');
             $file_info = array();
             $file = \Input::file('uploadfile');
             $upload_file_name = $file->getClientOriginalName();
             $upload_status = $this->productAddService->uploadMediaFile('uploadfile', 'image', $file_info);
             if ($upload_status['status'] == 'success') {
                 $this->productService->updateProductDefaultImage($p_id, $title, $file_info);
                 $image_dim = CUtil::DISP_IMAGE(578, 385, $file_info['l_width'], $file_info['l_height'], true);
                 echo json_encode(array('status' => 'success', 'server_url' => $file_info['server_url'], 'filename' => $file_info['filename_no_ext'] . 'L.' . $file_info['ext'], 't_width' => $image_dim['width'], 't_height' => $image_dim['height'], 'title' => $file_info['title']));
                 $this->productService->updateProductStatus($p_id, 'Draft');
             } else {
                 echo json_encode(array('status' => 'error', 'error_message' => $upload_status['error_message'], 'filename' => $upload_file_name));
             }
             exit;
             break;
         case 'remove_default_thumb_image':
             echo $this->productService->removeProductThumbImage($p_id) ? 'success' : 'error';
             $this->productService->updateProductStatus($p_id, 'Draft');
             exit;
             break;
         case 'remove_default_image':
             echo $this->productService->removeProductDefaultImage($p_id) ? 'success' : 'error';
             $this->productService->updateProductStatus($p_id, 'Draft');
             exit;
             break;
         case 'upload_resource_preview':
             // images on the image tab
             $resource_type = \Input::get('resource_type');
             $this->productAddService->setProductPreviewType($p_id);
             $this->productAddService->setAllowedUploadFormats('preview');
             $this->productAddService->setMaxUploadSize('preview');
             $resource_count = ProductResource::whereRaw('product_id = ? AND resource_type = ? ', array($p_id, $this->productAddService->product_media_type))->count();
             if ($resource_count < \Config::get('webshoppack::preview_max')) {
                 $file_info = array();
                 $file = \Input::file('uploadfile');
                 $upload_file_name = $file->getClientOriginalName();
                 $upload_status = $this->productAddService->uploadMediaFile('uploadfile', $this->productAddService->product_media_type, $file_info);
                 if ($upload_status['status'] == 'success') {
                     $resource_arr = array('product_id' => $p_id, 'resource_type' => $resource_type, 'filename' => $file_info['filename_no_ext'], 'ext' => $file_info['ext'], 'title' => $file_info['title'], 'width' => $file_info['width'], 'height' => $file_info['height'], 't_width' => $file_info['t_width'], 't_height' => $file_info['t_height'], 'l_width' => $file_info['l_width'], 'l_height' => $file_info['l_height'], 'server_url' => $file_info['server_url'], 'is_downloadable' => $file_info['is_downloadable']);
                     $resource_id = $this->productService->insertResource($resource_arr);
                     $image_dim = CUtil::DISP_IMAGE(74, 74, $file_info['t_width'], $file_info['t_height'], true);
                     $this->productService->updateProductStatus($p_id, 'Draft');
                     echo json_encode(array('status' => 'success', 'resource_type' => ucwords($resource_type), 'server_url' => $file_info['server_url'], 'filename' => $file_info['file_thumb'], 't_width' => $image_dim['width'], 't_height' => $image_dim['height'], 'title' => $file_info['title'], 'resource_id' => $resource_id));
                 } else {
                     echo json_encode(array('status' => 'error', 'error_message' => $upload_status['error_message'], 'filename' => $upload_file_name));
                 }
             } else {
                 echo json_encode(array('status' => 'error', 'error_message' => trans('webshoppack::products_max_file'), 'filename' => ''));
             }
             exit;
             break;
         case 'save_resource_title':
             $row_id = \Input::get('row_id');
             $resource_title = \Input::get('resource_title');
             echo $this->productService->updateProductResourceImageTitle($row_id, $resource_title) ? 'success' : 'error';
             $this->productService->updateProductStatus($p_id, 'Draft');
             exit;
             break;
         case 'delete_resource':
             $row_id = \Input::get('row_id');
             if ($this->productService->deleteProductResource($row_id)) {
                 $this->productService->updateProductStatus($p_id, 'Draft');
                 echo json_encode(array('result' => 'success', 'row_id' => $row_id));
             } else {
                 echo json_encode(array('result' => 'failed', 'row_id' => $row_id));
             }
             exit;
             break;
         case 'order_resource':
             $resourcednd_arr = \Input::get('resourcednd');
             $this->productService->updateProductResourceImageDisplayOrder($resourcednd_arr);
             // set status is not called since only re-ordering
             exit;
             break;
         case 'upload_resource_file':
             // the download file in zip format
             $resource_type = 'Archive';
             $this->productAddService->product_media_type = 'archive';
             $this->productAddService->setAllowedUploadFormats('archive');
             $this->productAddService->setMaxUploadSize('archive');
             $resource_count = ProductResource::whereRaw('product_id = ? AND resource_type = ? ', array($p_id, $this->productAddService->product_media_type))->count();
             if ($resource_count == 0) {
                 $file_info = array();
                 $file = \Input::file('uploadfile');
                 $upload_file_name = $file->getClientOriginalName();
                 $upload_status = $this->productAddService->uploadMediaFile('uploadfile', $this->productAddService->product_media_type, $file_info, true);
                 if ($upload_status['status'] == 'success') {
                     $resource_arr = array('product_id' => $p_id, 'resource_type' => $resource_type, 'server_url' => $file_info['server_url'], 'filename' => $file_info['filename_no_ext'], 'ext' => $file_info['ext'], 'title' => $file_info['title'], 'width' => $file_info['width'], 'height' => $file_info['height'], 't_width' => $file_info['t_width'], 't_height' => $file_info['t_height'], 'l_width' => $file_info['l_width'], 'l_height' => $file_info['l_height'], 'is_downloadable' => $file_info['is_downloadable']);
                     $resource_id = $this->productService->insertResource($resource_arr);
                     if ($file_info['title'] != '') {
                         $download_filename = preg_replace('/[^0-9a-z\\.\\_\\-)]/i', '', $file_info['title']) . '.' . $file_info['ext'];
                     } else {
                         $download_filename = md5($p_id) . '.' . $file_info['ext'];
                     }
                     echo json_encode(array('status' => 'success', 'server_url' => $file_info['server_url'], 'download_url' => \URL::action('Agriya\\Webshoppack\\AdminProductAddController@getProductActions') . '?action=download_file&product_id=' . $p_id, 'filename' => $download_filename, 't_width' => $file_info['t_width'], 't_height' => $file_info['t_height'], 'title' => $file_info['title'], 'resource_id' => $resource_id, 'is_downloadable' => $file_info['is_downloadable']));
                     $this->productService->updateProductStatus($p_id, 'Draft');
                 } else {
                     echo json_encode(array('status' => 'error', 'error_message' => $upload_status['error_message'], 'filename' => $upload_file_name));
                 }
             } else {
                 echo json_encode(array('status' => 'error', 'error_message' => trans('webshoppack::product.products_max_file'), 'filename' => ''));
             }
             exit;
             break;
         case 'check_user':
             $user_code = \Input::get('user_code');
             $user_id = CUtil::getUserId($user_code);
             if ($user_id != "") {
                 $user_details = CUtil::getUserDetails($user_id);
                 if (count($user_details) > 0) {
                     if (!$this->productAddService->checkIsShopOwner($user_id)) {
                         echo json_encode(array('status' => 'error', 'message' => trans('webshoppack::product.invalid_seller_usercode')));
                     } else {
                         $section_options = $this->productAddService->getProductUserSections($user_id);
                         echo json_encode(array('status' => 'success', 'section_options' => $section_options));
                     }
                 } else {
                     echo json_encode(array('status' => 'error', 'message' => trans('webshoppack::product.invalid_user_code')));
                 }
             } else {
                 echo json_encode(array('status' => 'error', 'message' => trans('webshoppack::product.invalid_user_code')));
             }
             exit;
             break;
     }
 }
 public function addProduct($input_arr)
 {
     $p_id = 0;
     if (count($input_arr) > 0) {
         $user_id = CUtil::getUserId($input_arr['user_code']);
         $product_code = CUtil::generateRandomUniqueCode('P', 'product', 'product_code');
         $url_slug = \Str::slug($input_arr['product_name']);
         $data_arr = array('product_code' => $product_code, 'product_name' => $input_arr['product_name'], 'product_description' => $input_arr['product_description'], 'meta_title' => '', 'meta_keyword' => '', 'meta_description' => '', 'product_highlight_text' => $input_arr['product_highlight_text'], 'demo_url' => $input_arr['demo_url'], 'demo_details' => $input_arr['demo_details'], 'product_tags' => $input_arr['product_tags'], 'user_section_id' => $input_arr['user_section_id'], 'product_preview_type' => $input_arr['product_preview_type'], 'product_status' => 'Draft', 'product_price_currency' => \Config::get('webshoppack::site_default_currency'), 'product_category_id' => $input_arr['my_category_id'], 'url_slug' => isset($input_arr['url_slug']) ? $input_arr['url_slug'] : $url_slug, 'product_added_date' => \DB::raw('NOW()'), 'last_updated_date' => \DB::raw('NOW()'), 'product_user_id' => $user_id);
         $p_id = Product::insertGetId($data_arr);
         //To add dumb data for product image
         $p_img_arr = array('product_id' => $p_id);
         $p_img_id = ProductImage::insertGetId($p_img_arr);
     }
     return $p_id;
 }