Exemple #1
0
 /**
  * For a given product, tells if it depends on the physical (usable) stock
  *
  * @param int $product_id
  * @param int $shop_id Optional : gets context if null @see Context::getContext()
  * @return bool : depends on stock @see $depends_on_stock
  */
 public static function dependsOnStock($product_id, $shop_id = null)
 {
     if (!JeproshopTools::isUnsignedInt($product_id)) {
         return false;
     }
     $db = JFactory::getDBO();
     $query = "SELECT depends_on_stock FROM " . $db->quoteName('#__jeproshop_stock_available') . " WHERE product_id = " . (int) $product_id;
     $query .= " AND product_attribute_id = 0 " . JeproshopStockAvailableModelStockAvailable::addShopRestriction($shop_id);
     $db->setQuery($query);
     return $db->loadResult();
 }
Exemple #2
0
 /**
  * @param type $product_alias
  * @param int|\type $product_attribute
  * @param bool|\type $inner_join
  * @param JeproshopShopModelShop $shop
  * @return string
  */
 public static function sqlStock($product_alias, $product_attribute = 0, $inner_join = FALSE, JeproshopShopModelShop $shop = NULL)
 {
     $db = JFactory::getDBO();
     $shop_id = $shop !== NULL ? (int) $shop->shop_id : NULL;
     $query = ($inner_join ? " INNER " : " LEFT ") . "JOIN " . $db->quoteName('#__jeproshop_stock_available');
     $query .= " AS stock ON(stock.product_id = " . $db->escape($product_alias) . ".product_id";
     if (!is_null($product_attribute)) {
         if (!JeproshopCombinationModelCombination::isFeaturePublished()) {
             $query .= " AND stock.product_attribute_id = 0";
         } elseif (is_numeric($product_attribute)) {
             $query .= " AND stock.product_attribute_id = " . $product_attribute;
         } elseif (is_string($product_attribute)) {
             $query .= " AND stock.product_attribute_id = IFNULL(" . $db->quoteName($db->escape($product_attribute)) . ".product_attribute_id, 0)";
         }
     }
     $query .= JeproshopStockAvailableModelStockAvailable::addShopRestriction($shop_id, 'stock') . ")";
     return $query;
 }
Exemple #3
0
 /**
  * Removes a given product from the stock available
  *
  * @param int $product_id
  * @param int $product_attribute_id Optional
  * @param mixed $shop shop id or shop object Optional
  */
 public static function removeProductFromStockAvailable($product_id, $product_attribute_id = null, $shop = null)
 {
     if (!JeproshopTools::isUnsignedInt($product_id)) {
         return false;
     }
     $db = JFactory::getDBO();
     if (JeproshopShopModelShop::getShopContext() == JeproshopShopModelShop::CONTEXT_SHOP) {
         if (JeproshopShopModelShop::getContextShopGroup()->share_stock == 1) {
             $product_attribute_sql = '';
             if ($product_attribute_id !== null) {
                 $product_attribute_sql = '_attribute';
                 $product_attribute_id_sql = $product_attribute_id;
             } else {
                 $product_attribute_id_sql = $product_id;
             }
             $query = "SELECT COUNT(*) FROM " . $db->quoteName('#__jeproshop_product' . $product_attribute_sql . '_shop') . " WHERE " . $db->quoteName('product' . $product_attribute_sql . '_id') . " = ";
             $query .= (int) $product_attribute_id_sql . " AND " . $db->quoteName('shop_id') . " IN (" . implode(',', array_map('intval', JeproshopShopModelShop::getContextListShopIds(JeproshopShopModelShop::SHARE_STOCK))) . ")";
             $db->setQuery($query);
             $result = (int) $db->loadResult();
             if ($result) {
                 return true;
             }
         }
     }
     $query = "DELETE FROM " . $db->quoteName('#__jeproshop_stock_available') . " WHERE " . $db->quoteName('product_id') . " = " . (int) $product_id;
     $query .= ($product_attribute_id ? " AND " . $db->quoteName('product_attribute_id') . " = " . (int) $product_attribute_id : "") . JeproshopStockAvailableModelStockAvailable::addShopRestriction(null, $shop);
     $db->setQuery($query);
     $res = $db->query();
     if ($product_attribute_id) {
         if ($shop === null || !JeproshopTools::isLoadedObject($shop, 'shop_id')) {
             $shop_datas = new Object();
             JeproshopStockAvailableModelStockAvailable::addSqlShopParams($shop_datas);
             $shop_id = (int) $shop_datas->shop_id;
         } else {
             $shop_id = (int) $shop->shop_id;
         }
         $stock_available = new JeproshopStockAvailableModelStockAvailable();
         $stock_available->product_id = (int) $product_id;
         $stock_available->product_attribute_id = (int) $product_id;
         $stock_available->shop_id = (int) $shop_id;
         $stock_available->postSave();
     }
     JeproshopCache::clean('jeproshop_stock_available_get-quantity_Available_by_product_' . (int) $product_id . '_*');
     return $res;
 }
