VirtueMart Forum

VirtueMart 2 + 3 + 4 => Virtuemart Development and bug reports => Topic started by: BELGOR on September 25, 2014, 19:13:35 PM

Title: Model UserFields BUG and suggested repair
Post by: BELGOR on September 25, 2014, 19:13:35 PM
Hello
i have found little wierd if statement in Userfields Model
/administrator/components/com_virtuemart/models/userfields.php
function getUserfield
line 187

please replace
if($name !==0){
$this->_data->load($id, $name);
}
$this->_data->load($id);

with
if($name !==0){
$this->_data->load($id, $name);
} else {
$this->_data->load($id);
}


In some cases i get instead of proper userfield object just empty default object, because it is overwrited with the secon load
Typically it happened when check for agreenment in cart.
There is in cart helper function to validate chekout
$agreed = $userFieldsModel->getUserfield('agreed','name');

if(empty($this->tosAccepted) and !empty($agreed->required) and $validUserDataBT!==-1){
$redirectMsg = null;// JText::_('COM_VIRTUEMART_CART_PLEASE_ACCEPT_TOS');
$this->tosAccepted = false;
vmInfo('COM_VIRTUEMART_CART_PLEASE_ACCEPT_TOS','COM_VIRTUEMART_CART_PLEASE_ACCEPT_TOS');
return $this->redirecter('index.php?option=com_virtuemart&view=cart' , $redirectMsg);
}

I do not get $agreed field because it is loaded right and right afteroverided with second bad load
Here are 2 SQL queries that resolves during that two loads
SELECT `#__virtuemart_userfields`.*  FROM `#__virtuemart_userfields`  WHERE `#__virtuemart_userfields`.`name` = "agreed"
SELECT `#__virtuemart_userfields`.*  FROM `#__virtuemart_userfields`  WHERE `#__virtuemart_userfields`.`virtuemart_userfield_id` = "agreed"
Title: Re: Model UserFields BUG and suggested repair
Post by: Milbo on September 25, 2014, 19:50:01 PM
Thank you.

The problems was already fixed in vm3, but I did not notice that we have it already in vm2. The fix is added and will be in the next version.