public static function getPriority($product_id) { if (!JeproshopSpecificPriceModelSpecificPrice::isFeaturePublished()) { return explode(';', JeproshopSettingModelSetting::getValue('specific_price_priorities')); } if (!isset(JeproshopSpecificPriceModelSpecificPrice::$_cache_priorities[(int) $product_id])) { $db = JFactory::getDBO(); $query = "SELECT " . $db->quoteName('priority') . ", " . $db->quoteName('specific_price_priority_id') . " FROM "; $query .= $db->quoteName('#__jeproshop_specific_price_priority') . " WHERE " . $db->quoteName('product_id') . " = "; $query .= (int) $product_id . " ORDER BY " . $db->quoteName('specific_price_priority_id') . " DESC "; $db->setQuery($query); JeproshopSpecificPriceModelSpecificPrice::$_cache_priorities[(int) $product_id] = $db->loadObject(); } $priorities = JeproshopSpecificPriceModelSpecificPrice::$_cache_priorities[(int) $product_id]; if (!$priorities) { $priority = JeproshopSettingModelSetting::getValue('specific_price_priorities'); $priorities = 'customer_id;' . $priority; } else { $priorities = $priorities->priority; } return preg_split('/;/', $priorities); }
public static function getSpecificPrice($product_id, $shop_id, $currency_id, $country_id, $group_id, $quantity, $product_attribute_id = null, $customer_id = 0, $cart_id = 0, $real_quantity = 0) { if (!JeproshopSpecificPriceModelSpecificPrice::isFeaturePublished()) { return array(); } /* ** The date is not taken into account for the cache, but this is for the better because it keeps the consistency for the whole script. ** The price must not change between the top and the bottom of the page */ $db = JFactory::getDBO(); $key = (int) $product_id . '_' . (int) $shop_id . '_' . (int) $currency_id . '_' . (int) $country_id . '_' . (int) $group_id . '_' . (int) $quantity . '_' . (int) $product_attribute_id . '_' . (int) $cart_id . '_' . (int) $customer_id . '_' . (int) $real_quantity; if (!array_key_exists($key, JeproshopSpecificPriceModelSpecificPrice::$_specific_price_cache)) { $now = date('Y-m-d H:i:s'); $query = "SELECT *, " . JeproshopSpecificPriceModelSpecificPrice::getScoreQuery($product_id, $shop_id, $currency_id, $country_id, $group_id, $customer_id); $query .= " FROM " . $db->quoteName('#__jeproshop_specific_price') . " WHERE " . $db->quoteName('product_id') . " IN (0, " . (int) $product_id . ") AND "; $query .= $db->quoteName('product_attribute_id') . " IN (0, " . (int) $product_attribute_id . ") AND " . $db->quoteName('shop_id') . " IN (0, " . (int) $shop_id; $query .= ") AND " . $db->quoteName('currency_id') . " IN (0, " . (int) $currency_id . ") AND " . $db->quoteName('country_id') . " IN (0, " . (int) $country_id; $query .= ") AND " . $db->quoteName('group_id') . " IN (0, " . (int) $group_id . ") AND " . $db->quoteName('customer_id') . " IN (0, " . (int) $customer_id . ") "; $query .= "AND ( (" . $db->quoteName('from') . " = '0000-00-00 00:00:00' OR '" . $now . "' >= " . $db->quoteName('from') . ") AND (" . $db->quoteName('to'); $query .= " = '0000-00-00 00:00:00' OR '" . $now . "' <= " . $db->quoteName('to') . ") ) AND cart_id IN (0, " . (int) $cart_id . ") AND IF(" . $db->quoteName('from_quantity'); $query .= " > 1, " . $db->quoteName('from_quantity') . ", 0) <= "; $query .= JeproshopSettingModelSetting::getValue('qty_discount_on_combination') || !$cart_id || !$real_quantity ? (int) $quantity : max(1, (int) $real_quantity); $query .= " ORDER BY " . $db->quoteName('product_attribute_id') . " DESC, " . $db->quoteName('from_quantity') . " DESC, " . $db->quoteName('specific_price_rule_id'); $query .= " ASC, " . $db->quoteName('score') . " DESC"; $db->setQuery($query); JeproshopSpecificPriceModelSpecificPrice::$_specific_price_cache[$key] = $db->loadObject(); //Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query); } return JeproshopSpecificPriceModelSpecificPrice::$_specific_price_cache[$key]; }