function OPCstoreAddress(&$cart, $data, $user_id = 0) { $x = JRequest::getVar('ship_to_info_id', ''); if (!empty($x) && is_numeric($x)) { $data['shipto_virtuemart_userinfo_id'] = (int) $x; } $data['shipto_virtuemart_userinfo_id'] = (int) $data['shipto_virtuemart_userinfo_id']; //$user =JFactory::getUser(); $this->addModelPath(JPATH_VM_ADMINISTRATOR . DS . 'models'); require_once JPATH_ROOT . DS . 'components' . DS . 'com_onepage' . DS . 'helpers' . DS . 'mini.php'; $userModel = OPCmini::getModel('user'); $user = JFactory::getUser(); $userinfo = $userModel->getTable('userinfos'); if ($data['address_type'] == 'BT') { $userfielddata = VirtueMartModelUser::_prepareUserFields($data, 'BT'); if (!$userinfo->bindChecknStore($userfielddata)) { vmError('storeAddress ' . $userinfo->getError()); } } // Check for fields with the the 'shipto_' prefix; that means a (new) shipto address. $shiptonew = JRequest::getVar('opc_st_changed_new', false); $shiptologged = JRequest::getVar('shipto_logged'); // shipto_logged // special case when using sinel ST address: $skipc = false; $shipto_logged = JRequest::getVar('shipto_logged', null); $shipto_logged = (int) $shipto_logged; if (!empty($shipto_logged)) { $q = 'select address_type from #__virtuemart_userinfos where virtuemart_userinfo_id = ' . $data['shipto_virtuemart_userinfo_id'] . ' limit 0,1'; $db = JFactory::getDBO(); $db->setQuery($q); $res2 = $db->loadResult(); if (!empty($res2) && $res2 != 'bt') { $data['shipto_virtuemart_userinfo_id'] = $shipto_logged; $skipc = true; } } else { if (!$skipc) { $q = 'select address_type from #__virtuemart_userinfos where virtuemart_userinfo_id = ' . $data['shipto_virtuemart_userinfo_id'] . ' limit 0,1'; $db = JFactory::getDBO(); $db->setQuery($q); $res = $db->loadResult(); if (empty($res)) { // non existent update to ST unset($data['shipto_virtuemart_userinfo_id']); $data['shipto_virtuemart_userinfo_id'] = 0; } if (strtolower($res) == 'bt') { // trying to update ST with improper ID $data['shipto_virtuemart_userinfo_id'] = 0; } } } if (isset($data['shipto_virtuemart_userinfo_id'])) { $dataST = array(); $_pattern = '/^shipto_/'; foreach ($data as $_k => $_v) { if (preg_match($_pattern, $_k)) { $_new = preg_replace($_pattern, '', $_k); $dataST[$_new] = $_v; } } $userinfo = $userModel->getTable('userinfos'); if (isset($dataST['virtuemart_userinfo_id']) and $dataST['virtuemart_userinfo_id'] != 0) { require_once JPATH_ROOT . DS . 'components' . DS . 'com_onepage' . DS . 'helpers' . DS . 'mini.php'; if (!OPCmini::isSuperVendor()) { $userinfo->load($dataST['virtuemart_userinfo_id']); } } if (empty($userinfo->virtuemart_user_id)) { require_once JPATH_ROOT . DS . 'components' . DS . 'com_onepage' . DS . 'helpers' . DS . 'mini.php'; if (!OPCmini::isSuperVendor()) { $dataST['virtuemart_user_id'] = $user->id; } else { if (isset($data['virtuemart_user_id'])) { $dataST['virtuemart_user_id'] = (int) $data['virtuemart_user_id']; } else { //Disadvantage is that admins should not change the ST address in the FE (what should never happen anyway.) $dataST['virtuemart_user_id'] = $user->id; } } } else { if ($userinfo->virtuemart_user_id != $user->id) { return; } } $dataST['address_type'] = 'ST'; $userfielddata = VirtueMartModelUser::_prepareUserFields($dataST, 'ST'); if (!$userinfo->bindChecknStore($userfielddata)) { vmError($userinfo->getError()); } if (!empty($userinfo->virtuemart_userinfo_id)) { $shipto = JRequest::setVar('shipto', (int) $userinfo->virtuemart_userinfo_id); $cart->selected_shipto = $userinfo->virtuemart_userinfo_id; $cart->STsameAsBT = 0; } } return $userinfo->virtuemart_userinfo_id; }