mirror of
https://github.com/kleeja-official/kleeja.git
synced 2025-12-16 04:59:42 +01:00
new plugins
This commit is contained in:
BIN
plugins/kj_recaptcha/icon.png
Normal file
BIN
plugins/kj_recaptcha/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 93 KiB |
55
plugins/kj_recaptcha/index.html
Executable file
55
plugins/kj_recaptcha/index.html
Executable file
@@ -0,0 +1,55 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256"/>
|
||||
<title>Powered by Kleeja</title>
|
||||
<style type="text/css">* {
|
||||
font-size: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #CECFCE;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: Tahoma, Arial, sans-serif;
|
||||
font-size: 100%;
|
||||
color: #69788E;
|
||||
margin: 10px 30px;
|
||||
background: #F7F7F7;
|
||||
}
|
||||
|
||||
a:link, a:visited {
|
||||
text-decoration: none;
|
||||
color: #CECFCE;
|
||||
}
|
||||
|
||||
a:active, a:hover {
|
||||
text-decoration: underline;
|
||||
color: #111;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-family: "Trebuchet MS", Helvetica, sans-serif;
|
||||
font-size: 1.70em;
|
||||
font-weight: normal;
|
||||
color: #333333;
|
||||
margin-top: 0;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.content_box {
|
||||
border: 1px dashed #CECFCE;
|
||||
background: #FFFFFF;
|
||||
padding: 10px;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
}</style>
|
||||
</head>
|
||||
<body title="كليجا"><br/>
|
||||
<div class="content_box"><h1><span style="font-size:250%;color:#D80000;">403 - Access forbidden!</span></h1></div>
|
||||
<br/>
|
||||
<div class="content_box"><span style="font-size: 140%">Powered by <a target="_blank"
|
||||
href="http://www.kleeja.com">Kleeja</a></span>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
469
plugins/kj_recaptcha/init.php
Normal file
469
plugins/kj_recaptcha/init.php
Normal file
@@ -0,0 +1,469 @@
|
||||
<?php
|
||||
# kleeja plugin
|
||||
# kj_recaptcha
|
||||
# version: 1.3
|
||||
# developer: kleeja team
|
||||
|
||||
|
||||
# prevent illegal run
|
||||
if (!defined('IN_PLUGINS_SYSTEM')) {
|
||||
exit();
|
||||
}
|
||||
|
||||
|
||||
# plugin basic information
|
||||
$kleeja_plugin['kj_recaptcha']['information'] = array(
|
||||
# the casucal name of this plugin, anything can a human being understands
|
||||
'plugin_title' => 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'] = "
|
||||
شكراً لاستخدامك إضافة الريكابتشا لكليجا، قم بمراسلتنا بالأخطاء عند ظهورها على البريد: <br>
|
||||
info@kleeja.com
|
||||
<br>
|
||||
للحصول على مفتاح وكود ريكابتشا السري سجل في موقعهم:
|
||||
<a href='https://www.google.com/recaptcha'>google.com/reCaptcha</a>.
|
||||
<br>
|
||||
ثم أضفها في إعدادات -> خيارات الريكابتشا
|
||||
";
|
||||
|
||||
$kleeja_plugin['kj_recaptcha']['first_run']['en'] = "
|
||||
Thank you for using our plugin, if you encounter any bugs and errors, contact us: <br>
|
||||
info@kleeja.com
|
||||
<br>
|
||||
to get the reCaptcha sitekey and secret code, visit:
|
||||
<a href='https://www.google.com/recaptcha'>google.com/reCaptcha</a>.
|
||||
<br>
|
||||
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(
|
||||
'/(<IF\s{1,}NAME="config.enable_captcha==1">)/',
|
||||
getReCaptchaInputHtml().'$1',
|
||||
$args['html']);
|
||||
|
||||
return compact('html');
|
||||
}else if($args['template_name'] == 'index_body' && defined('reCaptcha_index')){
|
||||
$html = preg_replace(
|
||||
'/(<IF\s{1,}NAME="config.safe_code">)/',
|
||||
getReCaptchaInputHtml().'$1',
|
||||
$args['html']);
|
||||
return compact('html');
|
||||
}else if($args['template_name'] == 'admin_login'){
|
||||
|
||||
$html = preg_replace(
|
||||
'/(<IF\s{1,}NAME="show_captcha">)/',
|
||||
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 '<div id="aarecaptcha" style="margin: 10px auto; text-align: center; max-width: 255px;"></div>';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '<div class="g-recaptcha" data-sitekey="' . $config['kj_recaptcha_sitekey'] . '" style="margin: 10px auto; text-align: center; max-width: 255px;"></div>';
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if(! function_exists('getReCaptchaInputHeadHtml'))
|
||||
{
|
||||
function getReCaptchaInputHeadHtml()
|
||||
{
|
||||
global $config;
|
||||
|
||||
if($config['kj_recaptcha_invisible'] == 1)
|
||||
{
|
||||
return '<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=' . $config['language'] . '"></script>'.
|
||||
'<script>
|
||||
|
||||
var disableSubmit = function(state){
|
||||
|
||||
var children = document.getElementsByTagName("form").childNodes;
|
||||
|
||||
var parent = null;
|
||||
|
||||
for(child in children){
|
||||
if (children.hasOwnProperty(child)) {
|
||||
if(child.getElementById("aarecaptcha") !== null){
|
||||
parent = child;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(parent === null){
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
parent.querySelectorAll("input[type=submit]").disabled = state;
|
||||
|
||||
};
|
||||
|
||||
var onloadCallback = function(){
|
||||
|
||||
disableSubmit(true);
|
||||
|
||||
grecaptcha.render("aarecaptcha", {
|
||||
"sitekey" : "'.$config['kj_recaptcha_sitekey'].'",
|
||||
"badge" : "inline",
|
||||
"size" : "invisible",
|
||||
"callback" : function(token){
|
||||
disableSubmit(false);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
grecaptcha.execute();
|
||||
};
|
||||
|
||||
|
||||
|
||||
</script>';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '<script src="https://www.google.com/recaptcha/api.js?hl=' . $config['language'] . '"></script>';
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('isReCaptchaValid')) {
|
||||
function isReCaptchaValid()
|
||||
{
|
||||
global $config;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user