From 5eb46b7aade7c893c2a348c1706aae7f9d133a3e Mon Sep 17 00:00:00 2001 From: Hugh Messenger Date: Thu, 9 Mar 2017 16:09:05 -0600 Subject: [PATCH] Added language to nocaptcha rendering, improved validation err language for different methods. --- components/com_fabrik/helpers/parent.php | 55 ++++++++++++++++--- plugins/fabrik_element/captcha/captcha.php | 7 ++- .../fabrik_element/captcha/forms/fields.xml | 4 +- .../en-GB.plg_fabrik_element_captcha.ini | 18 +++--- .../fabrik-element-captcha-nocaptcha.php | 2 +- 5 files changed, 64 insertions(+), 22 deletions(-) diff --git a/components/com_fabrik/helpers/parent.php b/components/com_fabrik/helpers/parent.php index fa57ae14ff3..ac79da44a1f 100644 --- a/components/com_fabrik/helpers/parent.php +++ b/components/com_fabrik/helpers/parent.php @@ -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 @@ -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, @@ -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, ); @@ -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; } diff --git a/plugins/fabrik_element/captcha/captcha.php b/plugins/fabrik_element/captcha/captcha.php index 2cad7342a7e..de83b245182 100644 --- a/plugins/fabrik_element/captcha/captcha.php +++ b/plugins/fabrik_element/captcha/captcha.php @@ -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) @@ -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); } @@ -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'); } /** diff --git a/plugins/fabrik_element/captcha/forms/fields.xml b/plugins/fabrik_element/captcha/forms/fields.xml index 83a239d3bc5..1b736b6b57a 100644 --- a/plugins/fabrik_element/captcha/forms/fields.xml +++ b/plugins/fabrik_element/captcha/forms/fields.xml @@ -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"> @@ -137,7 +137,7 @@ diff --git a/plugins/fabrik_element/captcha/language/en-GB/en-GB.plg_fabrik_element_captcha.ini b/plugins/fabrik_element/captcha/language/en-GB/en-GB.plg_fabrik_element_captcha.ini index ec2903f7264..2136675f428 100644 --- a/plugins/fabrik_element/captcha/language/en-GB/en-GB.plg_fabrik_element_captcha.ini +++ b/plugins/fabrik_element/captcha/language/en-GB/en-GB.plg_fabrik_element_captcha.ini @@ -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" @@ -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" diff --git a/plugins/fabrik_element/captcha/layouts/fabrik-element-captcha-nocaptcha.php b/plugins/fabrik_element/captcha/layouts/fabrik-element-captcha-nocaptcha.php index 0ef9badb5ee..5fb1ceb45a2 100644 --- a/plugins/fabrik_element/captcha/layouts/fabrik-element-captcha-nocaptcha.php +++ b/plugins/fabrik_element/captcha/layouts/fabrik-element-captcha-nocaptcha.php @@ -15,4 +15,4 @@
- +