Esempio n. 1
0
 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, ', ');
     }
 }
Esempio n. 2
0
 /**
  * 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();
 }
Esempio n. 3
0
 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;
 }
Esempio n. 4
0
 /**
  * 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();
 }
Esempio n. 5
0
 /**
  * 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];
 }
Esempio n. 6
0
 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);
                     }
                 }
             }
         }
     }
 }
Esempio n. 7
0
 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);
             }
         }
     }
 }