News:

Looking for documentation? Take a look on our wiki

Main Menu

Recent posts

#21
solved the problem, now any captcha can work also on J5 and J6

components/com_virtuemart/hellpers/shopfunctionsf.php

line 1276: replace both renderCaptcha and checkCaptcha functions with this:

   /*
    * @author Davide Reitano
    */

   static public function renderCaptcha($config = 'reg_captcha', $id = 'dynamic_recaptcha_1') {

   static $counter;
   if (empty($counter)) $counter = 1;

   if ($id === 'dynamic_recaptcha_1') {
      $id = 'dynamic_recaptcha_' . $counter;
      $counter++;
   }

   if (VmConfig::get($config) and ((JFactory::getUser()->guest == 1) || (VmConfig::get($config . '_logged')))) {

      $captchaPlugin = JFactory::getConfig()->get('captcha', '');

      if ($captchaPlugin === '0') {
         $captchaPlugin = null;
      }

      JPluginHelper::importPlugin('captcha', $captchaPlugin);

      try {
         $pluginName = empty($captchaPlugin) ? '' : $captchaPlugin;

         // solo gruppo captcha, non evento globale Joomla
         vDispatcher::directTrigger('captcha', $pluginName, 'onInit', array($id));

         // nome campo STRINGA, non null
         $fieldName = 'cf-turnstile-response';

         $output = vDispatcher::directTrigger(
            'captcha',
            $pluginName,
            'onDisplay',
            array($fieldName, $id, 'required')
         );

      } catch (Exception $e) {
         JFactory::getApplication()->enqueueMessage($e->getMessage(), 'error');
         if (empty($output)) $output = array();
      }

      $out = '';

      if (is_array($output)) {
         foreach ($output as $html) {
            if (empty($html)) continue;
            $out .= $html;
         }
      } else if (is_string($output)) {
         $out .= $output;
      }

      return $out;
   }

   return '';
}

   /**
    * Check the Joomla ReCaptcha Plg
    *
    * @author Davide Reitano
    */
    static function checkCaptcha($config = 'reg_captcha') {

   if (VmConfig::get($config) and ((JFactory::getUser()->guest == 1) || (VmConfig::get($config . '_logged')))) {

      $app   = JFactory::getApplication();
      $input = $app->input;

      $captchaPlugin = JFactory::getConfig()->get('captcha', '');
      if ($captchaPlugin === '0') {
         $captchaPlugin = null;
      }

      $captchaResponse = $input->post->getString('cf-turnstile-response', '');

      if ($captchaResponse === '') {
         $captchaResponse = $input->post->getString('g-recaptcha-response', '');
      }

      if ($captchaResponse === '') {
         $captchaResponse = $input->post->getString('recaptcha_response_field', '');
      }

      if ($captchaResponse === '') {
         vmInfo('COM_VM_RECAPTCHA_ERROR');
         return false;
      }

      JPluginHelper::importPlugin('captcha', $captchaPlugin);

      try {
         $pluginName = empty($captchaPlugin) ? '' : $captchaPlugin;

         $res = vDispatcher::directTrigger(
            'captcha',
            $pluginName,
            'onCheckAnswer',
            array($captchaResponse)
         );
      }
      catch (Exception $e) {
         $errmsg = $e->getMessage();

         switch ($errmsg) {
            case 'missing-input-secret':
            case 'invalid-input-secret':
            case 'missing-input-response':
            case 'invalid-input-response':
            case 'bad-request':
            case 'timeout-or-duplicate':
               vmInfo('COM_VM_RECAPTCHA_ERROR_' . strtoupper(str_replace('-', '_', $errmsg)));
               break;
            default:
               vmInfo($errmsg);
               break;
         }

         return false;
      }

      if (empty($res)) {
         vmInfo('COM_VM_RECAPTCHA_ERROR');
         return false;
      }

      foreach ($res as $ret) {
         if (!$ret) {
            vmInfo('COM_VM_RECAPTCHA_ERROR');
            return false;
         }
      }

      return true;
   }

   return true;
}
#22
Administration & Configuration / Menu side bar
Last post by johnknit - April 08, 2026, 11:00:48 AM
Hello,
Is it possible to hide the menu side bar permanent until you deside you want to use it.
An extra button for permanent or temporaly hiding.??
At the moment the sidebar come back every time there is bin a saving or other action. Therefore you need to hide the sidebar over and over again.
This takes a lot of time when working on it.
#23
Coding Central / Re: VirtueMart shipping/paymen...
Last post by razor7 - April 07, 2026, 13:16:09 PM
Great! Shipping/payment order is an issue for years now. Sometimes you need to force order and that is really difficult as of right now.
#24
Coding Central / Re: Search results varies acco...
Last post by razor7 - April 07, 2026, 13:12:30 PM
Bump 2?
#25
About VirtueMart - not for support posts / Re: Joomla 6
Last post by rdcustom - April 06, 2026, 17:56:09 PM
this means that virtuemart will finally exit from 2008?

damn is so frustrating to pay a membership after many promises and feeling dumb cause nothing is changing here
#26
In what situation does such an error occur?
#27
Hi!

I'm currently using Joomla 5.4.4 with Virtuemart 4.6.4 11226 and I get the 500 Joomla\CMS\HTML\HTMLHelper Select not found.

Any fix?

Thank you
#28
Coding Central / Re: Search results varies acco...
Last post by razor7 - April 02, 2026, 13:31:07 PM
Bump?
#29
Coding Central / Search results varies accordin...
Last post by razor7 - March 31, 2026, 21:33:23 PM
Hi! I have this issue in VM, if I search IE: "Safety Helmet" it matches the results of products with "Safety Helmet" keywords, but if I change the order of the search keyword to "Helmet Safety" it won't match anything. According to joomla debug log, it seems to be the SQL used by VM to perform the search with *LIKE*. In that case I suggest some changes to the actual query

Actual query
SELECT SQL_CALC_FOUND_ROWS p.virtuemart_product_id, l.product_name, l.product_s_desc, l.product_desc
FROM w2f9n3p4_virtuemart_products as p
LEFT JOIN w2f9n3p4_virtuemart_products_es_es as l ON l.virtuemart_product_id = p.virtuemart_product_id
LEFT JOIN w2f9n3p4_virtuemart_product_shoppergroups as ps ON p.virtuemart_product_id = ps.virtuemart_product_id
LEFT JOIN w2f9n3p4_virtuemart_product_categories as pc ON p.virtuemart_product_id = pc.virtuemart_product_id
LEFT JOIN w2f9n3p4_virtuemart_categories as c ON c.virtuemart_category_id = pc.virtuemart_category_id
LEFT JOIN w2f9n3p4_virtuemart_categories_es_es as cl ON cl.virtuemart_category_id = pc.virtuemart_category_id
WHERE (
  (
    l.product_name LIKE "%Safety%Helmet%"
    OR p.product_sku LIKE "%Safety%Helmet%"
    OR l.product_s_desc LIKE "%Safety%Helmet%"
    OR l.product_desc LIKE "%Safety%Helmet%"
    OR category_name LIKE "%Safety%Helmet%"
    OR category_description LIKE "%Safety%Helmet%"
  )
  AND c.published = 1
  AND (
    ps.virtuemart_shoppergroup_id= "1"
    OR ps.virtuemart_shoppergroup_id IS NULL
  )
  AND p.published="1"
)
group by p.virtuemart_product_id
ORDER BY p.product_sku ASC, p.virtuemart_product_id ASC
LIMIT 20

Maybe use:
WHERE MATCH(l.product_name, l.product_s_desc, l.product_desc, category_name, category_description)
      AGAINST ('+Safety +Helmet' IN BOOLEAN MODE)

Or option 2, tokenize the search words then create each word as a search where

$terms = explode(' ', $search);
foreach ($terms as $t) {
  $where .= " OR (l.product_name LIKE '%$t%' OR ... )";
}

Also maybe a config option to enable this by keyword search method where the default is full phrase search.

What do you think?
#30
Are you talking about this Stripe plugin: https://www.virtueplanet.com/extensions/stripe-checkout
If yes, try reinstalling it. If that doesn't work, then write to the Virtueplanet developer in their support forum :)