Exemple #4
0
 function getProductList(JeproshopContext $context = NULL)
 {
     jimport('joomla.html.pagination');
     $db = JFactory::getDBO();
     $app = JFactory::getApplication();
     $option = $app->input->get('option');
     $view = $app->input->get('view');
     if (!$context) {
         $context = JeproshopContext::getContext();
     }
     $limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->getCfg('list_limit'), 'int');
     $limit_start = $app->getUserStateFromRequest($option . $view . '.limitstart', 'limitstart', 0, 'int');
     $lang_id = $app->getUserStateFromRequest($option . $view . '.lang_id', 'lang_id', $context->language->lang_id, 'int');
     $shop_id = $app->getUserStateFromRequest($option . $view . '.shop_id', 'shop_id', $context->shop->shop_id, 'int');
     $shop_group_id = $app->getUserStateFromRequest($option . $view . '.shop_group_id', 'shop_group_id', $context->shop->shop_group_id, 'int');
     $category_id = $app->getUserStateFromRequest($option . $view . '.cat_id', 'cat_id', 0, 'int');
     $order_by = $app->getUserStateFromRequest($option . $view . '.order_by', 'order_by', 'date_add', 'string');
     $order_way = $app->getUserStateFromRequest($option . $view . '.order_way', 'order_way', 'ASC', 'string');
     $published = $app->getUserStateFromRequest($option . $view . '.published', 'published', 0, 'string');
     $product_attribute_id = $app->getUserStateFromRequest($option . $view . '.product_attribute_id', 'product_attribute_id', 0, 'int');
     if (JeproshopShopModelShop::isFeaturePublished() && $context->cookie->products_filter_category_id) {
         $category = new JeproshopCategoryModelCategory((int) $context->cookie->products_filter_category_id);
         if (!$category->inShop()) {
             $context->cookie->products_filter_category_id = null;
             $app->redirect('index.php?option=com_jeproshop&view=product');
         }
     }
     //Join categories table
     $category_id = (int) $app->input->get('product_filter_category_lang!name');
     if ($category_id) {
         $category = new JeproshopCategoryModelCategory($category_id);
         $app->input->set('product_filter_category_lang!name', $category->name[$context->language->lang_id]);
     } else {
         $category_id = $app->input->get('category_id');
         $current_category_id = null;
         if ($category_id) {
             $current_category_id = $category_id;
             $context->cookie->products_filter_category_id = $category_id;
         } elseif ($category_id = $context->cookie->products_filter_category_id) {
             $current_category_id = $category_id;
         }
         if ($current_category_id) {
             $category = new JeproshopCategoryModelCategory((int) $current_category_id);
         } else {
             $category = new JeproshopCategoryModelCategory();
         }
     }
     $join_category = false;
     if (JeproshopTools::isLoadedObject($category, 'category_id') && empty($filter)) {
         $join_category = true;
     }
     $shop_id = JeproshopShopModelShop::isFeaturePublished() && JeproshopShopModelShop::getShopContext() == JeproshopShopModelShop::CONTEXT_SHOP ? (int) $this->context->shop->shop_id : "product." . $db->quoteName('default_shop_id');
     $join = " LEFT JOIN " . $db->quoteName('#__jeproshop_image') . " AS image ON (image." . $db->quoteName('product_id') . " = product.";
     $join .= $db->quoteName('product_id') . ") LEFT JOIN " . $db->quoteName('#__jeproshop_stock_available') . " AS stock_available ON (stock_available.";
     $join .= $db->quoteName('product_id') . " = product." . $db->quoteName('product_id') . " AND stock_available." . $db->quoteName('product_attribute_id');
     $join .= " = 0 " . JeproshopStockAvailableModelStockAvailable::addShopRestriction(null, 'stock_available') . ") LEFT JOIN " . $db->quoteName('#__jeproshop_product_shop');
     $join .= " AS product_shop ON (product." . $db->quoteName('product_id') . " = product_shop." . $db->quoteName('product_id') . " AND product_shop." . $db->quoteName('shop_id');
     $join .= " = " . $shop_id . ") LEFT JOIN " . $db->quoteName('#__jeproshop_category_lang') . " AS category_lang ON (product_shop." . $db->quoteName('default_category_id');
     $join .= " = category_lang." . $db->quoteName('category_id') . " AND product_lang." . $db->quoteName('lang_id') . " = category_lang." . $db->quoteName('lang_id') . " AND category_lang.";
     $join .= $db->quoteName('shop_id') . " = " . $shop_id . ") LEFT JOIN  " . $db->quoteName('#__jeproshop_shop') . " AS shop ON (shop." . $db->quoteName('shop_id') . " = " . $shop_id;
     $join .= ")\tLEFT JOIN  " . $db->quoteName('#__jeproshop_image_shop') . " AS image_shop ON (image_shop." . $db->quoteName('image_id') . " = image." . $db->quoteName('image_id');
     $join .= " AND image_shop." . $db->quoteName('cover') . " = 1 AND image_shop." . $db->quoteName('shop_id') . " = " . $shop_id . ") LEFT JOIN  " . $db->quoteName('#__jeproshop_product_download');
     $join .= " AS product_download ON (product_download." . $db->quoteName('product_id') . " = product." . $db->quoteName('product_id') . ") ";
     $select = "shop." . $db->quoteName('shop_name') . " AS shop_name, product." . $db->quoteName('default_shop_id') . ", MAX(image_shop." . $db->quoteName('image_id') . ") AS image_id, category_lang.";
     $select .= $db->quoteName('name') . " AS category_name, product_shop." . $db->quoteName('price') . ", 0 AS final_price, product." . $db->quoteName('is_virtual') . ", product_download.";
     $select .= $db->quoteName('nb_downloadable') . ", stock_available." . $db->quoteName('quantity') . " AS stock_available_quantity, product_shop." . $db->quoteName('published');
     $select .= ", IF(stock_available." . $db->quoteName('quantity') . " <= 0, 1, 0) badge_danger";
     if ($join_category) {
         $join .= " INNER JOIN " . $db->quoteName('#__jeproshop_category_product') . " product_category ON (product_category." . $db->quoteName('product_id') . " = product.";
         $join .= $db->quoteName('product_id') . " AND product_category." . $db->quoteName('category_id') . " = " . (int) $category->category_id . ") ";
         $select .= " , product_category." . $db->quoteName('position') . ", ";
     }
     $group = " GROUP BY product_shop." . $db->quoteName('product_id');
     $use_limit = true;
     if ($limit === false) {
         $use_limit = false;
     }
     // Add SQL shop restriction
     $select_shop = $join_shop = $where_shop = $where = $filter = "";
     if ($context->controller->shopLinkType) {
         $select_shop = ", shop.shop_name AS shopname ";
         $join_shop = ") LEFT JOIN " . $db->quoteName('#__jeproshop_shop') . " AS shop ON product.shop_id = shop.shop_id";
         $where_shop = JeproshopShopModelShop::addSqlRestriction($this->shopShareDatas, 'product');
         //, $this->shopLinkType
     }
     /* Query in order to get results with all fields */
     $lang_join = '';
     if ($lang_id) {
         $lang_join = " LEFT JOIN " . $db->quoteName('#__jeproshop_product_lang') . " AS product_lang ON (product_lang.";
         $lang_join .= $db->quoteName('product_id') . " = product." . $db->quoteName('product_id') . " AND product_lang.";
         $lang_join .= $db->quoteName('lang_id') . " = " . (int) $lang_id;
         if (!JeproshopShopModelShop::isFeaturePublished()) {
             $lang_join .= " AND product_lang." . $db->quoteName('shop_id') . " = 1";
         } elseif (JeproshopShopModelShop::getShopContext() == JeproshopShopModelShop::CONTEXT_SHOP) {
             //$lang_join .= " AND product_lang." . $db->quoteName('shop_id') . " = " . (int)$shop_lang_id;
         } else {
             $lang_join .= " AND product_lang." . $db->quoteName('shop_id') . " = product.default_shop_id";
         }
         $lang_join .= ")";
     }
     if ($context->controller->multishop_context && JeproshopShopModelShop::isTableAssociated('product')) {
         if (JeproshopShopModelShop::getShopContext() != JeproshopShopModelShop::CONTEXT_ALL || !$this->context->employee->isSuperAdmin()) {
             $test_join = !preg_match('/`?' . preg_quote('#__jeproshop_product_shop') . '`? *product_shop/', $join);
             if (JeproshopShopModelShop::isFeaturePublished() && $test_join && JeproshopShopModelShop::isTableAssociated('product')) {
                 $where .= " AND product.product_id IN (\tSELECT product_shop.product_id FROM " . $db->quoteName('#__jeproshop_product_shop');
                 $where .= " AS product_shop WHERE product_shop.shop_id IN (";
                 $where .= implode(', ', JeproshopShopModelShop::getContextListShopIds()) . "))";
             }
         }
     }
     $having_clause = '';
     if (isset($filterHaving) || isset($having)) {
         $having_clause = " HAVING ";
         if (isset($filterHaving)) {
             $having_clause .= ltrim($filterHaving, " AND ");
         }
         if (isset($having)) {
             $having_clause .= $having . " ";
         }
     }
     do {
         $query = "SELECT SQL_CALC_FOUND_ROWS product." . $db->quoteName('product_id') . ", product_lang." . $db->quoteName('name') . ", product.";
         $query .= $db->quoteName('reference') . ", " . $select . $select_shop . " FROM " . $db->quoteName('#__jeproshop_product') . " AS product ";
         $query .= $lang_join . $join . $join_shop . " WHERE 1 " . $where . $filter . $where_shop . $group . $having_clause . " ORDER BY ";
         $query .= (str_replace('`', '', $order_by) == 'product_id' ? "product." : " product.") . $db->quoteName($order_by) . " " . $db->escape($order_way);
         $db->setQuery($query);
         $total = count($db->loadObjectList());
         $query .= $use_limit === true ? " LIMIT " . (int) $limit_start . ", " . (int) $limit : "";
         $db->setQuery($query);
         $products = $db->loadObjectList();
         if ($use_limit == true) {
             $limit_start = (int) $limit_start - (int) $limit;
             if ($limit_start < 0) {
                 break;
             }
         } else {
             break;
         }
     } while (empty($products));
     $this->pagination = new JPagination($total, $limit_start, $limit);
     return $products;
 }