array( 'en' => 'KJ reCaptcha', 'ar' => 'كليجا ريكابتشا' ), # who wrote this plugin? 'plugin_developer' => 'kleeja.com', # this plugin version 'plugin_version' => '1.3', # explain what is this plugin, why should i use it? 'plugin_description' => array( 'en' => 'Add reCaptcha to Kleeja', 'ar' => 'إضافة ريكابتشا لكليجا' ), # min version of kleeja that's required to run this plugin 'plugin_kleeja_version_min' => '2.0', # max version of kleeja that support this plugin, use 0 for unlimited 'plugin_kleeja_version_max' => '3.0', # should this plugin run before others?, 0 is normal, and higher number has high priority 'plugin_priority' => 0 ); //after installation message, you can remove it, it's not requiered $kleeja_plugin['kj_recaptcha']['first_run']['ar'] = " شكراً لاستخدامك إضافة الريكابتشا لكليجا، قم بمراسلتنا بالأخطاء عند ظهورها على البريد:
info@kleeja.com
للحصول على مفتاح وكود ريكابتشا السري سجل في موقعهم: google.com/reCaptcha.
ثم أضفها في إعدادات -> خيارات الريكابتشا "; $kleeja_plugin['kj_recaptcha']['first_run']['en'] = " Thank you for using our plugin, if you encounter any bugs and errors, contact us:
info@kleeja.com
to get the reCaptcha sitekey and secret code, visit: google.com/reCaptcha.
then configure this plugin from: settings -> reCaptcha settings "; # plugin installation function $kleeja_plugin['kj_recaptcha']['install'] = function ($plg_id) { //new options $options = array( 'kj_recaptcha_sitekey' => array( 'value' => '', 'html' => configField('kj_recaptcha_sitekey'), 'plg_id' => $plg_id, 'type' => 'kj_recaptcha' ), 'kj_recaptcha_secret' => array( 'value' => '', 'html' => configField('kj_recaptcha_secret'), 'plg_id' => $plg_id, 'type' => 'kj_recaptcha' ), 'kj_recaptcha_invisible' => array( 'value' => '0', 'html' => configField('kj_recaptcha_invisible', 'yesno'), 'plg_id' => $plg_id, 'type' => 'kj_recaptcha' ), ); add_config_r($options); //new language variables add_olang(array( 'KJ_RECAPTCHA_SITEKEY' => 'مفتاح الرياكبتشا | sitekey', 'KJ_RECAPTCHA_SECRET' => 'الكود السري للريكابتشا | secret', 'KJ_RECAPTCHA_INVISIBLE' => 'نوع الريكابتشا: مخفية invisible', 'CONFIG_KLJ_MENUS_KJ_RECAPTCHA' => 'خيارات ريكابتشا', ), 'ar', $plg_id); add_olang(array( 'KJ_RECAPTCHA_SITEKEY' => 'reCaptcha sitekey', 'KJ_RECAPTCHA_SECRET' => 'reCaptcha secret', 'KJ_RECAPTCHA_INVISIBLE' => 'reCaptcha Type: Invisible', 'CONFIG_KLJ_MENUS_KJ_RECAPTCHA' => 'reCaptcha Settings', ), 'en', $plg_id); }; //plugin update function, called if plugin is already installed but version is different than current $kleeja_plugin['kj_recaptcha']['update'] = function ($old_version, $new_version) { $plg_id = Plugins::getInstance()->installed_plugin_info('kj_recaptcha'); if(version_compare($old_version, '1.3', '<')){ $options = array( 'kj_recaptcha_invisible' => array( 'value' => '0', 'html' => configField('kj_recaptcha_invisible', 'yesno'), 'plg_id' => $plg_id, 'type' => 'kj_recaptcha' ), ); add_config_r($options); //new language variables add_olang(array( 'KJ_RECAPTCHA_INVISIBLE' => 'نوع الريكابتشا: مخفية invisible', ), 'ar', $plg_id); add_olang(array( 'KJ_RECAPTCHA_INVISIBLE' => 'reCaptcha Type: Invisible', ), 'en', $plg_id); } // // if(version_compare($old_version, '0.6', '<')){ // //... update to 0.6 // } //you could use update_config, update_olang }; # plugin uninstalling, function to be called at uninstalling $kleeja_plugin['kj_recaptcha']['uninstall'] = function ($plg_id) { //delete options delete_config(array( 'kj_recaptcha_sitekey', 'kj_recaptcha_secret', 'kj_recaptcha_invisible' )); foreach (array('ar', 'en') as $language) { delete_olang(null, $language, $plg_id); } }; # plugin functions $kleeja_plugin['kj_recaptcha']['functions'] = array( 'Saaheader_links_func' => function ($args) { global $config; $extra = $args['extra'] . "\n" . getReCaptchaInputHeadHtml(); return compact('extra'); }, 'before_display_template_admin_page' => function ($args) { global $config; $extra_header_admin_login = $args['extra_header_admin_login'] . "\n" . getReCaptchaInputHeadHtml(); $show_captcha = false; return compact('extra_header_admin_login', 'show_captcha'); }, 'style_parse_func' => function($args) { global $config; if(in_array($args['template_name'], array('call', 'report', 'register', 'login')) && defined('reCaptcha_all')){ $html = preg_replace( '/()/', getReCaptchaInputHtml().'$1', $args['html']); return compact('html'); }else if($args['template_name'] == 'index_body' && defined('reCaptcha_index')){ $html = preg_replace( '/()/', getReCaptchaInputHtml().'$1', $args['html']); return compact('html'); }else if($args['template_name'] == 'admin_login'){ $html = preg_replace( '/()/', getReCaptchaInputHtml().'$1', $args['html']); unset($_SESSION['SHOW_CAPTCHA']); return compact('html'); } }, 'admin_login_submit' => function($args){ global $lang; if(!isReCaptchaValid()) { $ERRORS = $args['ERRORS']; $ERRORS['recaptcha'] = $lang['WRONG_VERTY_CODE']; return compact('ERRORS'); } }, 'end_common' => function($args){ global $config; if($config['safe_code'] == 1){ define('reCaptcha_index', true); } if($config['enable_captcha'] == 1){ define('reCaptcha_all', true); } $config['enable_captcha'] = 0; $config['safe_code'] = 0; }, 'submit_report_go_page' => function ($args){ global $lang; if(!isReCaptchaValid()) { $ERRORS = $args['ERRORS']; $ERRORS['recaptcha'] = $lang['WRONG_VERTY_CODE']; return compact('ERRORS'); } }, 'register_submit' => function ($args){ global $lang; if(!isReCaptchaValid()) { $ERRORS = $args['ERRORS']; $ERRORS['recaptcha'] = $lang['WRONG_VERTY_CODE']; return compact('ERRORS'); } }, 'login_after_submit' => function ($args){ global $lang; if(!isReCaptchaValid()) { $ERRORS = $args['ERRORS']; $ERRORS['recaptcha'] = $lang['WRONG_VERTY_CODE']; return compact('ERRORS'); } }, 'submit_call_go_page' => function($args){ global $lang; if(!isReCaptchaValid()) { $ERRORS = $args['ERRORS']; $ERRORS['recaptcha'] = $lang['WRONG_VERTY_CODE']; return compact('ERRORS'); } }, 'defaultUploader_upload_1st' => function($args){ global $lang; if(!defined('reCaptcha_index')){ return null; } $captcha_enabled = true; return compact('captcha_enabled'); }, 'kleeja_check_captcha_func' => function($args){ if(defined('IN_REAL_INDEX') || defined('IN_ADMIN')){ $return = isReCaptchaValid(); return compact('return'); } if(!defined('IN_ADMIN')) { $return = true; return compact('return'); } }, 'ftpUploader_upload_1st' => function($args){ global $lang; if(!defined('reCaptcha_index')){ return null; } $captcha_enabled = true; return compact('captcha_enabled'); }, ); // /** * special functions */ if(! function_exists('getReCaptchaInputHtml')) { function getReCaptchaInputHtml() { global $config; if($config['kj_recaptcha_invisible'] == 1) { return '
'; } else { return '
'; } } } if(! function_exists('getReCaptchaInputHeadHtml')) { function getReCaptchaInputHeadHtml() { global $config; if($config['kj_recaptcha_invisible'] == 1) { return ''. ''; } else { return ''; } } } if (!function_exists('isReCaptchaValid')) { function isReCaptchaValid() { global $config; if(empty($config['kj_recaptcha_sitekey']) || empty($config['kj_recaptcha_secret'])){ return true; } if (!ip('g-recaptcha-response') || empty(p('g-recaptcha-response'))) { return false; } try { $data = array( 'secret' => $config['kj_recaptcha_secret'], 'response' => p('g-recaptcha-response'), 'remoteip' => $_SERVER['REMOTE_ADDR'] ); $url = 'https://www.google.com/recaptcha/api/siteverify?' . http_build_query($data); $result = fetch_remote_file($url); // // if (function_exists('curl_version')) { // $curl = curl_init($url . "?" . http_build_query($data)); // curl_setopt($curl, CURLOPT_HEADER, false); // curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl_setopt($curl, CURLOPT_TIMEOUT, 1); // curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // $result = curl_exec($curl); // // } else { //// $options = array( //// 'http' => array( //// 'header' => "Content-type: application/x-www-form-urlencoded\r\n", //// 'method' => 'POST', //// 'content' => http_build_query($data) //// ) //// ); //// //// $context = stream_context_create($options); //// //// //TODO use our function for fallback // $result = file_get_contents($url, false, $context); // } if (empty($result) || is_null($result)) { return false; } return json_decode($result)->success; } catch (Exception $e) { return null; } } }