Skip to content

Commit

Permalink
Added language to nocaptcha rendering, improved validation err langua…
Browse files Browse the repository at this point in the history
…ge for different methods.
  • Loading branch information
cheesegrits committed Mar 9, 2017
1 parent 995d00d commit 5eb46b7
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 22 deletions.
55 changes: 46 additions & 9 deletions components/com_fabrik/helpers/parent.php
Expand Up @@ -894,6 +894,29 @@ public static function replaceWithGlobals($msg)
return $msg;
}

/**
* Utility function for replacing language tags.
* {lang} - Joomla code for user's selected language, like en-GB
* {langtag} - as {lang} with with _ instead of -
* {shortlang} - first two letters of {lang}, like en
* {multilang} - multilang URL code
*
* @param string $msg Message to parse
*
* @return string parsed message
*/
public static function replaceWithLanguageTags($msg)
{
$replacements = self::langReplacements();

foreach ($replacements as $key => $value)
{
$msg = str_replace($key, $value, $msg);
}

return $msg;
}

/**
* Called from parseMessageForPlaceHolder to iterate through string to replace
* {placeholder} with unsafe data
Expand Down Expand Up @@ -1006,11 +1029,6 @@ public static function globalReplacements()
$config = JFactory::getConfig();
$session = JFactory::getSession();
$token = $session->get('session.token');
$langtag = JFactory::getLanguage()->getTag();
$lang = str_replace('-', '_', $langtag);
$shortlang = explode('_', $lang);
$shortlang = $shortlang[0];
$multilang = FabrikWorker::getMultiLangURLCode();

$replacements = array(
'{$jConfig_live_site}' => COM_FABRIK_LIVESITE,
Expand All @@ -1021,10 +1039,6 @@ public static function globalReplacements()
'{where_i_came_from}' => $app->input->server->get('HTTP_REFERER', '', 'string'),
'{date}' => date('Ymd'),
'{mysql_date}' => date('Y-m-d H:i:s'),
'{lang}' => $lang,
'{langtag}' => $langtag,
'{multilang}' => $multilang,
'{shortlang}' => $shortlang,
'{session.token}' => $token,
);

Expand All @@ -1037,6 +1051,29 @@ public static function globalReplacements()
}
}

return array_merge($replacements, self::langReplacements());
}

/**
* Returns array of language tag replacements
*
* @return array
*/
public static function langReplacements()
{
$langtag = JFactory::getLanguage()->getTag();
$lang = str_replace('-', '_', $langtag);
$shortlang = explode('_', $lang);
$shortlang = $shortlang[0];
$multilang = FabrikWorker::getMultiLangURLCode();

$replacements = array(
'{lang}' => $lang,
'{langtag}' => $langtag,
'{multilang}' => $multilang,
'{shortlang}' => $shortlang,
);

return $replacements;
}

Expand Down
7 changes: 5 additions & 2 deletions plugins/fabrik_element/captcha/captcha.php
Expand Up @@ -213,7 +213,7 @@ public function render($data, $repeatCounter = 0)

// $$$tom added lang & theme options
$theme = $params->get('recaptcha_theme', 'red');
$lang = JString::strtolower($params->get('recaptcha_lang', 'en'));
$lang = FabrikWorker::replaceWithLanguageTags(JString::strtolower($params->get('recaptcha_lang', 'en')));
$error = null;

if ($this->user->get('id') != 0 && $params->get('captcha-showloggedin', 0) == false)
Expand All @@ -235,6 +235,7 @@ public function render($data, $repeatCounter = 0)
$displayData->id = $id;
$displayData->name = $name;
$displayData->site_key = $params->get('recaptcha_publickey');
$displayData->lang = FabrikWorker::replaceWithLanguageTags(JString::strtolower($params->get('recaptcha_lang', 'en')));

return $layout->render($displayData);
}
Expand Down Expand Up @@ -385,7 +386,9 @@ public function validate($data, $repeatCounter = 0)
*/
public function getValidationErr()
{
return FText::_('PLG_ELEMENT_CAPTCHA_FAILED');
$params = $this->getParams();
$method = $params->get('captcha-method', 'standard');
return FText::_('PLG_ELEMENT_CAPTCHA_' . strtoupper($method) . 'FAILED');
}

