mirror of
https://github.com/YunoHost-Apps/dokuwiki_ynh.git
synced 2024-09-03 18:26:20 +02:00
[enh] Add captcha plugin.
This commit is contained in:
parent
762c296229
commit
00e35863f0
87 changed files with 2694 additions and 0 deletions
25
sources/lib/plugins/captcha/README
Normal file
25
sources/lib/plugins/captcha/README
Normal file
|
@ -0,0 +1,25 @@
|
|||
captcha Plugin for DokuWiki
|
||||
|
||||
All documentation for this plugin can be found at
|
||||
http://www.dokuwiki.org/plugin:captcha
|
||||
|
||||
If you install this plugin manually, make sure it is installed in
|
||||
lib/plugins/captcha/ - if the folder is called different it
|
||||
will not work!
|
||||
|
||||
Please refer to http://www.dokuwiki.org/plugins for additional info
|
||||
on how to install plugins in DokuWiki.
|
||||
|
||||
----
|
||||
Copyright (C) Andreas Gohr <andi@splitbrain.org>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; version 2 of the License
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
See the COPYING file in your DokuWiki folder for details
|
149
sources/lib/plugins/captcha/action.php
Normal file
149
sources/lib/plugins/captcha/action.php
Normal file
|
@ -0,0 +1,149 @@
|
|||
<?php
|
||||
/**
|
||||
* CAPTCHA antispam plugin
|
||||
*
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
* @author Andreas Gohr <gohr@cosmocode.de>
|
||||
*/
|
||||
|
||||
// must be run within Dokuwiki
|
||||
if(!defined('DOKU_INC')) die();
|
||||
|
||||
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC.'lib/plugins/');
|
||||
require_once(DOKU_PLUGIN.'action.php');
|
||||
|
||||
class action_plugin_captcha extends DokuWiki_Action_Plugin {
|
||||
|
||||
/**
|
||||
* register the eventhandlers
|
||||
*/
|
||||
function register(&$controller) {
|
||||
$controller->register_hook(
|
||||
'ACTION_ACT_PREPROCESS',
|
||||
'BEFORE',
|
||||
$this,
|
||||
'handle_act_preprocess',
|
||||
array()
|
||||
);
|
||||
|
||||
// old hook
|
||||
$controller->register_hook(
|
||||
'HTML_EDITFORM_INJECTION',
|
||||
'BEFORE',
|
||||
$this,
|
||||
'handle_editform_output',
|
||||
array('editform' => true, 'oldhook' => true)
|
||||
);
|
||||
|
||||
// new hook
|
||||
$controller->register_hook(
|
||||
'HTML_EDITFORM_OUTPUT',
|
||||
'BEFORE',
|
||||
$this,
|
||||
'handle_editform_output',
|
||||
array('editform' => true, 'oldhook' => false)
|
||||
);
|
||||
|
||||
if($this->getConf('regprotect')) {
|
||||
// old hook
|
||||
$controller->register_hook(
|
||||
'HTML_REGISTERFORM_INJECTION',
|
||||
'BEFORE',
|
||||
$this,
|
||||
'handle_editform_output',
|
||||
array('editform' => false, 'oldhook' => true)
|
||||
);
|
||||
|
||||
// new hook
|
||||
$controller->register_hook(
|
||||
'HTML_REGISTERFORM_OUTPUT',
|
||||
'BEFORE',
|
||||
$this,
|
||||
'handle_editform_output',
|
||||
array('editform' => false, 'oldhook' => false)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Will intercept the 'save' action and check for CAPTCHA first.
|
||||
*/
|
||||
function handle_act_preprocess(&$event, $param) {
|
||||
$act = $this->_act_clean($event->data);
|
||||
if(!('save' == $act || ($this->getConf('regprotect') &&
|
||||
'register' == $act &&
|
||||
$_POST['save']))
|
||||
) {
|
||||
return; // nothing to do for us
|
||||
}
|
||||
|
||||
// do nothing if logged in user and no CAPTCHA required
|
||||
if(!$this->getConf('forusers') && $_SERVER['REMOTE_USER']) {
|
||||
return;
|
||||
}
|
||||
|
||||
// check captcha
|
||||
$helper = plugin_load('helper', 'captcha');
|
||||
if(!$helper->check()) {
|
||||
if($act == 'save') {
|
||||
// stay in preview mode
|
||||
$event->data = 'preview';
|
||||
} else {
|
||||
// stay in register mode, but disable the save parameter
|
||||
$_POST['save'] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the additional fields for the edit form
|
||||
*/
|
||||
function handle_editform_output(&$event, $param) {
|
||||
// check if source view -> no captcha needed
|
||||
if(!$param['oldhook']) {
|
||||
// get position of submit button
|
||||
$pos = $event->data->findElementByAttribute('type', 'submit');
|
||||
if(!$pos) return; // no button -> source view mode
|
||||
} elseif($param['editform'] && !$event->data['writable']) {
|
||||
if($param['editform'] && !$event->data['writable']) return;
|
||||
}
|
||||
|
||||
// do nothing if logged in user and no CAPTCHA required
|
||||
if(!$this->getConf('forusers') && $_SERVER['REMOTE_USER']) {
|
||||
return;
|
||||
}
|
||||
|
||||
// get the CAPTCHA
|
||||
$helper = plugin_load('helper', 'captcha');
|
||||
$out = $helper->getHTML();
|
||||
|
||||
if($param['oldhook']) {
|
||||
// old wiki - just print
|
||||
echo $out;
|
||||
} else {
|
||||
// new wiki - insert at correct position
|
||||
$event->data->insertElement($pos++, $out);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Pre-Sanitize the action command
|
||||
*
|
||||
* Similar to act_clean in action.php but simplified and without
|
||||
* error messages
|
||||
*/
|
||||
function _act_clean($act) {
|
||||
// check if the action was given as array key
|
||||
if(is_array($act)) {
|
||||
list($act) = array_keys($act);
|
||||
}
|
||||
|
||||
//remove all bad chars
|
||||
$act = strtolower($act);
|
||||
$act = preg_replace('/[^a-z_]+/', '', $act);
|
||||
|
||||
return $act;
|
||||
}
|
||||
|
||||
}
|
||||
|
15
sources/lib/plugins/captcha/conf/default.php
Normal file
15
sources/lib/plugins/captcha/conf/default.php
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
/**
|
||||
* Options for the CAPTCHA plugin
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
|
||||
$conf['mode'] = 'js';
|
||||
$conf['forusers'] = 0;
|
||||
$conf['regprotect'] = 1;
|
||||
$conf['lettercount'] = 5;
|
||||
$conf['width'] = 115;
|
||||
$conf['height'] = 22;
|
||||
$conf['question'] = 'What\'s the answer to life, the universe and everything?';
|
||||
$conf['answer'] = '42';
|
15
sources/lib/plugins/captcha/conf/metadata.php
Normal file
15
sources/lib/plugins/captcha/conf/metadata.php
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
/**
|
||||
* Options for the CAPTCHA plugin
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
|
||||
$meta['mode'] = array('multichoice', '_choices' => array('js', 'text', 'math', 'question', 'image', 'audio', 'figlet'));
|
||||
$meta['regprotect'] = array('onoff');
|
||||
$meta['forusers'] = array('onoff');
|
||||
$meta['lettercount'] = array('numeric', '_min' => 3, '_max' => 16);
|
||||
$meta['width'] = array('numeric', '_pattern' => '/[0-9]+/');
|
||||
$meta['height'] = array('numeric', '_pattern' => '/[0-9]+/');
|
||||
$meta['question'] = array('string');
|
||||
$meta['answer'] = array('string');
|
1097
sources/lib/plugins/captcha/figlet.flf
Normal file
1097
sources/lib/plugins/captcha/figlet.flf
Normal file
File diff suppressed because it is too large
Load diff
169
sources/lib/plugins/captcha/figlet.php
Normal file
169
sources/lib/plugins/captcha/figlet.php
Normal file
|
@ -0,0 +1,169 @@
|
|||
<?php
|
||||
/* _ _____ _ _ _
|
||||
* ___ | |_ ___ | __||_| ___ | | ___ | |_
|
||||
* | . || || . || __|| || . || || -_|| _|
|
||||
* | _||_|_|| _||__| |_||_ ||_||___||_|
|
||||
* |_| |_| |___|
|
||||
*
|
||||
* Author : Lucas Baltes (lucas@thebobo.com)
|
||||
* $Author: lhb $
|
||||
*
|
||||
* Website : http://www.thebobo.com/
|
||||
*
|
||||
* Date : $Date: 2003/03/16 10:08:01 $
|
||||
* Rev : $Revision: 1.0 $
|
||||
*
|
||||
* Copyright: 2003 - Lucas Baltes
|
||||
* License : GPL - http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* Purpose : Figlet font class
|
||||
*
|
||||
* Comments : phpFiglet is a php class to somewhat recreate the
|
||||
* functionality provided by the original figlet program
|
||||
* (http://www.figlet.org/). It does not (yet) support the
|
||||
* more advanced features like kerning or smushing. It can
|
||||
* use the same (flf2a) fonts as the original figlet program
|
||||
* (see their website for more fonts).
|
||||
*
|
||||
* Usage : $phpFiglet = new phpFiglet();
|
||||
*
|
||||
* if ($phpFiglet->loadFont("fonts/standard.flf")) {
|
||||
* $phpFiglet->display("Hello World");
|
||||
* } else {
|
||||
* trigger_error("Could not load font file");
|
||||
* }
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
class phpFiglet
|
||||
{
|
||||
|
||||
/*
|
||||
* Internal variables
|
||||
*/
|
||||
|
||||
var $signature;
|
||||
var $hardblank;
|
||||
var $height;
|
||||
var $baseline;
|
||||
var $maxLenght;
|
||||
var $oldLayout;
|
||||
var $commentLines;
|
||||
var $printDirection;
|
||||
var $fullLayout;
|
||||
var $codeTagCount;
|
||||
var $fontFile;
|
||||
|
||||
|
||||
/*
|
||||
* Contructor
|
||||
*/
|
||||
|
||||
function phpFiglet()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Load an flf font file. Return true on success, false on error.
|
||||
*/
|
||||
|
||||
function loadfont($fontfile)
|
||||
{
|
||||
$this->fontFile = @file($fontfile);
|
||||
if (!$this->fontFile) return false;
|
||||
|
||||
$hp = explode(" ", $this->fontFile[0]); // get header
|
||||
|
||||
$this->signature = substr($hp[0], 0, strlen($hp[0]) -1);
|
||||
$this->hardblank = substr($hp[0], strlen($hp[0]) -1, 1);
|
||||
$this->height = $hp[1];
|
||||
$this->baseline = $hp[2];
|
||||
$this->maxLenght = $hp[3];
|
||||
$this->oldLayout = $hp[4];
|
||||
$this->commentLines = $hp[5] + 1;
|
||||
$this->printDirection = $hp[6];
|
||||
$this->fullLayout = $hp[7];
|
||||
$this->codeTagCount = $hp[8];
|
||||
|
||||
unset($hp);
|
||||
|
||||
if ($this->signature != "flf2a") {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Get a character as a string, or an array with one line
|
||||
* for each font height.
|
||||
*/
|
||||
|
||||
function getCharacter($character, $asarray = false)
|
||||
{
|
||||
$asciValue = ord($character);
|
||||
$start = $this->commentLines + ($asciValue - 32) * $this->height;
|
||||
$data = ($asarray) ? array() : "";
|
||||
|
||||
for ($a = 0; $a < $this->height; $a++)
|
||||
{
|
||||
$tmp = $this->fontFile[$start + $a];
|
||||
$tmp = str_replace("@", "", $tmp);
|
||||
//$tmp = trim($tmp);
|
||||
$tmp = str_replace($this->hardblank, " ", $tmp);
|
||||
|
||||
if ($asarray) {
|
||||
$data[] = $tmp;
|
||||
} else {
|
||||
$data .= $tmp;
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Returns a figletized line of characters.
|
||||
*/
|
||||
|
||||
function fetch($line)
|
||||
{
|
||||
$ret = "";
|
||||
|
||||
for ($i = 0; $i < (strlen($line)); $i++)
|
||||
{
|
||||
$data[] = $this->getCharacter($line[$i], true);
|
||||
}
|
||||
|
||||
@reset($data);
|
||||
|
||||
for ($i = 0; $i < $this->height; $i++)
|
||||
{
|
||||
while (list($k, $v) = each($data))
|
||||
{
|
||||
$ret .= str_replace("\n", "", $v[$i]);
|
||||
}
|
||||
reset($data);
|
||||
$ret .= "\n";
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Display (print) a figletized line of characters.
|
||||
*/
|
||||
|
||||
function display($line)
|
||||
{
|
||||
print $this->fetch($line);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
8
sources/lib/plugins/captcha/fonts/README
Normal file
8
sources/lib/plugins/captcha/fonts/README
Normal file
|
@ -0,0 +1,8 @@
|
|||
All fonts placed in this directory will be used randomly for the image captcha.
|
||||
The more and exotic fonts you use, the harder it will be to OCR. However you
|
||||
should be aware that most fonts are very hard to read when used for small sizes.
|
||||
|
||||
Provided fonts:
|
||||
|
||||
VeraSe.ttf - Bitsream Vera, http://www-old.gnome.org/fonts/
|
||||
Rufscript010.ttf - Rufscript, http://openfontlibrary.org/en/font/rufscript
|
BIN
sources/lib/plugins/captcha/fonts/Rufscript010.ttf
Normal file
BIN
sources/lib/plugins/captcha/fonts/Rufscript010.ttf
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/fonts/VeraSe.ttf
Normal file
BIN
sources/lib/plugins/captcha/fonts/VeraSe.ttf
Normal file
Binary file not shown.
318
sources/lib/plugins/captcha/helper.php
Normal file
318
sources/lib/plugins/captcha/helper.php
Normal file
|
@ -0,0 +1,318 @@
|
|||
<?php
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
// must be run within Dokuwiki
|
||||
if(!defined('DOKU_INC')) die();
|
||||
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC.'lib/plugins/');
|
||||
require_once(DOKU_INC.'inc/blowfish.php');
|
||||
|
||||
class helper_plugin_captcha extends DokuWiki_Plugin {
|
||||
|
||||
protected $field_in = 'plugin__captcha';
|
||||
protected $field_sec = 'plugin__captcha_secret';
|
||||
protected $field_hp = 'plugin__captcha_honeypot';
|
||||
|
||||
/**
|
||||
* Constructor. Initializes field names
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->field_in = md5($this->_fixedIdent().$this->field_in);
|
||||
$this->field_sec = md5($this->_fixedIdent().$this->field_sec);
|
||||
$this->field_hp = md5($this->_fixedIdent().$this->field_hp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the CAPTCHA should be used. Always check this before using the methods below.
|
||||
*
|
||||
* @return bool true when the CAPTCHA should be used
|
||||
*/
|
||||
public function isEnabled() {
|
||||
if(!$this->getConf('forusers') && $_SERVER['REMOTE_USER']) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the HTML to display the CAPTCHA with the chosen method
|
||||
*/
|
||||
public function getHTML() {
|
||||
global $ID;
|
||||
|
||||
$rand = (float) (rand(0, 10000)) / 10000;
|
||||
if($this->getConf('mode') == 'math') {
|
||||
$code = $this->_generateMATH($this->_fixedIdent(), $rand);
|
||||
$code = $code[0];
|
||||
$text = $this->getLang('fillmath');
|
||||
} elseif($this->getConf('mode') == 'question') {
|
||||
$text = $this->getConf('question');
|
||||
} else {
|
||||
$code = $this->_generateCAPTCHA($this->_fixedIdent(), $rand);
|
||||
$text = $this->getLang('fillcaptcha');
|
||||
}
|
||||
$secret = $this->encrypt($rand);
|
||||
|
||||
$txtlen = $this->getConf('lettercount');
|
||||
|
||||
$out = '';
|
||||
$out .= '<div id="plugin__captcha_wrapper">';
|
||||
$out .= '<input type="hidden" name="'.$this->field_sec.'" value="'.hsc($secret).'" />';
|
||||
$out .= '<label for="plugin__captcha">'.$text.'</label> ';
|
||||
|
||||
switch($this->getConf('mode')) {
|
||||
case 'math':
|
||||
case 'text':
|
||||
$out .= $this->_obfuscateText($code);
|
||||
break;
|
||||
case 'js':
|
||||
$out .= '<span id="plugin__captcha_code">'.$this->_obfuscateText($code).'</span>';
|
||||
break;
|
||||
case 'image':
|
||||
$out .= '<img src="'.DOKU_BASE.'lib/plugins/captcha/img.php?secret='.rawurlencode($secret).'&id='.$ID.'" '.
|
||||
' width="'.$this->getConf('width').'" height="'.$this->getConf('height').'" alt="" /> ';
|
||||
break;
|
||||
case 'audio':
|
||||
$out .= '<img src="'.DOKU_BASE.'lib/plugins/captcha/img.php?secret='.rawurlencode($secret).'&id='.$ID.'" '.
|
||||
' width="'.$this->getConf('width').'" height="'.$this->getConf('height').'" alt="" /> ';
|
||||
$out .= '<a href="'.DOKU_BASE.'lib/plugins/captcha/wav.php?secret='.rawurlencode($secret).'&id='.$ID.'"'.
|
||||
' class="JSnocheck" title="'.$this->getLang('soundlink').'">';
|
||||
$out .= '<img src="'.DOKU_BASE.'lib/plugins/captcha/sound.png" width="16" height="16"'.
|
||||
' alt="'.$this->getLang('soundlink').'" /></a>';
|
||||
break;
|
||||
case 'figlet':
|
||||
require_once(dirname(__FILE__).'/figlet.php');
|
||||
$figlet = new phpFiglet();
|
||||
if($figlet->loadfont(dirname(__FILE__).'/figlet.flf')) {
|
||||
$out .= '<pre>';
|
||||
$out .= rtrim($figlet->fetch($code));
|
||||
$out .= '</pre>';
|
||||
} else {
|
||||
msg('Failed to load figlet.flf font file. CAPTCHA broken', -1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
$out .= ' <input type="text" size="'.$txtlen.'" name="'.$this->field_in.'" class="edit" /> ';
|
||||
|
||||
// add honeypot field
|
||||
$out .= '<label class="no">'.$this->getLang('honeypot').'<input type="text" name="'.$this->field_hp.'" /></label>';
|
||||
$out .= '</div>';
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the the CAPTCHA was solved correctly
|
||||
*
|
||||
* @param bool $msg when true, an error will be signalled through the msg() method
|
||||
* @return bool true when the answer was correct, otherwise false
|
||||
*/
|
||||
public function check($msg = true) {
|
||||
// compare provided string with decrypted captcha
|
||||
$rand = $this->decrypt($_REQUEST[$this->field_sec]);
|
||||
|
||||
if($this->getConf('mode') == 'math') {
|
||||
$code = $this->_generateMATH($this->_fixedIdent(), $rand);
|
||||
$code = $code[1];
|
||||
} elseif($this->getConf('mode') == 'question') {
|
||||
$code = $this->getConf('answer');
|
||||
} else {
|
||||
$code = $this->_generateCAPTCHA($this->_fixedIdent(), $rand);
|
||||
}
|
||||
|
||||
if(!$_REQUEST[$this->field_sec] ||
|
||||
!$_REQUEST[$this->field_in] ||
|
||||
utf8_strtolower($_REQUEST[$this->field_in]) != utf8_strtolower($code) ||
|
||||
trim($_REQUEST[$this->field_hp]) !== ''
|
||||
) {
|
||||
if($msg) msg($this->getLang('testfailed'), -1);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a semi-secret fixed string identifying the current page and user
|
||||
*
|
||||
* This string is always the same for the current user when editing the same
|
||||
* page revision, but only for one day. Editing a page before midnight and saving
|
||||
* after midnight will result in a failed CAPTCHA once, but makes sure it can
|
||||
* not be reused which is especially important for the registration form where the
|
||||
* $ID usually won't change.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function _fixedIdent() {
|
||||
global $ID;
|
||||
$lm = @filemtime(wikiFN($ID));
|
||||
$td = date('Y-m-d');
|
||||
return auth_browseruid().
|
||||
auth_cookiesalt().
|
||||
$ID.$lm.$td;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds random space characters within the given text
|
||||
*
|
||||
* Keeps subsequent numbers without spaces (for math problem)
|
||||
*
|
||||
* @param $text
|
||||
* @return string
|
||||
*/
|
||||
protected function _obfuscateText($text) {
|
||||
$new = '';
|
||||
|
||||
$spaces = array(
|
||||
"\r",
|
||||
"\n",
|
||||
"\r\n",
|
||||
' ',
|
||||
"\xC2\xA0", // \u00A0 NO-BREAK SPACE
|
||||
"\xE2\x80\x80", // \u2000 EN QUAD
|
||||
"\xE2\x80\x81", // \u2001 EM QUAD
|
||||
"\xE2\x80\x82", // \u2002 EN SPACE
|
||||
// "\xE2\x80\x83", // \u2003 EM SPACE
|
||||
"\xE2\x80\x84", // \u2004 THREE-PER-EM SPACE
|
||||
"\xE2\x80\x85", // \u2005 FOUR-PER-EM SPACE
|
||||
"\xE2\x80\x86", // \u2006 SIX-PER-EM SPACE
|
||||
"\xE2\x80\x87", // \u2007 FIGURE SPACE
|
||||
"\xE2\x80\x88", // \u2008 PUNCTUATION SPACE
|
||||
"\xE2\x80\x89", // \u2009 THIN SPACE
|
||||
"\xE2\x80\x8A", // \u200A HAIR SPACE
|
||||
"\xE2\x80\xAF", // \u202F NARROW NO-BREAK SPACE
|
||||
"\xE2\x81\x9F", // \u205F MEDIUM MATHEMATICAL SPACE
|
||||
|
||||
"\xE1\xA0\x8E\r\n", // \u180E MONGOLIAN VOWEL SEPARATOR
|
||||
"\xE2\x80\x8B\r\n", // \u200B ZERO WIDTH SPACE
|
||||
"\xEF\xBB\xBF\r\n", // \uFEFF ZERO WIDTH NO-BREAK SPACE
|
||||
);
|
||||
|
||||
$len = strlen($text);
|
||||
for($i = 0; $i < $len - 1; $i++) {
|
||||
$new .= $text{$i};
|
||||
|
||||
if(!is_numeric($text{$i + 1})) {
|
||||
$new .= $spaces[array_rand($spaces)];
|
||||
}
|
||||
}
|
||||
$new .= $text{$len - 1};
|
||||
return $new;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random char string
|
||||
*
|
||||
* @param $fixed string the fixed part, any string
|
||||
* @param $rand float some random number between 0 and 1
|
||||
* @return string
|
||||
*/
|
||||
public function _generateCAPTCHA($fixed, $rand) {
|
||||
$fixed = hexdec(substr(md5($fixed), 5, 5)); // use part of the md5 to generate an int
|
||||
$numbers = md5($rand * $fixed); // combine both values
|
||||
|
||||
// now create the letters
|
||||
$code = '';
|
||||
for($i = 0; $i < ($this->getConf('lettercount') * 2); $i += 2) {
|
||||
$code .= chr(floor(hexdec($numbers[$i].$numbers[$i + 1]) / 10) + 65);
|
||||
}
|
||||
|
||||
return $code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a mathematical task and its result
|
||||
*
|
||||
* @param $fixed string the fixed part, any string
|
||||
* @param $rand float some random number between 0 and 1
|
||||
* @return array taks, result
|
||||
*/
|
||||
protected function _generateMATH($fixed, $rand) {
|
||||
$fixed = hexdec(substr(md5($fixed), 5, 5)); // use part of the md5 to generate an int
|
||||
$numbers = md5($rand * $fixed); // combine both values
|
||||
|
||||
// first letter is the operator (+/-)
|
||||
$op = (hexdec($numbers[0]) > 8) ? -1 : 1;
|
||||
$num = array(hexdec($numbers[1].$numbers[2]), hexdec($numbers[3]));
|
||||
|
||||
// we only want positive results
|
||||
if(($op < 0) && ($num[0] < $num[1])) rsort($num);
|
||||
|
||||
// prepare result and task text
|
||||
$res = $num[0] + ($num[1] * $op);
|
||||
$task = $num[0].(($op < 0) ? '-' : '+').$num[1].'=?';
|
||||
|
||||
return array($task, $res);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a CAPTCHA image
|
||||
*
|
||||
* @param string $text the letters to display
|
||||
*/
|
||||
public function _imageCAPTCHA($text) {
|
||||
$w = $this->getConf('width');
|
||||
$h = $this->getConf('height');
|
||||
|
||||
$fonts = glob(dirname(__FILE__).'/fonts/*.ttf');
|
||||
|
||||
// create a white image
|
||||
$img = imagecreatetruecolor($w, $h);
|
||||
$white = imagecolorallocate($img, 255, 255, 255);
|
||||
imagefill($img, 0, 0, $white);
|
||||
|
||||
// add some lines as background noise
|
||||
for($i = 0; $i < 30; $i++) {
|
||||
$color = imagecolorallocate($img, rand(100, 250), rand(100, 250), rand(100, 250));
|
||||
imageline($img, rand(0, $w), rand(0, $h), rand(0, $w), rand(0, $h), $color);
|
||||
}
|
||||
|
||||
// draw the letters
|
||||
$txtlen = strlen($text);
|
||||
for($i = 0; $i < $txtlen; $i++) {
|
||||
$font = $fonts[array_rand($fonts)];
|
||||
$color = imagecolorallocate($img, rand(0, 100), rand(0, 100), rand(0, 100));
|
||||
$size = rand(floor($h / 1.8), floor($h * 0.7));
|
||||
$angle = rand(-35, 35);
|
||||
|
||||
$x = ($w * 0.05) + $i * floor($w * 0.9 / $txtlen);
|
||||
$cheight = $size + ($size * 0.5);
|
||||
$y = floor($h / 2 + $cheight / 3.8);
|
||||
|
||||
imagettftext($img, $size, $angle, $x, $y, $color, $font, $text[$i]);
|
||||
}
|
||||
|
||||
header("Content-type: image/png");
|
||||
imagepng($img);
|
||||
imagedestroy($img);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encrypt the given string with the cookie salt
|
||||
*
|
||||
* @param string $data
|
||||
* @return string
|
||||
*/
|
||||
public function encrypt($data) {
|
||||
if(function_exists('auth_encrypt')) {
|
||||
$data = auth_encrypt($data, auth_cookiesalt()); // since binky
|
||||
} else {
|
||||
$data = PMA_blowfish_encrypt($data, auth_cookiesalt()); // deprecated
|
||||
}
|
||||
|
||||
return base64_encode($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypt the given string with the cookie salt
|
||||
*
|
||||
* @param string $data
|
||||
* @return string
|
||||
*/
|
||||
public function decrypt($data) {
|
||||
$data = base64_decode($data);
|
||||
|
||||
if(function_exists('auth_decrypt')) {
|
||||
return auth_decrypt($data, auth_cookiesalt()); // since binky
|
||||
} else {
|
||||
return PMA_blowfish_decrypt($data, auth_cookiesalt()); // deprecated
|
||||
}
|
||||
}
|
||||
}
|
22
sources/lib/plugins/captcha/img.php
Normal file
22
sources/lib/plugins/captcha/img.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
/**
|
||||
* CAPTCHA antispam plugin - Image generator
|
||||
*
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
* @author Andreas Gohr <gohr@cosmocode.de>
|
||||
*/
|
||||
|
||||
if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__).'/../../../');
|
||||
define('NOSESSION', true);
|
||||
define('DOKU_DISABLE_GZIP_OUTPUT', 1);
|
||||
require_once(DOKU_INC.'inc/init.php');
|
||||
require_once(DOKU_INC.'inc/auth.php');
|
||||
|
||||
$ID = $_REQUEST['id'];
|
||||
/** @var helper_plugin_captcha $plugin */
|
||||
$plugin = plugin_load('helper', 'captcha');
|
||||
$rand = $plugin->decrypt($_REQUEST['secret']);
|
||||
$code = $plugin->_generateCAPTCHA($plugin->_fixedIdent(), $rand);
|
||||
$plugin->_imageCAPTCHA($code);
|
||||
|
||||
//Setup VIM: ex: et ts=4 enc=utf-8 :
|
12
sources/lib/plugins/captcha/lang/ar/lang.php
Normal file
12
sources/lib/plugins/captcha/lang/ar/lang.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author alhajr <alhajr300@gmail.com>
|
||||
*/
|
||||
$lang['testfailed'] = 'عذراً، لكن لم يكن الرد على كلمة التحقق بشكل صحيح.';
|
||||
$lang['fillcaptcha'] = 'الرجاء تعبئة كافة الأحرف في المربع.';
|
||||
$lang['fillmath'] = 'الرجاء حل المعادلة التالية.';
|
||||
$lang['soundlink'] = 'إذا كنت لا تستطيع قراءة الحروف على الصورة، تحميل ملف الصوت يساعدك على قراءة الأحرف.';
|
||||
$lang['honeypot'] = 'الرجاء الحفاظ على هذا الحقل فارغاً:';
|
21
sources/lib/plugins/captcha/lang/ar/settings.php
Normal file
21
sources/lib/plugins/captcha/lang/ar/settings.php
Normal file
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author alhajr <alhajr300@gmail.com>
|
||||
*/
|
||||
$lang['mode'] = 'أي نوع من كلمة التحقق استخدامها؟';
|
||||
$lang['mode_o_js'] = 'نص (مملوءة مسبقا مع جافا سكريبت)';
|
||||
$lang['mode_o_text'] = 'النص (دليل فقط)';
|
||||
$lang['mode_o_math'] = 'مشكلة الرياضيات';
|
||||
$lang['mode_o_question'] = 'مسألة ثابتة';
|
||||
$lang['mode_o_image'] = 'الصورة (أسوأ إمكانية الوصول)';
|
||||
$lang['mode_o_audio'] = 'الصورة + الصوت (أفضل إمكانية الوصول)';
|
||||
$lang['regprotect'] = 'حماية نموذج التسجيل كذلك؟';
|
||||
$lang['forusers'] = 'استخدام كلمة التحقق في تسجيل المستخدمين، أيضا؟';
|
||||
$lang['lettercount'] = 'عدد من الرسائل لاستخدام (3-16). إذا قمت بزيادة كمية، ومن المؤكد أن زيادة العرض في الصورة أدناه كذلك.';
|
||||
$lang['width'] = 'عرض الصورة كلمة التحقق (بالبكسل)';
|
||||
$lang['height'] = 'ارتفاع الصورة كلمة التحقق (بالبكسل)';
|
||||
$lang['question'] = 'سؤال لوضع مسألة ثابتة';
|
||||
$lang['answer'] = 'جواب المسألة الثابتة';
|
11
sources/lib/plugins/captcha/lang/cs/lang.php
Normal file
11
sources/lib/plugins/captcha/lang/cs/lang.php
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
/**
|
||||
* Czech language file
|
||||
*
|
||||
* @author Antonin Komenda <gree@grees.net>
|
||||
*/
|
||||
|
||||
$lang['testfailed'] = "Bohužel, ale na CAPTCHA nebylo odpovězeno správně. Jste vůbec člověk?";
|
||||
$lang['fillcaptcha'] = "Vyplňte, prosím, všechna písmena v poli, abyste dokázali, že nejste robot.";
|
||||
$lang['soundlink'] = "Pokud nedokážete přečíst písmena na obrázku, stáhněte si tento .wav soubor, kde je text přečtený.";
|
||||
|
18
sources/lib/plugins/captcha/lang/cs/settings.php
Normal file
18
sources/lib/plugins/captcha/lang/cs/settings.php
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
/**
|
||||
* Czech language file
|
||||
*
|
||||
* @author Antonin Komenda <gree@grees.net>
|
||||
*/
|
||||
|
||||
$lang['mode'] = "Který typ CAPTCHA se má použít?";
|
||||
$lang['mode_o_js'] = "Text (předvyplněný JavaScriptem)";
|
||||
$lang['mode_o_text'] = "Text (pouze manuálně vložený)";
|
||||
$lang['mode_o_image'] = "Obrázek (špatná přístupnost)";
|
||||
$lang['mode_o_audio'] = "Obrázek (lepší přístupnost)";
|
||||
|
||||
$lang['regprotect'] = "Chránit také registrační formulář?";
|
||||
$lang['forusers'] = "Používat CAPTCHA i pro registrované uživatele?";
|
||||
$lang['width'] = "Šírka CAPTCHA obrázku (v bodech)";
|
||||
$lang['height'] = "Výška CAPTCHA obrázku (v bodech)";
|
||||
|
12
sources/lib/plugins/captcha/lang/da/lang.php
Normal file
12
sources/lib/plugins/captcha/lang/da/lang.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author soer9648 <soer9648@eucl.dk>
|
||||
*/
|
||||
$lang['testfailed'] = 'Desværre, CAPTCHA blev ikke besvaret korrekt. Du er muligvis ikke et menneske?';
|
||||
$lang['fillcaptcha'] = 'Skriv venligst alle bogstaverne i boksen for at bevise at du er et menneske.';
|
||||
$lang['fillmath'] = 'Løs venligst følgende ligning for at bevise at du er et menneske.';
|
||||
$lang['soundlink'] = 'Hvis du ikke kan læse bogstaverne på skærmen, kan du downloade denne .wav-fil, for at få dem læst op.';
|
||||
$lang['honeypot'] = 'Hold venligst dette felt tomt:';
|
22
sources/lib/plugins/captcha/lang/da/settings.php
Normal file
22
sources/lib/plugins/captcha/lang/da/settings.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author soer9648 <soer9648@eucl.dk>
|
||||
*/
|
||||
$lang['mode'] = 'Hvilken type CAPTCHA skal benyttes?';
|
||||
$lang['mode_o_js'] = 'Tekst (præudfyldt af JavaScript)';
|
||||
$lang['mode_o_text'] = 'Tekst (kun manuelt)';
|
||||
$lang['mode_o_math'] = 'Matematikproblem';
|
||||
$lang['mode_o_question'] = 'Løsning';
|
||||
$lang['mode_o_image'] = 'Billede (dårlig tilgængelighed)';
|
||||
$lang['mode_o_audio'] = 'Billede+Audio (bedre tilgængelighed)';
|
||||
$lang['mode_o_figlet'] = 'Figlet ASCII Art (dårlig tilgængelighed)';
|
||||
$lang['regprotect'] = 'Beskyt også registreringsformularen?';
|
||||
$lang['forusers'] = 'Benyt også CAPTCHA til brugere der er logget ind?';
|
||||
$lang['lettercount'] = 'Antal af bogstaver der skal benyttes (3-16). Hvis du øger antallet, skal du også huske at øge bredden af billedet herunder.';
|
||||
$lang['width'] = 'Bredden af CAPTCHA-billedet (pixel)';
|
||||
$lang['height'] = 'Højden af CAPTCHA-billedet (pixel)';
|
||||
$lang['question'] = 'Spørgsmål til fast-spørgsmål-tilstand';
|
||||
$lang['answer'] = 'Svar til fast-spørgsmål-tilstand';
|
12
sources/lib/plugins/captcha/lang/de-informal/lang.php
Normal file
12
sources/lib/plugins/captcha/lang/de-informal/lang.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Thomas Templin <templin@gnuwhv.de>
|
||||
*/
|
||||
$lang['testfailed'] = 'Das CAPTCHA wurde nicht korrekt beantwortet.';
|
||||
$lang['fillcaptcha'] = 'Bitte übertrage die Buchstaben in das Eingabefeld.';
|
||||
$lang['fillmath'] = 'Bitte löse folgende Gleichung:';
|
||||
$lang['soundlink'] = 'Wenn Du die Buchstaben auf dem Bild nicht lesen kannst, lade diese .wav Datei herunter, um sie vorgelesen zu bekommen.';
|
||||
$lang['honeypot'] = 'Dieses Feld bitte leer lassen';
|
22
sources/lib/plugins/captcha/lang/de-informal/settings.php
Normal file
22
sources/lib/plugins/captcha/lang/de-informal/settings.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Thomas Templin <templin@gnuwhv.de>
|
||||
*/
|
||||
$lang['mode'] = 'Welcher CAPTCHA-Typ soll benutzt werden?';
|
||||
$lang['mode_o_js'] = 'Text (automatisch ausgefüllt via JavaScript)';
|
||||
$lang['mode_o_text'] = 'Text (manuell auszufüllen)';
|
||||
$lang['mode_o_math'] = 'Mathe-Aufgabe';
|
||||
$lang['mode_o_question'] = 'Feste Frage';
|
||||
$lang['mode_o_image'] = 'Bild (nicht barrierefrei)';
|
||||
$lang['mode_o_audio'] = 'Bild+Audio (barrierefrei)';
|
||||
$lang['mode_o_figlet'] = 'Figlet ASCII-Kunst (nicht barrierefrei)';
|
||||
$lang['regprotect'] = 'Auch die Anmelde-Seite Schützen?';
|
||||
$lang['forusers'] = 'CAPTCHA auch für angemeldete Benutzer verwenden?';
|
||||
$lang['lettercount'] = 'Anzahl der zu verwendenen Buchstaben (3-16). Wenn Du die Anzahl erhöhst, denke daran auch die Breite des Bildes im nächsten Feld zu erhöhen.';
|
||||
$lang['width'] = 'Breite des CAPTCHA Bildes (in Pixel)';
|
||||
$lang['height'] = 'Höhe des CAPTCHA Bildes (in Pixel)';
|
||||
$lang['question'] = 'Frage für den "Feste Frage" Modus.';
|
||||
$lang['answer'] = 'Antwort für den "Feste Frage" Modus.';
|
12
sources/lib/plugins/captcha/lang/de/lang.php
Normal file
12
sources/lib/plugins/captcha/lang/de/lang.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
$lang['testfailed'] = 'Das CAPTCHA wurde nicht korrekt beantwortet.';
|
||||
$lang['fillcaptcha'] = 'Bitte übertragen Sie die Buchstaben in das Eingabefeld.';
|
||||
$lang['fillmath'] = 'Bitte lösen Sie folgende Gleichung:';
|
||||
$lang['soundlink'] = 'Wenn Sie die Buchstaben auf dem Bild nicht lesen können, laden Sie diese .wav Datei herunter, um sie vorgelesen zu bekommen.';
|
||||
$lang['honeypot'] = 'Dieses Feld bitte leer lassen';
|
23
sources/lib/plugins/captcha/lang/de/settings.php
Normal file
23
sources/lib/plugins/captcha/lang/de/settings.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
* @author Thomas Templin <templin@gnuwhv.de>
|
||||
*/
|
||||
$lang['mode'] = 'Welcher CAPTCHA-Typ soll benutzt werden?';
|
||||
$lang['mode_o_js'] = 'Text (automatisch ausgefüllt via JavaScript)';
|
||||
$lang['mode_o_text'] = 'Text (manuell auszufüllen)';
|
||||
$lang['mode_o_math'] = 'Mathe-Aufgabe';
|
||||
$lang['mode_o_question'] = 'Feste Frage';
|
||||
$lang['mode_o_image'] = 'Bild (nicht barrierefrei)';
|
||||
$lang['mode_o_audio'] = 'Bild+Audio (barrierefrei)';
|
||||
$lang['mode_o_figlet'] = 'Figlet ASCII-Kunst (nicht barrierefrei)';
|
||||
$lang['regprotect'] = 'Protect the registration form as well?';
|
||||
$lang['forusers'] = 'Use CAPTCHA for logged in users, too?';
|
||||
$lang['lettercount'] = 'Anzahl der zu verwendenen Buchstaben (3-16). Wenn Sie die Anzahl erhöhen, denken Sie daran auch die Breite des Bildes im nächsten Feld zu erhöhen.';
|
||||
$lang['width'] = 'Width of the CAPTCHA image (pixel)';
|
||||
$lang['height'] = 'Height of the CAPTCHA image (pixel)';
|
||||
$lang['question'] = 'Frage für den "Feste Frage" Modus.';
|
||||
$lang['answer'] = 'Antwort für den "Feste Frage" Modus.';
|
4
sources/lib/plugins/captcha/lang/en/audio/LICENSE
Normal file
4
sources/lib/plugins/captcha/lang/en/audio/LICENSE
Normal file
|
@ -0,0 +1,4 @@
|
|||
This work is licensed under the Creative Commons Sampling Plus 1.0 License. To
|
||||
view a copy of this license, visit
|
||||
http://creativecommons.org/licenses/sampling+/1.0/ or send a letter to Creative
|
||||
Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
|
13
sources/lib/plugins/captcha/lang/en/audio/README
Normal file
13
sources/lib/plugins/captcha/lang/en/audio/README
Normal file
|
@ -0,0 +1,13 @@
|
|||
Author: Michael Klier <chi@chimeric.de>
|
||||
Link: http://www.chimeric.de/projects/npa
|
||||
Voice: Christian Spellenberg
|
||||
|
||||
These samples represent the NATO phonetical alphabet. They are protected
|
||||
by the Creative Commons Sampling Plus 1.0 License. You are free to use
|
||||
and redistribute these samples under the conditions defined by the
|
||||
license. For further information read the LICENSE file and visit
|
||||
http://www.creativecommons.org.
|
||||
|
||||
Note: The original high quality wave files were downsampled and converted
|
||||
to 8-Bit mono files for distribution with the CAPTCHA plugin. Visit
|
||||
the link above for the original files.
|
BIN
sources/lib/plugins/captcha/lang/en/audio/a.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/a.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/b.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/b.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/c.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/c.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/d.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/d.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/e.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/e.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/f.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/f.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/g.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/g.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/h.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/h.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/i.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/i.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/j.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/j.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/k.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/k.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/l.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/l.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/m.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/m.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/n.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/n.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/o.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/o.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/p.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/p.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/q.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/q.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/r.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/r.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/s.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/s.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/t.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/t.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/u.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/u.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/v.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/v.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/w.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/w.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/x.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/x.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/y.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/y.wav
Normal file
Binary file not shown.
BIN
sources/lib/plugins/captcha/lang/en/audio/z.wav
Normal file
BIN
sources/lib/plugins/captcha/lang/en/audio/z.wav
Normal file
Binary file not shown.
12
sources/lib/plugins/captcha/lang/en/lang.php
Normal file
12
sources/lib/plugins/captcha/lang/en/lang.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
/**
|
||||
* English language file
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
|
||||
$lang['testfailed'] = "Sorry, but the CAPTCHA wasn't answered correctly. Maybe you're not human at all?";
|
||||
$lang['fillcaptcha'] = "Please fill all the letters into the box to prove you're human.";
|
||||
$lang['fillmath'] = "Please solve the following equation to prove you're human.";
|
||||
$lang['soundlink'] = "If you can't read the letters on the image, download this .wav file to get them read to you.";
|
||||
$lang['honeypot'] = "Please keep this field empty: ";
|
23
sources/lib/plugins/captcha/lang/en/settings.php
Normal file
23
sources/lib/plugins/captcha/lang/en/settings.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
/**
|
||||
* English language file
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
|
||||
$lang['mode'] = "Which type of CAPTCHA to use?";
|
||||
$lang['mode_o_js'] = "Text (prefilled with JavaScript)";
|
||||
$lang['mode_o_text'] = "Text (manual only)";
|
||||
$lang['mode_o_math'] = "Math Problem";
|
||||
$lang['mode_o_question'] = "Fixed Question";
|
||||
$lang['mode_o_image'] = "Image (bad accessibility)";
|
||||
$lang['mode_o_audio'] = "Image+Audio (better accessibility)";
|
||||
$lang['mode_o_figlet'] = "Figlet ASCII Art (bad accessibility)";
|
||||
|
||||
$lang['regprotect'] = "Protect the registration form as well?";
|
||||
$lang['forusers'] = "Use CAPTCHA for logged in users, too?";
|
||||
$lang['lettercount']= "Number of letters to use (3-16). If you increase the amount, be sure to increase the width of the image below as well.";
|
||||
$lang['width'] = "Width of the CAPTCHA image (pixel)";
|
||||
$lang['height'] = "Height of the CAPTCHA image (pixel)";
|
||||
$lang['question'] = "Question for fixed question mode";
|
||||
$lang['answer'] = "Answer for fixed question mode";
|
13
sources/lib/plugins/captcha/lang/eo/lang.php
Normal file
13
sources/lib/plugins/captcha/lang/eo/lang.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Tradukis Ljosxa Kuznecov <ka2pink@gmail.com>
|
||||
* @author Robert Bogenschneider <bogi@uea.org>
|
||||
*/
|
||||
$lang['testfailed'] = 'Pardonon, sed CAPTCHA ne respondis korekte. Eble vi tute ne estas homo, ĉu?';
|
||||
$lang['fillcaptcha'] = 'Bonvolu tajpi ĉiujn literojn en la kampeton, por pruvi ke vi estas homo.';
|
||||
$lang['fillmath'] = 'Bonvolu solvi sekvan ekvacion por pruvi, ke vi estas homa.';
|
||||
$lang['soundlink'] = 'Se vi ne povas legi la literojn en la bildo, ŝarĝu tiun .wav-dosieron por aŭdi ilin.';
|
||||
$lang['honeypot'] = 'Bonvolu lasi tiun kampon malplena:';
|
23
sources/lib/plugins/captcha/lang/eo/settings.php
Normal file
23
sources/lib/plugins/captcha/lang/eo/settings.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Tradukis Ljosxa Kuznecov <ka2pink@gmail.com>
|
||||
* @author Robert Bogenschneider <bogi@uea.org>
|
||||
*/
|
||||
$lang['mode'] = 'Kiun varianton de CAPTCHA uzi?';
|
||||
$lang['mode_o_js'] = 'Teksto (prilaborita per Java-skripto)';
|
||||
$lang['mode_o_text'] = 'Teksto (nur permane)';
|
||||
$lang['mode_o_math'] = 'Matematika problemo';
|
||||
$lang['mode_o_question'] = 'Fiksa demando';
|
||||
$lang['mode_o_image'] = 'Bildo (malbona alirebleco)';
|
||||
$lang['mode_o_audio'] = 'Bildo+Sono (pli bona alirebleco)';
|
||||
$lang['mode_o_figlet'] = 'Figlet ASCII - arto (malbona alirebleco)';
|
||||
$lang['regprotect'] = 'Ĉu protekti ankaŭ la paĝon por registriĝo?';
|
||||
$lang['forusers'] = 'Uzi CAPTCHA-n ankaŭ por ensalutintaj uzantoj?';
|
||||
$lang['lettercount'] = 'Kvanto da uzendaj literoj (3-16). Se vi pligrandigas la kvanton, certigu ke vi same pligrandigas la larĝecon de la suba bildo.';
|
||||
$lang['width'] = 'Larĝeco de CAPTCHA-bildo (pikseloj)';
|
||||
$lang['height'] = 'Alteco de CAPTCHA-bildo (pikseloj)';
|
||||
$lang['question'] = 'Demando por fiks-demanda funkciado';
|
||||
$lang['answer'] = 'Respondo por fiks-demanda funkciado';
|
12
sources/lib/plugins/captcha/lang/es/lang.php
Normal file
12
sources/lib/plugins/captcha/lang/es/lang.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Antonio Castilla <antoniocastilla@trazoide.com>
|
||||
*/
|
||||
$lang['testfailed'] = 'Lo sentimos, pero el CAPTCHA no fue respondido correctamente. Tal vez no eres una persona.';
|
||||
$lang['fillcaptcha'] = 'Por favor, complete todas las letras de la caja para demostrar que eres una persona.';
|
||||
$lang['fillmath'] = 'Por favor, resuelve la siguiente ecuación para demostrar que eres una persona.';
|
||||
$lang['soundlink'] = 'Si no puede leer toda las letras de la imagen, descargue el archivo wav que lo leerá por ti.';
|
||||
$lang['honeypot'] = 'Por favor, mantenga este campo vacío: ';
|
21
sources/lib/plugins/captcha/lang/es/settings.php
Normal file
21
sources/lib/plugins/captcha/lang/es/settings.php
Normal file
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Antonio Castilla <antoniocastilla@trazoide.com>
|
||||
*/
|
||||
$lang['mode'] = '¿Qué tipo de CAPTCHA usará?';
|
||||
$lang['mode_o_js'] = 'Texto (rellenados con JavaScript)';
|
||||
$lang['mode_o_text'] = 'Texto (manual)';
|
||||
$lang['mode_o_math'] = 'Problemas de matemáticas';
|
||||
$lang['mode_o_question'] = 'Pregunta fija';
|
||||
$lang['mode_o_image'] = 'Imagen (peor accesibilidad)';
|
||||
$lang['mode_o_audio'] = 'Imagen + Audio (peor accesibilidad)';
|
||||
$lang['regprotect'] = '¿Quiere proteger el formulario de inscripción así?';
|
||||
$lang['forusers'] = '¿Utilizar CAPTCHA para los usuarios registrados también?';
|
||||
$lang['lettercount'] = 'Número de letras para usar (3-16). Si aumenta la cantidad, asegúrese de incrementar el ancho de la imagen de abajo también.';
|
||||
$lang['width'] = 'Ancho de la imagen CAPTCHA (pixel)';
|
||||
$lang['height'] = 'Altura de la imagen CAPTCHA (pixel)';
|
||||
$lang['question'] = 'Pregunta para el modo de pregunta fija';
|
||||
$lang['answer'] = 'Responda al modo de pregunta fija';
|
14
sources/lib/plugins/captcha/lang/fr/lang.php
Normal file
14
sources/lib/plugins/captcha/lang/fr/lang.php
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Emmanuel Dupin <seedfloyd@gmail.com>
|
||||
* @author bruno <bruno@ninesys.fr>
|
||||
* @author Fabrice Dejaigher <fabrice@chtiland.com>
|
||||
*/
|
||||
$lang['testfailed'] = 'Désolé, vous n\'avez pas répondu correctement au test anti-spam. Peut-être n\'êtes vous pas humain ?';
|
||||
$lang['fillcaptcha'] = 'Merci de recopier le code ci-contre pour prouver que vous êtes humain :';
|
||||
$lang['fillmath'] = 'S\'il vous plaît résolvez l\'équation suivante pour prouver que vous êtes humain.';
|
||||
$lang['soundlink'] = 'Si vous ne pouvez pas lire le code, téléchargez ce fichier .wav pour l\'écouter.';
|
||||
$lang['honeypot'] = 'Merci de laisser ce champ vide : ';
|
24
sources/lib/plugins/captcha/lang/fr/settings.php
Normal file
24
sources/lib/plugins/captcha/lang/fr/settings.php
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Emmanuel Dupin <seedfloyd@gmail.com>
|
||||
* @author bruno <bruno@ninesys.fr>
|
||||
* @author Fabrice Dejaigher <fabrice@chtiland.com>
|
||||
*/
|
||||
$lang['mode'] = 'Quel type de CAPTCHA utiliser ?';
|
||||
$lang['mode_o_js'] = 'Texte (prérempli avec JavaScript)';
|
||||
$lang['mode_o_text'] = 'Texte (remplissage manuel)';
|
||||
$lang['mode_o_math'] = 'Problème mathématique';
|
||||
$lang['mode_o_question'] = 'Question fixe';
|
||||
$lang['mode_o_image'] = 'Image (mauvaise accessibilité)';
|
||||
$lang['mode_o_audio'] = 'Image + Audio (meilleure accessibilité)';
|
||||
$lang['mode_o_figlet'] = 'ASCII Art (mauvaise accessibilité)';
|
||||
$lang['regprotect'] = 'Protéger également le formulaire d\'inscription ?';
|
||||
$lang['forusers'] = 'Utiliser également le CAPTCHA pour les utilisateurs connectés ?';
|
||||
$lang['lettercount'] = 'Nombre de lettres à utiliser (3 à 16). Pensez à augmenter la taille de l\'image ci-dessous en adéquation avec le nombre de lettres afin que celles-ci soient correctement affichées.';
|
||||
$lang['width'] = 'Largeur de l\'image du CAPTCHA (en pixels)';
|
||||
$lang['height'] = 'Hauteur de l\'image du CAPTCHA (en pixels)';
|
||||
$lang['question'] = 'Question pour le mode \'question fixe\'';
|
||||
$lang['answer'] = 'Réponse pour le mode \'question fixe\'';
|
12
sources/lib/plugins/captcha/lang/hu/lang.php
Normal file
12
sources/lib/plugins/captcha/lang/hu/lang.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Serenity87HUN <anikototh87@gmail.com>
|
||||
*/
|
||||
$lang['testfailed'] = 'Rosszul válaszoltál a CAPTCHA-ra. Lehet, hogy nem is ember vagy?';
|
||||
$lang['fillcaptcha'] = 'Kérlek írd be az összes betűt a dobozba, hogy bebizonyítsd, ember vagy.';
|
||||
$lang['fillmath'] = 'Kérled oldd meg az alábbi egyenletet, hogy bebizonyítsd, ember vagy.';
|
||||
$lang['soundlink'] = 'Ha nem látod a képen szereplő szöveget, töltsd le ezt a .wav fájlt, amiben felolvassák.';
|
||||
$lang['honeypot'] = 'Ezt a mezőt kérlek hagyd üresen:';
|
23
sources/lib/plugins/captcha/lang/hu/settings.php
Normal file
23
sources/lib/plugins/captcha/lang/hu/settings.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Serenity87HUN <anikototh87@gmail.com>
|
||||
* @author Marina Vladi <deldadam@gmail.com>
|
||||
*/
|
||||
$lang['mode'] = 'Milyen CAPTCHA-t használjunk?';
|
||||
$lang['mode_o_js'] = 'Szöveg (JavaScript által kitöltve)';
|
||||
$lang['mode_o_text'] = 'Szöveg (kézzel kitöltendő)';
|
||||
$lang['mode_o_math'] = 'Matematikai feladat';
|
||||
$lang['mode_o_question'] = 'Biztonsági kérdés';
|
||||
$lang['mode_o_image'] = 'Kép (nehezen érthető)';
|
||||
$lang['mode_o_audio'] = 'Kép+hang (jobban érthető)';
|
||||
$lang['mode_o_figlet'] = 'FIGlet-betűrajz (nehezen érthető)';
|
||||
$lang['regprotect'] = 'A regisztrációlapot is védetté tegyük?';
|
||||
$lang['forusers'] = 'Bejelentkezett felhasználóknál is használjunk CAPTCHA-t?';
|
||||
$lang['lettercount'] = 'Felhasználandó betűk száma (3-16). Ha növeled a karakterek számát, ne felejtsd el a kép szélességét is megváltoztatni.';
|
||||
$lang['width'] = 'CAPTCHA-hoz felhasznált kép szélessége (pixel)';
|
||||
$lang['height'] = 'CAPTCHA-hoz felhasznált kép magassága (pixel)';
|
||||
$lang['question'] = 'Biztonsági kérdés mód kérdése';
|
||||
$lang['answer'] = 'Válasz a biztonsági kérdésre';
|
11
sources/lib/plugins/captcha/lang/it/lang.php
Normal file
11
sources/lib/plugins/captcha/lang/it/lang.php
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
/**
|
||||
* Italian language file
|
||||
*
|
||||
* @author Willy
|
||||
*/
|
||||
|
||||
$lang['testfailed'] = "Spiacente, ma non hai risposto correttamente a CAPTCHA. Potresti non essere del tutto umano.";
|
||||
$lang['fillcaptcha'] = "Per favore inserisci le lettere nel box accanto per provare che sei una persona reale.";
|
||||
$lang['soundlink'] = "Se non riesci a leggere le lettere nell'immagine, scarica questo file .wav ed eseguilo, leggera' le lettere per te.";
|
||||
|
18
sources/lib/plugins/captcha/lang/it/settings.php
Normal file
18
sources/lib/plugins/captcha/lang/it/settings.php
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
/**
|
||||
* Italian language file
|
||||
*
|
||||
* @author by Willy
|
||||
*/
|
||||
|
||||
$lang['mode'] = "Che tipo di CAPTCHA vuoi usare?";
|
||||
$lang['mode_o_js'] = "Testo (precompilato con JavaScript)";
|
||||
$lang['mode_o_text'] = "Testo (Solo Manuale)";
|
||||
$lang['mode_o_image'] = "Immagine (Non molto Accessibile)";
|
||||
$lang['mode_o_audio'] = "Immagine + Audio (Migliore Accessibilità)";
|
||||
|
||||
$lang['regprotect'] = "Vuoi proteggere anche il modulo di iscrizione?";
|
||||
$lang['forusers'] = "Vuoi usare CAPTCHA anche per gli utenti loggati?";
|
||||
$lang['width'] = "Larghezza dell'immagine di CAPTCHA (pixel)";
|
||||
$lang['height'] = "Altezza dell'immagine di CAPTCHA (pixel)";
|
||||
|
13
sources/lib/plugins/captcha/lang/ja/lang.php
Normal file
13
sources/lib/plugins/captcha/lang/ja/lang.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author OHTSU Yoshifumi <dev@decomo.info>
|
||||
* @author Hideaki SAWADA <chuno@live.jp>
|
||||
*/
|
||||
$lang['testfailed'] = '申し訳ありませんが、CAPTCHAに対して適切に応答していません。おそらくですが人ではありませんね?';
|
||||
$lang['fillcaptcha'] = '人間の証明として、ボックス内の全ての文字を入力してください。';
|
||||
$lang['fillmath'] = '人間の証明として、以下の数式の答えを入力して下さい。';
|
||||
$lang['soundlink'] = '画像の文字が読めなければ、文字を読んだ.wavファイルをダウンロードして下さい。';
|
||||
$lang['honeypot'] = 'この項目は空のままにして下さい:';
|
23
sources/lib/plugins/captcha/lang/ja/settings.php
Normal file
23
sources/lib/plugins/captcha/lang/ja/settings.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author OHTSU Yoshifumi <dev@decomo.info>
|
||||
* @author Hideaki SAWADA <chuno@live.jp>
|
||||
*/
|
||||
$lang['mode'] = '認証の方式';
|
||||
$lang['mode_o_js'] = '文字 (JavaScriptによる自動入力)';
|
||||
$lang['mode_o_text'] = '文字 (手動入力)';
|
||||
$lang['mode_o_math'] = '計算式';
|
||||
$lang['mode_o_question'] = '固定質問';
|
||||
$lang['mode_o_image'] = '画像 (低アクセシビリティ)';
|
||||
$lang['mode_o_audio'] = '画像+音声 (中アクセシビリティ)';
|
||||
$lang['mode_o_figlet'] = 'Figlet [アルファベットAA] (低アクセシビリティ)';
|
||||
$lang['regprotect'] = 'ユーザー登録時にCAPTCHA認証を行う';
|
||||
$lang['forusers'] = 'ログインユーザーに対してもCAPTCHA認証を行う';
|
||||
$lang['lettercount'] = '使用する文字数(3~16)。文字数を増やす場合は下の画像の幅も同様に増やして下さい。';
|
||||
$lang['width'] = 'CAPTCHA画像の幅 (ピクセル)';
|
||||
$lang['height'] = 'CAPTCHA画像の高さ(ピクセル)';
|
||||
$lang['question'] = '固定質問方式の質問';
|
||||
$lang['answer'] = '固定質問方式の回答';
|
13
sources/lib/plugins/captcha/lang/ko/lang.php
Normal file
13
sources/lib/plugins/captcha/lang/ko/lang.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
* @author Myeongjin <aranet100@gmail.com>
|
||||
*/
|
||||
$lang['testfailed'] = '죄송하지만 CAPTCHA(캡차)가 올바르지 않습니다. 아마도 전혀 인간이 아니죠?';
|
||||
$lang['fillcaptcha'] = '인간임을 증명하기 위해 상자에 있는 모든 글자를 채워주세요.';
|
||||
$lang['fillmath'] = '인간임을 증명하기 위해 다음 방정식을 푸세요.';
|
||||
$lang['soundlink'] = '그림에 있는 글자를 읽을 수 없다면, 당신에게 들려줄 이 .wav 파일을 다운로드하세요.';
|
||||
$lang['honeypot'] = '이 필드는 비어 있도록 유지하세요:';
|
23
sources/lib/plugins/captcha/lang/ko/settings.php
Normal file
23
sources/lib/plugins/captcha/lang/ko/settings.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
* @author Myeongjin <aranet100@gmail.com>
|
||||
*/
|
||||
$lang['mode'] = '어떤 CAPTCHA(캡차) 종류를 사용하겠습니까?';
|
||||
$lang['mode_o_js'] = '글자 (자바스크립트로 미리 채워짐)';
|
||||
$lang['mode_o_text'] = '글자 (수동만)';
|
||||
$lang['mode_o_math'] = '수학 문제';
|
||||
$lang['mode_o_question'] = '고정된 질문';
|
||||
$lang['mode_o_image'] = '그림 (접근성이 낮음)';
|
||||
$lang['mode_o_audio'] = '그림+소리 (접근성이 더 나음)';
|
||||
$lang['mode_o_figlet'] = 'Figlet ASCII 아트 (접근성이 낮음)';
|
||||
$lang['regprotect'] = '등록 양식에도 보호하겠습니까?';
|
||||
$lang['forusers'] = '로그인한 사용자도 CAPTCHA(캡차)를 사용하겠습니까?';
|
||||
$lang['lettercount'] = '사용할 글자 수. (3-16) 양을 증가하면, 아래 그림의 너비도 증가해야 합니다.';
|
||||
$lang['width'] = 'CAPTCHA(캡차) 그림의 너비 (픽셀)';
|
||||
$lang['height'] = 'CAPTCHA(캡차) 그림의 높이 (픽셀)';
|
||||
$lang['question'] = '고정된 질문 모드에 대한 질문';
|
||||
$lang['answer'] = '고정된 질문 모드에 대한 답변';
|
14
sources/lib/plugins/captcha/lang/nl/lang.php
Normal file
14
sources/lib/plugins/captcha/lang/nl/lang.php
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Ruben Schouten <mail@ruben.cc>
|
||||
* @author Mark C. Prins <mprins@users.sf.net>
|
||||
* @author Mark Prins <mprins@users.sf.net>
|
||||
*/
|
||||
$lang['testfailed'] = 'Sorry, maar de CAPTCHA is onjuist beantwoord. Misschien ben je toch geen mens?';
|
||||
$lang['fillcaptcha'] = 'Tik de letters in het onderstaande vakje over om aan te tonen dat je een mens bent.';
|
||||
$lang['fillmath'] = 'Geef antwoord op de rekensom om aan te tonen dat je een mens bent.';
|
||||
$lang['soundlink'] = 'Als je de letters in de afbeelding niet kunt lezen kun je dit .wav bestand downloaden om ze te laten voorlezen.';
|
||||
$lang['honeypot'] = 'Dit veld leeg laten';
|
24
sources/lib/plugins/captcha/lang/nl/settings.php
Normal file
24
sources/lib/plugins/captcha/lang/nl/settings.php
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Ruben Schouten <mail@ruben.cc>
|
||||
* @author Mark C. Prins <mprins@users.sf.net>
|
||||
* @author Mark Prins <mprins@users.sf.net>
|
||||
*/
|
||||
$lang['mode'] = 'Welk type CAPTCHA wil je gebruiken?';
|
||||
$lang['mode_o_js'] = 'Tekst (automatisch ingevuld via JavaScript)';
|
||||
$lang['mode_o_text'] = 'Tekst (handmatig overtikken)';
|
||||
$lang['mode_o_math'] = 'Wiskunde opgave (eenvoudige rekensom)';
|
||||
$lang['mode_o_question'] = 'Vaste vraag';
|
||||
$lang['mode_o_image'] = 'Afbeelding (slechte toegankelijkhied)';
|
||||
$lang['mode_o_audio'] = 'Afbeelding+Audio (betere toegankelijkheid)';
|
||||
$lang['mode_o_figlet'] = 'Figlet ASCII Art (slechte toegankelijkheid)';
|
||||
$lang['regprotect'] = 'Het aanmeldformulier ook beschermen?';
|
||||
$lang['forusers'] = 'Ook CAPTCHA voor ingelogde gebruikers gebruiken?';
|
||||
$lang['lettercount'] = 'Aantal te gebruiken letters (3-16). Let er op ook de breedte van de afbeelding hieronder te vergroten als het aantal wordt verhoogd';
|
||||
$lang['width'] = 'Breedte van de CAPTCHA afbeelding (pixels)';
|
||||
$lang['height'] = 'Hoogte van de CAPTCHA afbeelding (pixels)';
|
||||
$lang['question'] = 'Vraag voor de vaste vraag modus';
|
||||
$lang['answer'] = 'Antwoord voor de vaste vraag modus';
|
12
sources/lib/plugins/captcha/lang/pl/lang.php
Normal file
12
sources/lib/plugins/captcha/lang/pl/lang.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Paweł Jan Czochański <czochanski@gmail.com>
|
||||
*/
|
||||
$lang['testfailed'] = 'Wybacz, ale CAPTCHA nie została uzupełniona poprawnie. Może wcale nie jesteś człowiekiem?';
|
||||
$lang['fillcaptcha'] = 'Proszę wprowadzić wszystkie znaki w pole, by udowodnić, że jesteś człowiekiem.';
|
||||
$lang['fillmath'] = 'Proszę rozwiązać poniższe równanie, by udowodnić, że jesteś człowiekiem.';
|
||||
$lang['soundlink'] = 'Jeżeli nie jesteś w stanie przeczytać znaków widocznych na obrazie pobierz plik .wav, w którym zawarta jest ich głosowa reprezentacja.';
|
||||
$lang['honeypot'] = 'Proszę pozostawić to pole puste.';
|
22
sources/lib/plugins/captcha/lang/pl/settings.php
Normal file
22
sources/lib/plugins/captcha/lang/pl/settings.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Paweł Jan Czochański <czochanski@gmail.com>
|
||||
* @author Mati <mackosa@wp.pl>
|
||||
*/
|
||||
$lang['mode'] = 'Jaki typ CAPTCHA zastosować?';
|
||||
$lang['mode_o_text'] = 'Tekst (tylko ręcznie)';
|
||||
$lang['mode_o_math'] = 'Problem matematyczny';
|
||||
$lang['mode_o_question'] = 'Stałe pytanie';
|
||||
$lang['mode_o_image'] = 'Obraz (słaba dostępność)';
|
||||
$lang['mode_o_audio'] = 'Obraz+Dźwięk (lepsza dostępność)';
|
||||
$lang['mode_o_figlet'] = 'Sztuka figletowych ASCII (słaba dostępność)';
|
||||
$lang['regprotect'] = 'Ochraniać również proces rejestracji?';
|
||||
$lang['forusers'] = 'Stosować CAPTCHA również dla zalogowanych użytkowników?';
|
||||
$lang['lettercount'] = 'Wykorzystywane liczby i litery (3-16). Pamiętaj by wraz ze wzrostem ich ilości zwiększać również szerokość obrazu poniżej.';
|
||||
$lang['width'] = 'Szerokość obrazu CAPTCHA (w pikselach)';
|
||||
$lang['height'] = 'Wysokość obrazu CAPTCHA (w pikselach)';
|
||||
$lang['question'] = 'Pytanie stosowane w trybie stałego pytania';
|
||||
$lang['answer'] = 'Odpowiedź na stałe pytanie';
|
12
sources/lib/plugins/captcha/lang/pt-br/lang.php
Normal file
12
sources/lib/plugins/captcha/lang/pt-br/lang.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Juliano Marconi Lanigra <juliano.marconi@gmail.com>
|
||||
*/
|
||||
$lang['testfailed'] = 'Desculpe, mas o CAPTCHA não foi preenchido corretamente. Talvez você não seja humano?';
|
||||
$lang['fillcaptcha'] = 'Por favor preencha todas as letras dentro da caixa para provar que você é humano.';
|
||||
$lang['fillmath'] = 'Por favor resolva a seguinte equação para provar que você é humano.';
|
||||
$lang['soundlink'] = 'Se você não pode ler as letras na imagem, faça o download desse .wav para que elas sejam lidas para você.';
|
||||
$lang['honeypot'] = 'Por favor deixe esse campo em branco:';
|
22
sources/lib/plugins/captcha/lang/pt-br/settings.php
Normal file
22
sources/lib/plugins/captcha/lang/pt-br/settings.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Juliano Marconi Lanigra <juliano.marconi@gmail.com>
|
||||
*/
|
||||
$lang['mode'] = 'Qual tipo de CAPTCHA usar?';
|
||||
$lang['mode_o_js'] = 'Texto (pré-preenchido com JavaScript)';
|
||||
$lang['mode_o_text'] = 'Texto (somente manual)';
|
||||
$lang['mode_o_math'] = 'Problema de Matemática';
|
||||
$lang['mode_o_question'] = 'Questão Resolvida';
|
||||
$lang['mode_o_image'] = 'Imagem (acessibilidade ruim)';
|
||||
$lang['mode_o_audio'] = 'Imagem+Áudio (acessibilidade melhor)';
|
||||
$lang['mode_o_figlet'] = 'Figlet ASCII Art (acessibilidade ruim)';
|
||||
$lang['regprotect'] = 'Também proteger o formulário de registro?';
|
||||
$lang['forusers'] = 'Também usar CAPTCHA para usuários logados?';
|
||||
$lang['lettercount'] = 'Número de letras para usar (3-16). Se você aumentar a quantidade, lembre de também aumentar a largura da imagem abaixo.';
|
||||
$lang['width'] = 'Largura da imagem do CAPTCHA (pixel)';
|
||||
$lang['height'] = 'Altura da imagem do CAPTCHA (pixel)';
|
||||
$lang['question'] = 'Pergunta para o modo de pergunta fixa';
|
||||
$lang['answer'] = 'Resposta para o modo de pergunta fixa';
|
12
sources/lib/plugins/captcha/lang/pt/lang.php
Normal file
12
sources/lib/plugins/captcha/lang/pt/lang.php
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author André Neves <drakferion@gmail.com>
|
||||
*/
|
||||
$lang['testfailed'] = 'Infelizmente o CAPTCHA não foi respondido corretamente. Talvez você afinal não seja humano?';
|
||||
$lang['fillcaptcha'] = 'Por favor preencha todas as letras na caixa para provar que é humano.';
|
||||
$lang['fillmath'] = 'Por favor resolva a seguinte equação para provar que é humano.';
|
||||
$lang['soundlink'] = 'Se não pode ler as letras na imagem, descarregue este ficheiro .wav para as ouvir.';
|
||||
$lang['honeypot'] = 'Por favor mantenha este campo vazio:';
|
22
sources/lib/plugins/captcha/lang/pt/settings.php
Normal file
22
sources/lib/plugins/captcha/lang/pt/settings.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author André Neves <drakferion@gmail.com>
|
||||
*/
|
||||
$lang['mode'] = 'Que tipo de CAPTCHA usar?';
|
||||
$lang['mode_o_js'] = 'Texto (pré-preenchido com JavaScript)';
|
||||
$lang['mode_o_text'] = 'Texto (somente manual)';
|
||||
$lang['mode_o_math'] = 'Problema Matemático';
|
||||
$lang['mode_o_question'] = 'Pergunta Fixa';
|
||||
$lang['mode_o_image'] = 'Imagem (má acessibilidade)';
|
||||
$lang['mode_o_audio'] = 'Imagem+Áudio (melhor acessibilidade)';
|
||||
$lang['mode_o_figlet'] = 'Arte em ASCII Figlet (má acessibilidade)';
|
||||
$lang['regprotect'] = 'Também proteger o formulário de registo?';
|
||||
$lang['forusers'] = 'Também usar CAPTCHA para utilizadores autenticados?';
|
||||
$lang['lettercount'] = 'Número de letras a usar (3-16). Se aumentar a quantidade, assegure-se de aumentar também a largura da imagem, abaixo.';
|
||||
$lang['width'] = 'Largura da imagem CAPTCHA (pixel)';
|
||||
$lang['height'] = 'Altura da imagem CAPTCHA (pixel)';
|
||||
$lang['question'] = 'Pergunta para o modo de pergunta fixa';
|
||||
$lang['answer'] = 'Resposta para o modo de pergunta fixa';
|
13
sources/lib/plugins/captcha/lang/ru/lang.php
Normal file
13
sources/lib/plugins/captcha/lang/ru/lang.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Aleksandr Selivanov <alexgearbox@gmail.com>
|
||||
* @author Ilya Rozhkov <impeck@ya.ru>
|
||||
*/
|
||||
$lang['testfailed'] = 'Извините, код подтверждения введён неверно.';
|
||||
$lang['fillcaptcha'] = 'Пожалуйста, введите код подтверждения, чтобы доказать, что вы не робот:';
|
||||
$lang['fillmath'] = 'Ответьте пожалуйста на вопрос, чтобы доказать, что вы человек.';
|
||||
$lang['soundlink'] = 'Если вы не можете прочитать символы на изображении, загрузите и воспроизведите wav-файл.';
|
||||
$lang['honeypot'] = 'Пожалуйста, оставьте это поле пустым:';
|
23
sources/lib/plugins/captcha/lang/ru/settings.php
Normal file
23
sources/lib/plugins/captcha/lang/ru/settings.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Aleksandr Selivanov <alexgearbox@gmail.com>
|
||||
* @author Ilya Rozhkov <impeck@ya.ru>
|
||||
*/
|
||||
$lang['mode'] = 'Какой тип CAPTCHA использовать?';
|
||||
$lang['mode_o_js'] = 'Текст (заполнение JavaScript)';
|
||||
$lang['mode_o_text'] = 'Текст (ручной ввод)';
|
||||
$lang['mode_o_math'] = 'Математическая задача';
|
||||
$lang['mode_o_question'] = 'Конкретный вопрос';
|
||||
$lang['mode_o_image'] = 'Изображение (хорошая защита)';
|
||||
$lang['mode_o_audio'] = 'Изображение и звук (плохая защита)';
|
||||
$lang['mode_o_figlet'] = 'Figlet ASCII Art (хорошая защита)';
|
||||
$lang['regprotect'] = 'Защитить регистрационную форму?';
|
||||
$lang['forusers'] = 'Использоваться CAPTCHA для зарегистрированных пользователей?';
|
||||
$lang['lettercount'] = 'Количество букв (3-16). Если вы увеличиваете количество букв, не забудьте увеличить ширину изображения ниже.';
|
||||
$lang['width'] = 'Ширина изображения CAPTCHA (пиксель)';
|
||||
$lang['height'] = 'Высота изображения CAPTCHA (пиксель)';
|
||||
$lang['question'] = 'Вопрос для режима конкретного вопроса';
|
||||
$lang['answer'] = 'Ответ для режима конкретного вопроса ';
|
13
sources/lib/plugins/captcha/lang/sk/lang.php
Normal file
13
sources/lib/plugins/captcha/lang/sk/lang.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Jozef Riha <jose1711@gmail.com>
|
||||
* @author Martin Michalek <michalek.dev@gmail.com>
|
||||
*/
|
||||
$lang['testfailed'] = 'Ľutujem, ale na CAPTCHA nebolo odpovedané správne. Je možné, že by ste vôbec neboli človekom?';
|
||||
$lang['fillcaptcha'] = 'Vyplňte prosím všetky písmená v poli, aby ste dokázali, že nie ste skript.';
|
||||
$lang['fillmath'] = 'Prosím vyriešte nasledujúcu rovnicu, aby sme vás odlíšili od automatických web nástrojov.';
|
||||
$lang['soundlink'] = 'Ak nedokážete prečítať písmená na obrázku, stiahnite si tento .wav súbor a text vám prečítame.';
|
||||
$lang['honeypot'] = 'Prosím nechajte toto pole prázdne:';
|
23
sources/lib/plugins/captcha/lang/sk/settings.php
Normal file
23
sources/lib/plugins/captcha/lang/sk/settings.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Jozef Riha <jose1711@gmail.com>
|
||||
* @author Martin Michalek <michalek.dev@gmail.com>
|
||||
*/
|
||||
$lang['mode'] = 'Ktorý typ CAPTCHA sa má použiť?';
|
||||
$lang['mode_o_js'] = 'Text (predvyplnený JavaScriptom)';
|
||||
$lang['mode_o_text'] = 'Text (iba manuálne vložený)';
|
||||
$lang['mode_o_math'] = 'Matematický problém';
|
||||
$lang['mode_o_question'] = 'Pevne zadaná otázka';
|
||||
$lang['mode_o_image'] = 'Obrázok (pre ľudí s postihom)';
|
||||
$lang['mode_o_audio'] = 'Obrázok a zvuk (pre ľudí s menším postihom)';
|
||||
$lang['mode_o_figlet'] = 'ASCII obrázok (pre ľudí s postihom)';
|
||||
$lang['regprotect'] = 'Chrániť tiež registračný formulár?';
|
||||
$lang['forusers'] = 'Používať CAPTCHA aj pre registrovaných užívateľov?';
|
||||
$lang['lettercount'] = 'Počet písmen (3-16). Ak zvýšite počet, zväčšite tiež šírku obrázka uvedeného nižšie.';
|
||||
$lang['width'] = 'Šírka CAPTCHA obrázku (v bodoch)';
|
||||
$lang['height'] = 'Výška CAPTCHA obrázku (v bodoch)';
|
||||
$lang['question'] = 'Otázka pre typ pevne zadanej otázky';
|
||||
$lang['answer'] = 'Odpoveď pre typ pevne zadanej otázky';
|
10
sources/lib/plugins/captcha/lang/tr/settings.php
Normal file
10
sources/lib/plugins/captcha/lang/tr/settings.php
Normal file
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Ehliman <ehlimansen@gmail.com>
|
||||
*/
|
||||
$lang['mode_o_math'] = 'Matematik Problemi';
|
||||
$lang['mode_o_question'] = 'Sabit Soru';
|
||||
$lang['mode_o_image'] = 'Resim (Kötü erişebilirlik)';
|
10
sources/lib/plugins/captcha/lang/zh-tw/lang.php
Normal file
10
sources/lib/plugins/captcha/lang/zh-tw/lang.php
Normal file
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
/**
|
||||
* Traditional Chinese language file
|
||||
*
|
||||
* @author Danny Lin <danny0838@pchome.com.tw>
|
||||
*/
|
||||
|
||||
$lang['testfailed'] = "很抱歉,您沒有輸入正確的 CAPTCHA 驗證碼。";
|
||||
$lang['fillcaptcha'] = "請將字母填入方框。";
|
||||
$lang['soundlink'] = "如果您無法閱讀圖片中的字母,請下載收聽這個 WAV 檔。";
|
19
sources/lib/plugins/captcha/lang/zh-tw/settings.php
Normal file
19
sources/lib/plugins/captcha/lang/zh-tw/settings.php
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
/**
|
||||
* Traditional Chinese language file
|
||||
*
|
||||
* @author Danny Lin <danny0838@pchome.com.tw>
|
||||
*/
|
||||
|
||||
$lang['mode'] = "使用哪種 CAPTCHA 類型?";
|
||||
$lang['mode_o_js'] = "文字 (預先用 Javascript 填入)";
|
||||
$lang['mode_o_text'] = "文字 (手動填入)";
|
||||
$lang['mode_o_image'] = "圖片 (易用性差)";
|
||||
$lang['mode_o_audio'] = "圖片+聲音 (易用性較佳)";
|
||||
$lang['mode_o_figlet'] = "Figlet ASCII 藝術字 (易用性差)";
|
||||
|
||||
$lang['regprotect'] = "保護註冊表單嗎?";
|
||||
$lang['forusers'] = "已登入使用者也要 CAPTCHA 驗證嗎?";
|
||||
$lang['width'] = "CAPTCHA 圖片寬度 (像素)";
|
||||
$lang['height'] = "CAPTCHA 圖片高度 (像素)";
|
||||
|
13
sources/lib/plugins/captcha/lang/zh/lang.php
Normal file
13
sources/lib/plugins/captcha/lang/zh/lang.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
* @author lainme <lainme993@gmail.com>
|
||||
*/
|
||||
$lang['testfailed'] = '抱歉,您输入的验证码不正确。';
|
||||
$lang['fillcaptcha'] = '请在输入框中填入验证码以证明您不是机器人。';
|
||||
$lang['fillmath'] = '请填入算式的结果以证明您不是机器人。';
|
||||
$lang['soundlink'] = '如果您无法阅读图片中的字母,请下载此 .wav 文件。';
|
||||
$lang['honeypot'] = '请将此区域留空:';
|
23
sources/lib/plugins/captcha/lang/zh/settings.php
Normal file
23
sources/lib/plugins/captcha/lang/zh/settings.php
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
* @author lainme <lainme993@gmail.com>
|
||||
*/
|
||||
$lang['mode'] = '使用什么类型的验证码?';
|
||||
$lang['mode_o_js'] = '文本 (预先由 JavaScript 填写)';
|
||||
$lang['mode_o_text'] = '文本 (手动输入)';
|
||||
$lang['mode_o_math'] = '算术题';
|
||||
$lang['mode_o_question'] = '固定问题';
|
||||
$lang['mode_o_image'] = '图片 (无障碍性差)';
|
||||
$lang['mode_o_audio'] = '图片+音频 (更好的无障碍性)';
|
||||
$lang['mode_o_figlet'] = 'Figlet ASCII 艺术 (无障碍性差)';
|
||||
$lang['regprotect'] = '同时保护注册表单吗?';
|
||||
$lang['forusers'] = '对已登入的用户也适用吗?';
|
||||
$lang['lettercount'] = '使用字母的数目 (3-16)。如果您增加数目,请确保同时增加图片的宽度。';
|
||||
$lang['width'] = '验证码图片宽度 (像素)';
|
||||
$lang['height'] = '验证码图片高度 (像素)';
|
||||
$lang['question'] = '固定问题模式的问题';
|
||||
$lang['answer'] = '固定问题模式的答案';
|
8
sources/lib/plugins/captcha/plugin.info.txt
Normal file
8
sources/lib/plugins/captcha/plugin.info.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
base captcha
|
||||
author Andreas Gohr
|
||||
email andi@splitbrain.org
|
||||
date 2014-01-05
|
||||
name CAPTCHA Plugin
|
||||
desc Use a CAPTCHA challenge to protect DokuWiki against automated spam
|
||||
url http://www.dokuwiki.org/plugin:captcha
|
||||
|
12
sources/lib/plugins/captcha/script.js
Normal file
12
sources/lib/plugins/captcha/script.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
* Autofill and hide the whole captcha stuff in the simple JS mode
|
||||
*/
|
||||
jQuery(function () {
|
||||
var $code = jQuery('#plugin__captcha_code');
|
||||
if (!$code.length) return;
|
||||
|
||||
var $box = jQuery('#plugin__captcha_wrapper input[type=text]');
|
||||
$box.first().val($code.text().replace(/([^A-Z])+/g, ''));
|
||||
|
||||
jQuery('#plugin__captcha_wrapper').hide();
|
||||
});
|
BIN
sources/lib/plugins/captcha/sound.png
Normal file
BIN
sources/lib/plugins/captcha/sound.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 610 B |
23
sources/lib/plugins/captcha/style.css
Normal file
23
sources/lib/plugins/captcha/style.css
Normal file
|
@ -0,0 +1,23 @@
|
|||
.dokuwiki #plugin__captcha_wrapper img {
|
||||
margin: 1px;
|
||||
vertical-align: bottom;
|
||||
border: 1px solid __border__;
|
||||
}
|
||||
|
||||
.dokuwiki #plugin__captcha_wrapper pre {
|
||||
font-size: 70%;
|
||||
font-family: monospace;
|
||||
font-weight: bold;
|
||||
border: none;
|
||||
background-color: __background__;
|
||||
color: __text__;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.dokuwiki #plugin__captcha_wrapper .no {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dokuwiki #plugin__captcha_wrapper {
|
||||
clear: left;
|
||||
}
|
86
sources/lib/plugins/captcha/wav.php
Normal file
86
sources/lib/plugins/captcha/wav.php
Normal file
|
@ -0,0 +1,86 @@
|
|||
<?php
|
||||
/**
|
||||
* CAPTCHA antispam plugin - sound generator
|
||||
*
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
* @author Andreas Gohr <gohr@cosmocode.de>
|
||||
*/
|
||||
|
||||
if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__).'/../../../');
|
||||
define('NOSESSION', true);
|
||||
define('DOKU_DISABLE_GZIP_OUTPUT', 1);
|
||||
require_once(DOKU_INC.'inc/init.php');
|
||||
require_once(DOKU_INC.'inc/auth.php');
|
||||
|
||||
$ID = $_REQUEST['id'];
|
||||
/** @var $plugin helper_plugin_captcha */
|
||||
$plugin = plugin_load('helper', 'captcha');
|
||||
|
||||
if($plugin->getConf('mode') != 'audio') {
|
||||
http_status(404);
|
||||
exit;
|
||||
}
|
||||
|
||||
$rand = $plugin->decrypt($_REQUEST['secret']);
|
||||
$code = strtolower($plugin->_generateCAPTCHA($plugin->_fixedIdent(), $rand));
|
||||
|
||||
// prepare an array of wavfiles
|
||||
$lc = dirname(__FILE__).'/lang/'.$conf['lang'].'/audio/';
|
||||
$en = dirname(__FILE__).'/lang/en/audio/';
|
||||
$wavs = array();
|
||||
for($i = 0; $i < $plugin->getConf('lettercount'); $i++) {
|
||||
$file = $lc.$code{$i}.'.wav';
|
||||
if(!@file_exists($file)) $file = $en.$code{$i}.'.wav';
|
||||
$wavs[] = $file;
|
||||
}
|
||||
|
||||
header('Content-type: audio/x-wav');
|
||||
header('Content-Disposition: attachment;filename=captcha.wav');
|
||||
|
||||
echo joinwavs($wavs);
|
||||
|
||||
/**
|
||||
* Join multiple wav files
|
||||
*
|
||||
* All wave files need to have the same format and need to be uncompressed.
|
||||
* The headers of the last file will be used (with recalculated datasize
|
||||
* of course)
|
||||
*
|
||||
* @link http://ccrma.stanford.edu/CCRMA/Courses/422/projects/WaveFormat/
|
||||
* @link http://www.thescripts.com/forum/thread3770.html
|
||||
*/
|
||||
function joinwavs($wavs) {
|
||||
$fields = join(
|
||||
'/', array(
|
||||
'H8ChunkID', 'VChunkSize', 'H8Format',
|
||||
'H8Subchunk1ID', 'VSubchunk1Size',
|
||||
'vAudioFormat', 'vNumChannels', 'VSampleRate',
|
||||
'VByteRate', 'vBlockAlign', 'vBitsPerSample'
|
||||
)
|
||||
);
|
||||
|
||||
$data = '';
|
||||
foreach($wavs as $wav) {
|
||||
$fp = fopen($wav, 'rb');
|
||||
$header = fread($fp, 36);
|
||||
$info = unpack($fields, $header);
|
||||
|
||||
// read optional extra stuff
|
||||
if($info['Subchunk1Size'] > 16) {
|
||||
$header .= fread($fp, ($info['Subchunk1Size'] - 16));
|
||||
}
|
||||
|
||||
// read SubChunk2ID
|
||||
$header .= fread($fp, 4);
|
||||
|
||||
// read Subchunk2Size
|
||||
$size = unpack('vsize', fread($fp, 4));
|
||||
$size = $size['size'];
|
||||
|
||||
// read data
|
||||
$data .= fread($fp, $size);
|
||||
}
|
||||
|
||||
return $header.pack('V', strlen($data)).$data;
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue