Im deuschsprachigen Joomla! Forum bin ich über diesen Beitrag gestolpert, der Visforms betrifft
forum.joomla.de/index.php/Thread/1525-13...NGTH-does-not-exist/
Schade, dass dieser nicht hier im Forum gepostet wurde, denn dann hätte ich früher von diesem Bug in Visforms erfahren.
Der Bug zeigt sich darin, dass ein Fehler 1305 FUNCTION [Datenbank].CHAR_LENGTH does not exist geworfen wird nachdem der Benutzer das Formular abgeschickt hat, wenn man in Visforms in der Formularkonfiguration einen Ergebnistext angelegt hat. Der Fehler tritt nur selten auf, nämlich immer dann, wenn das Joomla! auf einer etwas älteren MySql Version (< 5.5) läuft.
Visforms verwendet in seinem Router einen mySql Befehl, der erst in MySql Versionen von 5.5 und höher existiert. Da Joomla! als Mindestversion für MySql 5.1 angibt, werden ich das Problem mit der nächsten Visforms-Version fixen. In der Zwischenzeit könnt ihr, wenn ihr betroffen seit, versuche, ob folgende Änderung das Problem behebt.
Geht in das Verzeichnis components/com_visforms und öffnet die Datei router.php.
In Zeile 195 - 220 findet sich folgender Code
Code:
if (strpos($segment, ':') !== false)
{
$query = $db->getQuery(true);
$query->select('CASE WHEN CHAR_LENGTH (name) THEN CONCAT_WS(":", id, name) ELSE id END as slug');
$query->from('#__visforms');
$db->setQuery($query);
$slugs = $db->loadColumn();
if (!empty($slugs))
{
foreach ($slugs as $slug)
{
if ($segment === $slug)
{
$form = explode(':', $segment);
$vars['id'] = $form[0];
if ($count == 2)
{
$vars['view'] = 'message';
}
continue;
}
}
}
//we should not arrive here
}
Diesen bitte ersetzen mit
Code:
if (strpos($segment, ':') !== false)
{
list($id, $name) = explode(':', $segment, 2);
$query = $db->getQuery(true);
//$query->select('CASE WHEN CHAR_LENGTH (name) THEN CONCAT_WS(":", id, name) ELSE id END as slug');
$query->select($db->quoteName( 'name'));
$query->from('#__visforms');
$query->where($db->quoteName('id') . ' = ' . (int) $id);
$db->setQuery($query);
$slug = $db->loadColumn();
if (!empty($slug))
{
if ($slug === $name)
{
$vars['id'] = $id;
if ($count == 2)
{
$vars['view'] = 'message';
}
}
}
//we should not arrive here
}
Zur Sicherheit eine Sicherungskopie der router.php machen, bevor ihr die Änderungen durchführt.
Bitte lasst mich wissen, ob das das Problem behebt.
Herzliche Grüße,
Aicha