\administrator\components\com_virtuemart\models\vendor.php
locate this function:
- Code: Select all
/**
* Find the user id given a vendor id
*
* @author Max Milbers
* @param int $virtuemart_vendor_id
* @return int $virtuemart_user_id
*/
static function getUserIdByVendorId ($vendorId) {
//this function is used static, needs its own db
if (empty($vendorId)) {
return;
} else {
$db = JFactory::getDBO ();
$query = 'SELECT `virtuemart_user_id` FROM `#__virtuemart_vmusers` WHERE `virtuemart_vendor_id`=' . (int)$vendorId;
$db->setQuery ($query);
$result = $db->loadResult ();
$err = $db->getErrorMsg ();
if (!empty($err)) {
vmError ('getUserIdByVendorId ' . $err, 'Failed to retrieve user id by vendor');
}
return (isset($result) ? $result : 0);
}
}
and update it to this:
- Code: Select all
/**
* Find the user id given a vendor id
*
* @author Max Milbers
* @param int $virtuemart_vendor_id
* @return int $virtuemart_user_id
*/
static function getUserIdByVendorId ($vendorId) {
//this function is used static, needs its own db
if (empty($vendorId)) {
return;
} else {
$db = JFactory::getDBO ();
$query = 'SELECT * FROM `#__virtuemart_vmusers`';
$db->setQuery($query);
$res = $db->loadAssocList();
//var_dump($res); die();
$query = 'SELECT `virtuemart_user_id` FROM `#__virtuemart_vmusers` as vmu, `#__users` as ju WHERE `virtuemart_vendor_id`=' . (int)$vendorId.' and ju.id = vmu.virtuemart_user_id and vmu.user_is_vendor = 1 limit 0,1';
$db->setQuery ($query);
$result = $db->loadResult ();
$err = $db->getErrorMsg ();
if (!empty($err)) {
vmError ('getUserIdByVendorId ' . $err, 'Failed to retrieve user id by vendor');
}
return (isset($result) ? $result : 0);
}
}
The new query will:
- make sure that the user also exists in joomla (#__users)
- will be faster as it's using limit clause on non indexed column and thus full table search is not necessary
- double checks if the user is really vendor
best regards, stan