public static function cacheSomeAttributesLists($product_attribute_list, $lang_id) { if (!JeproshopCombinationModelCombination::isFeaturePublished()) { return; } $product_attribute_implode = array(); foreach ($product_attribute_list as $product_attribute_id) { if ((int) $product_attribute_id && !array_key_exists($product_attribute_id . '_' . $lang_id, self::$_attributesLists)) { $product_attribute_implode[] = (int) $product_attribute_id; $attribute = new JObject(); $attribute->attributes = ''; $attribute->attributes_small = ''; self::$_attributesLists[(int) $product_attribute_id . '_' . $lang_id] = $attribute; } } if (!count($product_attribute_implode)) { return; } $db = JFactory::getDBO(); $query = "SELECT product_attribute_combination." . $db->quoteName('product_attribute') . ", attribute_group_lang." . $db->quoteName('public_name'); $query .= " AS public_group_name, attribute_lang." . $db->quoteName('name') . " AS attribute_name FROM " . $db->quoteName('#__jeproshop_product_attribute_combination'); $query .= " AS product_attribute_combination LEFT JOIN " . $db->quoteName('#__jeproshop_attribute') . " AS attribute ON (attribute." . $db->quoteName('attribute_id'); $query .= " = product_attribute_combination." . $db->quoteName('attribute_id') . " LEFT JOIN " . $db->quoteName('#__jeproshop_attribute_group') . " AS attribute_group "; $query .= " ON attribute_group." . $db->quoteName('attribute_group_id') . " = attribute." . $db->quoteName('attribute_group_id') . " LEFT JOIN " . $db->quoteName('#__jeproshop_attribute_lang'); $query .= " AS attribute_lang ON ( attribute." . $db->quoteName('attribute_id') . " = attribute_lang." . $db->quoteName('attribute_id') . " AND attribute_lang."; $query .= $db->quoteName('lang_id') . " = " . (int) $lang_id . ") LEFT JOIN " . $db->quoteName('#__jeproshop_attribute_group_lang') . " AS attribute_group_lang ON ( "; $query .= "attribute_group." . $db->quoteName('attribute_group_id') . " = attribute_group_lang." . $db->quoteName('attribute_group_id') . " AND attribute_group_lang."; $query .= $db->quoteName('lang_id') . " = " . (int) $lang_id . ") WHERE product_attribute_combination." . $db->quoteName('product_attribute_id') . " IN ("; $query .= implode(',', $product_attribute_implode) . ") ORDER BY attribute_group_lang." . $db->quoteName('public_name') . " ASC "; $db->setQuery($query); $result = $db->loadObjectList(); foreach ($result as $row) { self::$_attributesLists[$row->product_attribute_id . '_' . $lang_id]->attributes .= $row->public_group_name . ' : ' . $row->attribute_name . ', '; self::$_attributesLists[$row->product_attribute_id . '_' . $lang_id]->attributes_small .= $row->attribute_name . ', '; } foreach ($product_attribute_implode as $product_attribute_id) { self::$_attributesLists[$product_attribute_id . '-' . $lang_id]->attributes = rtrim(self::$_attributesLists[$product_attribute_id . '_' . $lang_id]->attributes, ', '); self::$_attributesLists[$product_attribute_id . '-' . $lang_id]->attributes_small = rtrim(self::$_attributesLists[$product_attribute_id . '_' . $lang_id]->attributes_small, ', '); } }
/** * Get all attributes groups for a given language * * @param integer $lang_id Language id * @return array Attributes groups */ public static function getAttributesGroups($lang_id) { if (!JeproshopCombinationModelCombination::isFeaturePublished()) { return array(); } $db = JFactory::getDBO(); $query = "SELECT DISTINCT attribute_group_lang." . $db->quoteName('name') . ", attribute_group.*, "; $query .= "attribute_group_lang.* FROM " . $db->quoteName('#__jeproshop_attribute_group') . " AS "; $query .= "attribute_group " . JeproshopShopModelShop::addSqlAssociation('attribute_group') . " LEFT JOIN "; $query .= $db->quoteName('#__jeproshop_attribute_group_lang') . " AS attribute_group_lang ON (attribute_group."; $query .= $db->quoteName('attribute_group_id') . " = attribute_group_lang." . $db->quoteName('attribute_group_id'); $query .= " AND " . $db->quoteName('lang_id') . " = " . (int) $lang_id . ") ORDER BY " . $db->quoteName('name') . " ASC"; $db->setQuery($query); return $db->loadObjectList(); }
public static function getAttributes($db, $product_id, $lang_id) { if (!JeproshopCombinationModelCombination::isFeaturePublished()) { return ''; } $attributes = ''; $query = "SELECT attribute_lang.name FROM " . $db->quoteName('#__jeproshop_product_attribute') . " AS product_attribute "; $query .= "INNER JOIN " . $db->quoteName('#__jeproshop_product_attribute_combination') . " AS _product_attribute_combination"; $query .= " ON product_attribute.product_attribute_id = product_attribute_combination.product_attribute_id INNER JOIN "; $query .= $db->quoteName('#__jeproshop_attribute_lang') . " AS attribute_lang ON (product_attribute_combination.attribute_id"; $query .= " = attribute_lang.attribute_id AND attribute_lang.lang_id = " . (int) $lang_id . ") " . JeproshopShopModelShop::addSqlAssociation('product_attribute'); $query .= "\tWHERE product_attribute.product_id = " . (int) $product_id; $attributesArray = $db->loadObjectList(); foreach ($attributesArray as $attribute) { $attributes .= $attribute->name . ' '; } return $attributes; }
/** * Check if product has attributes combinations * * @return integer Attributes combinations number */ public function hasAttributes() { if (!JeproshopCombinationModelCombination::isFeaturePublished()) { return 0; } $db = JFactory::getDBO(); $query = "SELECT COUNT(*) FROM " . $db->quoteName('#__jeproshop_product_attribute') . " AS product_attribute "; $query .= JeproshopShopModelShop::addSqlAssociation('product_attribute') . " WHERE product_attribute." . $db->quoteName('product_id') . " = " . (int) $this->product_id; $db->setQuery($query); return $db->loadResult(); }
/** * Return cart weight * * @param $products * @return float Cart weight */ public function getTotalWeight($products = null) { if (!is_null($products)) { $total_weight = 0; foreach ($products as $product) { if (!isset($product->weight_attribute) || is_null($product->weight_attribute)) { $total_weight += $product->weight * $product->cart_quantity; } else { $total_weight += $product->weight_attribute * $product->cart_quantity; } } return $total_weight; } if (!isset(self::$_totalWeight[$this->cart_id])) { $db = JFactory::getDBO(); if (JeproshopCombinationModelCombination::isFeaturePublished()) { $query = "SELECT SUM((product." . $db->quoteName('weight') . " + product_attribute." . $db->quoteName('weight') . ") * cart_product."; $query .= $db->quoteName('quantity') . ") AS nb FROM " . $db->quoteName('#__jeproshop_cart_product') . " AS cart_product LEFT JOIN "; $query .= $db->quoteName('#__jeproshop_product') . " AS product ON (cart_product." . $db->quoteName('product_id') . " = product."; $query .= $db->quoteName('product_id') . ") LEFT JOIN " . $db->quoteName('#__jeproshop_product_attribute') . " AS product_attribute "; $query .= " ON (cart_product." . $db->quoteName('product_attribute_id') . " = product_attribute." . $db->quoteName('product_attribute_id'); $query .= ") WHERE (cart_product." . $db->quoteName('product_attribute_id') . " IS NOT NULL AND cart_product." . $db->quoteName('product_attribute_id'); $query .= " != 0) AND cart_product." . $db->quoteName('cart_id') . " = " . (int) $this->cart_id; $db->setQuery($query); $weight_product_with_attribute = $db->loadResult(); } else { $weight_product_with_attribute = 0; } $query = "SELECT SUM(product." . $db->quoteName('weight') . " * cart_product." . $db->quoteName('quantity') . ") AS nb FROM " . $db->quoteName('#__jeproshop_cart_product'); $query .= " cart_product LEFT JOIN " . $db->quoteName('#__jeproshop_product') . " AS product ON (cart_product." . $db->quoteName('product_id') . " = product."; $query .= $db->quoteName('product_id') . ") WHERE (cart_product." . $db->quoteName('product_attribute_id') . " IS NULL OR cart_product." . $db->quoteName('product_attribute_id'); $query .= " = 0) AND cart_product." . $db->quoteName('cart_id') . " = " . (int) $this->cart_id; $db->setQuery($query); $weight_product_without_attribute = $db->loadResult(); self::$_totalWeight[$this->cart_id] = round((double) $weight_product_with_attribute + (double) $weight_product_without_attribute, 3); } return self::$_totalWeight[$this->cart_id]; }
public function attribute() { $app = JFactory::getApplication(); // Don't process if the combination fields have not been submitted if (!JeproshopCombinationModelCombination::isFeaturePublished() || !$app->input->get('attribute_combination_list')) { return; } if (Validate::isLoadedObject($product = $this->object)) { if ($this->isProductFieldUpdated('attribute_price') && (!Tools::getIsset('attribute_price') || Tools::getIsset('attribute_price') == null)) { $this->has_errors = Tools::displayError('The price attribute is required.'); } if (!Tools::getIsset('attribute_combination_list') || Tools::isEmpty(Tools::getValue('attribute_combination_list'))) { $this->has_errors = Tools::displayError('You must add at least one attribute.'); } $array_checks = array('reference' => 'isReference', 'supplier_reference' => 'isReference', 'location' => 'isReference', 'ean13' => 'isEan13', 'upc' => 'isUpc', 'wholesale_price' => 'isPrice', 'price' => 'isPrice', 'ecotax' => 'isPrice', 'quantity' => 'isInt', 'weight' => 'isUnsignedFloat', 'unit_price_impact' => 'isPrice', 'default_on' => 'isBool', 'minimal_quantity' => 'isUnsignedInt', 'available_date' => 'isDateFormat'); foreach ($array_checks as $property => $check) { if (Tools::getValue('attribute_' . $property) !== false && !call_user_func(array('Validate', $check), Tools::getValue('attribute_' . $property))) { $this->errors[] = sprintf(Tools::displayError('Field %s is not valid'), $property); } } if (!count($this->errors)) { if (!isset($_POST['attribute_wholesale_price'])) { $_POST['attribute_wholesale_price'] = 0; } if (!isset($_POST['attribute_price_impact'])) { $_POST['attribute_price_impact'] = 0; } if (!isset($_POST['attribute_weight_impact'])) { $_POST['attribute_weight_impact'] = 0; } if (!isset($_POST['attribute_ecotax'])) { $_POST['attribute_ecotax'] = 0; } if (Tools::getValue('attribute_default')) { $product->deleteDefaultAttributes(); } // Change existing one if (($id_product_attribute = (int) Tools::getValue('id_product_attribute')) || ($id_product_attribute = $product->productAttributeExists(Tools::getValue('attribute_combination_list'), false, null, true, true))) { if ($this->tabAccess['edit'] === '1') { if ($this->isProductFieldUpdated('available_date_attribute') && (Tools::getValue('available_date_attribute') != '' && !Validate::isDateFormat(Tools::getValue('available_date_attribute')))) { $this->errors[] = Tools::displayError('Invalid date format.'); } else { $product->updateAttribute((int) $id_product_attribute, $this->isProductFieldUpdated('attribute_wholesale_price') ? Tools::getValue('attribute_wholesale_price') : null, $this->isProductFieldUpdated('attribute_price_impact') ? Tools::getValue('attribute_price') * Tools::getValue('attribute_price_impact') : null, $this->isProductFieldUpdated('attribute_weight_impact') ? Tools::getValue('attribute_weight') * Tools::getValue('attribute_weight_impact') : null, $this->isProductFieldUpdated('attribute_unit_impact') ? Tools::getValue('attribute_unity') * Tools::getValue('attribute_unit_impact') : null, $this->isProductFieldUpdated('attribute_ecotax') ? Tools::getValue('attribute_ecotax') : null, Tools::getValue('id_image_attr'), Tools::getValue('attribute_reference'), Tools::getValue('attribute_ean13'), $this->isProductFieldUpdated('attribute_default') ? Tools::getValue('attribute_default') : null, Tools::getValue('attribute_location'), Tools::getValue('attribute_upc'), $this->isProductFieldUpdated('attribute_minimal_quantity') ? Tools::getValue('attribute_minimal_quantity') : null, $this->isProductFieldUpdated('available_date_attribute') ? Tools::getValue('available_date_attribute') : null, false); StockAvailable::setProductDependsOnStock((int) $product->id, $product->depends_on_stock, null, (int) $id_product_attribute); StockAvailable::setProductOutOfStock((int) $product->id, $product->out_of_stock, null, (int) $id_product_attribute); } } else { $this->errors[] = Tools::displayError('You do not have permission to add this.'); } } else { if ($this->tabAccess['add'] === '1') { if ($product->productAttributeExists(Tools::getValue('attribute_combination_list'))) { $this->errors[] = Tools::displayError('This combination already exists.'); } else { $id_product_attribute = $product->addCombinationEntity(Tools::getValue('attribute_wholesale_price'), Tools::getValue('attribute_price') * Tools::getValue('attribute_price_impact'), Tools::getValue('attribute_weight') * Tools::getValue('attribute_weight_impact'), Tools::getValue('attribute_unity') * Tools::getValue('attribute_unit_impact'), Tools::getValue('attribute_ecotax'), 0, Tools::getValue('id_image_attr'), Tools::getValue('attribute_reference'), null, Tools::getValue('attribute_ean13'), Tools::getValue('attribute_default'), Tools::getValue('attribute_location'), Tools::getValue('attribute_upc'), Tools::getValue('attribute_minimal_quantity'), array(), Tools::getValue('available_date_attribute')); StockAvailable::setProductDependsOnStock((int) $product->id, $product->depends_on_stock, null, (int) $id_product_attribute); StockAvailable::setProductOutOfStock((int) $product->id, $product->out_of_stock, null, (int) $id_product_attribute); } } else { $this->errors[] = Tools::displayError('You do not have permission to') . '<hr>' . Tools::displayError('edit here.'); } } if (!count($this->errors)) { $combination = new Combination((int) $id_product_attribute); $combination->setAttributes(Tools::getValue('attribute_combination_list')); // images could be deleted before $id_images = Tools::getValue('id_image_attr'); if (!empty($id_images)) { $combination->setImages($id_images); } $product->checkDefaultAttributes(); if (Tools::getValue('attribute_default')) { Product::updateDefaultAttribute((int) $product->id); if (isset($id_product_attribute)) { $product->cache_default_attribute = (int) $id_product_attribute; } if ($available_date = Tools::getValue('available_date_attribute')) { $product->setAvailableDate($available_date); } } } } } }
private function initAttributesForm() { if (!JeproshopCombinationModelCombination::isFeaturePublished()) { $settingPanelLink = '<a href="#" >' . JText::_('COM_JEPROSHOP_PERFORMANCE_LABEL') . '</a>'; JError::raiseWarning(500, JText::_('COM_JEPROSHOP_FEATURE_HAS_BEEN_DISABLED_MESSAGE') . $settingPanelLink); } elseif (JeproshopTools::isLoadedObject($this->product, 'product_id')) { if ($this->product_exists_in_shop) { if ($this->product->is_virtual) { JError: raiseWarning(500, JText::_('COM_JEPROSHOP_VIRTUAL_PRODUCT_CANNOT_HAVE_COMBINATIONS')); } else { $attribute_js = array(); $attributes = JeproshopAttributeModelAttribute::getAttributes($this->context->language->lang_id, true); if ($attributes) { foreach ($attributes as $key => $attribute) { $attribute_js[$attribute->attribute_group_id][$attribute->attribute_id] = $attribute->name; } } $this->assignRef('attributeJs', $attribute_js); $attributes_groups = JeproshopAttributeGroupModelAttributeGroup::getAttributesGroups($this->context->language->lang_id); $this->assignRef('attributes_groups', $attributes_groups); $images = JeproshopImageModelImage::getImages($this->context->language->lang_id, $this->product->product_id); $weight_unit = JeproshopSettingModelSetting::getValue('weight_unit'); $this->assignRef('weight_unit', $weight_unit); $reasons = JeproshopStockMovementReasonModelStockMovementReason::getStockMovementReasons(); $this->assignRef('reasons', $reasons); //$this->assignRef('minimal_quantity', ); $this->assignRef('available_date', $available_date); $stock_mvt_default_reason = JeproshopSettingModelSetting::getValue('default_stock_mvt_reason'); $this->assignRef('default_stock_mvt_reason', $stock_mvt_default_reason); $i = 0; /*$type = JeproshopImageTypeModelImageType::getByNameNType('%', 'products', 'height'); if (isset($type->name)){ $data->assign('imageType', $type['name']); }else $data->assign('imageType', 'small_default'); */ //$this->assignRef('imageWidth', (isset($image_type->width) ? (int)($image_type->width) : 64) + 25); foreach ($images as $k => $image) { $images[$k]->obj = new JeproshopImageModelImage($image->image_id); ++$i; } $this->assignRef('attribute_images', $images); $attributeList = $this->renderAttributesList($this->product, $this->currency); $this->assignRef('list', $attributeList); $combination_exists = JeproshopShopModelShop::isFeaturePublished() && JeproshopShopModelShop::getContextShopGroup()->share_stock && count(JeproshopAttributeGroupModelAttributeGroup::getAttributesGroups($this->context->language->lang_id)) > 0 && $this->product->hasAttributes(); $this->assignRef('combination_exists', $combination_exists); } } } }