/**
Expand Down
4 changes: 2 additions & 2 deletions plugins/fabrik_element/captcha/forms/fields.xml
Expand Up @@ -126,7 +126,7 @@
name="recaptcha_theme"
type="list"
default="red"
description="RECAPTCHA_THEME_DESC"
description="PLG_ELEMENT_RECAPTCHA_THEME_DESC"
label="PLG_ELEMENT_RECAPTCHA_THEME">
<option value="red">Red</option>
<option value="white">White</option>
Expand All @@ -137,7 +137,7 @@
<field name="recaptcha_lang"
type="text"
default="en"
description="RECAPTCHA_LANG_DESC"
description="PLG_ELEMENT_RECAPTCHA_LANG_DESC"
label="PLG_ELEMENT_RECAPTCHA_LANG"
size="2" />

Expand Down
Expand Up @@ -6,7 +6,7 @@
PLG_ELEMENT_CAPTCHA_SHOW_WHEN_LOGGED_IN_LABEL="Show when logged in?"
PLG_ELEMENT_CAPTCHA_SHOW_WHEN_LOGGED_IN_DESC="If no selected and the user logged in, then the captcha is not shown on the form and is not validated"
PLG_ELEMENT_CAPTCHA_METHOD_LABEL="Method"
PLG_ELEMENT_CAPTCHA_METHOD_DESC="The standard method generates an image on the server which requires validation. The recaptcha method uses the recaptcha service to generate the captcha http://www.google.com/recaptcha"
PLG_ELEMENT_CAPTCHA_METHOD_DESC="The standard method generates an image on the server which requires validation. The Recaptcha and Nocaptcha methods uses Google's service to generate the captcha, see http://www.google.com/recaptcha"
PLG_ELEMENT_STANDARD_CAPTCHA_FIELDSET_LABEL="Standard captcha options"
PLG_ELEMENT_CAPTCHA_ANGLE_LABEL="Text Angle"
PLG_ELEMENT_CAPTCHA_FONT_SIZE_LABEL="Font Size"
Expand All @@ -17,22 +17,24 @@ PLG_ELEMENT_CAPTCHA_NUMBER_OF_CHARS_LABEL="Num of chars"
PLG_ELEMENT_CAPTCHA_BACKGROUND_COLOR="Background colour"
PLG_ELEMENT_CAPTCHA_NOISE_COLOR="Noise colour"
PLG_ELEMENT_CAPTCHA_TEXT_COLOR="Text colour"
PLG_ELEMENT_RECAPTCHA_CAPTCHA_FIELDSET_LABEL="Recaptcha options"
PLG_ELEMENT_CAPTCHA_RECAPTCHA_PUBLIC_KEY_LABEL="Public key"
PLG_ELEMENT_CAPTCHA_RECAPTCHA_PUBLIC_KEY_DESC="Get your public key from http://www.google.com/recaptcha"
PLG_ELEMENT_RECAPTCHA_CAPTCHA_FIELDSET_LABEL="Re/NoCaptcha options"
PLG_ELEMENT_CAPTCHA_RECAPTCHA_PUBLIC_KEY_LABEL="Public / Site key"
PLG_ELEMENT_CAPTCHA_RECAPTCHA_PUBLIC_KEY_DESC="Get your public / site key from http://www.google.com/recaptcha"
PLG_ELEMENT_CAPTCHA_RECAPTCHA_PRIVATE_KEY_LABEL="Private key"
PLG_ELEMENT_CAPTCHA_RECAPTCHA_PRIVATE_KEY_DESC="Get your private key from http://www.google.com/recaptcha"
PLG_ELEMENT_CAPTCHA_FAILED="Please ensure that you have entered text matching that found in the image"
PLG_ELEMENT_RECAPTCHA_SETTINGS="Recaptcha settings"
PLG_ELEMENT_RECAPTCHA_SETTINGS="Re/NoCaptcha settings"
PLG_ELEMENT_STANDARD_SETTINGS="Standard settings"
PLG_ELEMENT_CAPTCHA_WARN_FREETYPE="Your version of PHP needs to be compiled with Freetype support to use CAPTCHA"
PLG_ELEMENT_RECAPTCHA_THEME="Theme"
PLG_ELEMENT_RECAPTCHA_THEME_DESC="Choose the theme to use to change the way the recaptcha box looks"
PLG_ELEMENT_RECAPTCHA_THEME_DESC="Choose the theme to use to change the way the recaptcha box looks (only applies to recaptcha)"
PLG_ELEMENT_RECAPTCHA_LANG="Lang"
PLG_ELEMENT_RECAPTCHA_LANG_DESC="Enter the 2 letter code of the language to use for the recaptcha widget - default/empty = English. - Available languages: en, nl, fr, de, pt, ru, es, tr"
PLG_ELEMENT_RECAPTCHA_LANG_DESC="Enter the language code to use for the re/nocaptcha widget. Default/empty is English. For available language codes, see https://developers.google.com/recaptcha/docs/language"
PLG_ELEMENT_CAPTCHA_PLAYTHRU_PUBLISHER_KEY_LABEL="Publisher Key"
PLG_ELEMENT_CAPTCHA_PLAYTHRU_SCORING_KEY_LABEL="Scoring Key"

;FRONT END
PLG_ELEMENT_CAPTCHA_FAILED="Please ensure that you have entered text matching that found in the image"
PLG_ELEMENT_CAPTCHA_STANDARD_FAILED="Please ensure that you have entered text matching that found in the image"
PLG_ELEMENT_CAPTCHA_RECAPTCHA_FAILED="The Captcha validation failed. Please try again"
PLG_ELEMENT_CAPTCHA_NOCAPTCHA_FAILED="The Captcha validation failed. Please prove you are not a robot!"
PLG_FABRIK_ELEMENT_CAPTCHA_STANDARD_TTF_ERROR="Fabrik's recaptcha plugin requires the PHP imagettfbbox function, please select a different render method for this element"
Expand Up @@ -15,4 +15,4 @@
<div class="captcha_input" id="<?php echo $d->id; ?>">
</div>

<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=<?php echo $d->lang; ?>" async defer></script>

0 comments on commit 5eb46b7

Please sign in to comment.