Project

General

Profile

Actions

Captcha

captchaNeeded() verfügbar ab Ilch 2.1.8.

Der Administrator kann im Admincenter angeben welche Benutzer-Gruppen kein Captcha lösen müssen. Ein Modul sollte diese Einstellungen respektieren, wenn ein Captcha genutzt wird.
Damit ein Modul einfach abfragen kann ob ein Captcha angezeigt werden soll oder nicht wurde die Funktion captchaNeeded() geschaffen.
Die Funktion captchaNeeded() gibt einen Rückgabewert vom Typ Boolean (true, false) zurück. "true" wird zurückgegeben, wenn das Lösen eines Captcha notwendig ist, andernfalls "false".

Im Controller des Moduls wird die Validator-Klasse genutzt. Hier muss man natürlich je nach Rückgabewert von captchaNeeded() die Regeln für den Validator anpassen.
Der Rückgabewert dieser Funktion wird an die View übergeben, damit dort das Captcha aus- bzw. eingeblendet werden kann.

$captchaNeeded = captchaNeeded();
[...]
$validationRules = [
    'name' => 'required',
    'link' => 'required|url',
    'banner' => 'required|url'
];
if ($captchaNeeded) {
    $validationRules['captcha'] = 'captcha';
}
$validation = Validation::create($post, $validationRules);
[...]
$this->getView()->set('captchaNeeded', $captchaNeeded);

Hier wird der Rückgabewert von captchaNeeded() genutzt um zu entscheiden ob ein Captcha in die View eingebunden wird oder nicht.

<?php if ($this->get('captchaNeeded')) : ?>
<div class="form-group <?=$this->validation()->hasError('captcha') ? 'has-error' : '' ?>">
    <label class="col-lg-2 control-label">
        <?=$this->getTrans('captcha') ?>
    </label>
    <div class="col-lg-8">
        <?=$this->getCaptchaField() ?>
    </div>
</div>
<div class="form-group <?=$this->validation()->hasError('captcha') ? 'has-error' : '' ?>">
    <div class="col-lg-offset-2 col-lg-8 input-group captcha">
        <input type="text" 
               class="form-control" 
               id="captcha-form" 
               name="captcha" 
               autocomplete="off" 
               placeholder="<?=$this->getTrans('captcha') ?>" />
        <span class="input-group-addon">
            <a href="javascript:void(0)" onclick=" 
                document.getElementById('captcha').src='<?=$this->getUrl() ?>/application/libraries/Captcha/Captcha.php?'+Math.random();
                document.getElementById('captcha-form').focus();" 
                id="change-image">
                <i class="fa fa-refresh"></i>
            </a>
        </span>
    </div>
</div>
<?php endif; ?>

Updated by -, blackcoder over 1 year ago · 1 revisions