function onAfterProductUpdate(&$product, $create = false) { $app = JFactory::getApplication(); $vendor = null; if (!$app->isAdmin()) { if (!defined('HIKAMARKET_COMPONENT')) { return; } $marketConfig = hikamarket::config(); if (!$marketConfig->get('frontend_edition', 0)) { return; } if (!hikamarket::acl('product_edit_plugin_shippingprices')) { return; } $vendor = hikamarket::loadVendor(false); } $formData = JRequest::getVar('shipping_prices', array(), '', 'array'); if (empty($formData)) { return; } if (!$app->isAdmin()) { if (isset($formData[$product->product_id])) { $formData = $formData[$product->product_id]; } else { if (isset($formData[0]) && $create) { $formData = $formData[0]; } else { $formData = array(); } } } if (empty($product->product_id)) { return; } $extra_filters = ''; if ($vendor !== null && $vendor > 1) { $extra_filters = ' AND a.shipping_vendor_id IN (-1, 0, ' . (int) $vendor . ') '; } $db = JFactory::getDBO(); $query = 'SELECT b.*, a.*, c.currency_symbol FROM ' . hikashop_table('shipping') . ' AS a INNER JOIN ' . hikashop_table('shipping_price') . ' AS b ON a.shipping_id = b.shipping_id INNER JOIN ' . hikashop_table('currency') . ' AS c ON c.currency_id = a.shipping_currency_id ' . 'WHERE a.shipping_params LIKE ' . $db->Quote('%s:20:"shipping_per_product";s:1:"1"%') . ' AND b.shipping_price_ref_id = ' . $product->product_id . ' AND b.shipping_price_ref_type = \'product\' ' . $extra_filters . 'ORDER BY a.shipping_id, b.shipping_price_min_quantity'; $db->setQuery($query); $shippings = $db->loadObjectList('shipping_price_id'); $toRemove = array_keys($shippings); if (!empty($toRemove)) { $toRemove = array_combine($toRemove, $toRemove); } $toInsert = array(); $checks = array(); foreach ($formData as &$data) { if (is_string($data)) { $data = null; } else { if (empty($checks[$data['shipping_id']])) { $checks[$data['shipping_id']] = array(); } if (!isset($checks[$data['shipping_id']][$data['qty']])) { $checks[$data['shipping_id']][$data['qty']] = true; } else { $data = null; } } unset($data); } unset($checks); foreach ($formData as $data) { if ($data == null) { continue; } $shipping = null; if (!empty($data['id']) && isset($shippings[$data['id']])) { if (empty($data['value']) && empty($data['fee'])) { continue; } $shipping = $shippings[$data['id']]; unset($toRemove[$data['id']]); if (empty($data['qty']) || (int) $data['qty'] < 1) { $data['qty'] = 1; } if ((int) $shipping->shipping_price_min_quantity != (int) $data['qty'] || (double) $shipping->shipping_price_value != (double) $data['value'] || (double) $shipping->shipping_fee_value != (double) $data['fee']) { $query = 'UPDATE ' . hikashop_table('shipping_price') . ' SET shipping_price_min_quantity = ' . (int) $data['qty'] . ', shipping_price_value = ' . (double) $data['value'] . ', shipping_fee_value = ' . (double) $data['fee'] . ' WHERE shipping_price_id = ' . $data['id'] . ' AND shipping_price_ref_id = ' . $product->product_id . ' AND shipping_price_ref_type = \'product\''; $db->setQuery($query); $db->query(); } } else { if ((!empty($data['value']) || !empty($data['fee'])) && !empty($data['shipping_id'])) { if (empty($data['qty']) || (int) $data['qty'] < 1) { $data['qty'] = 1; } $toInsert[] = (int) $data['shipping_id'] . ',' . $product->product_id . ',\'product\',' . (int) $data['qty'] . ',' . (double) $data['value'] . ',' . (double) $data['fee']; } } } if (!empty($toRemove)) { $db->setQuery('DELETE FROM ' . hikashop_table('shipping_price') . ' WHERE shipping_price_ref_id = ' . $product->product_id . ' AND shipping_price_ref_type = \'product\' AND shipping_price_id IN (' . implode(',', $toRemove) . ')'); $db->query(); } if (!empty($toInsert)) { $db->setQuery('INSERT IGNORE INTO ' . hikashop_table('shipping_price') . ' (`shipping_id`,`shipping_price_ref_id`,`shipping_price_ref_type`,`shipping_price_min_quantity`,`shipping_price_value`,`shipping_fee_value`) VALUES (' . implode('),(', $toInsert) . ')'); $db->query(); } }