Před časem jsem napsala článek o úpravě funkce Captcha tak, aby tato funkce nechtěla jako odpověď číslo, ale slovo. S příchodem nové verze redakčního systému došlo k různým změnám uvnitř systému a tak tento systém přestal fungovat. Funkci bylo potřeba trošku upravit, ale nakonec se ukázalo, že to nebylo tak složité, jak to původně vypadalo. Ze stejného důvodu bylo potřeba změnit i dodělaný xoopscode pro zobrazení zkratek, čili [acr].
Nejprve se tedy podíváme na tu captchu. V adresáři XOOPSROOT/CLASS/CAPTCHA najdeme soubor text.php a v něm tuto část:
/**
* XoopsCaptchaText::loadText()
*
* @return string
*/
public function loadText()
{
return '<span style="font-style: normal; font-weight: bold; font-size: 100%; color: #333; border: 1px solid #333; padding: 1px 5px;">' . $this->outputText . '</span>';
}
protected function buildQuestion()
{
$val_a = mt_rand(0, 9);
$val_b = mt_rand(0, 9);
if ($val_a > $val_b) {
$expression = "{$val_a} - {$val_b} = ?";
$this->code = $val_a - $val_b;
} else {
$expression = "{$val_a} + {$val_b} = ?";
$this->code = $val_a + $val_b;
}
$this->outputText = $expression;
}
Kterou je potřeba změna takto:
/**
* XoopsCaptchaText::loadText()
*
* @return string
*/
public function loadText()
{
return '<span style="font-style: normal; font-weight: bold; font-size: 100%; color: #333; border: 1px solid #333; padding: 1px 5px;">' . $this->outputText . '</span>';
}
protected function buildQuestion()
{
$capt_result=array("nula", "jedna", "dva", "tři", "čtyři", "pět", "šest", "sedm", "osm", "devět", "deset", "jedenáct", "dvanáct", "třináct", "čtrnáct", "patnáct", "šestnáct", "sedmnáct", "osmnáct");
$val_a = mt_rand(0, 9);
$val_b = mt_rand(0, 9);
if ($val_a > $val_b) {
$expression = "{$val_a} - {$val_b} = ? (slovem)";
$this->code = $capt_result[($val_a - $val_b)];
} else {
$expression = "{$val_a} + {$val_b} = ? (slovem)";
$this->code = $capt_result[($val_a + $val_b)];
}
$this->outputText = $expression;
}
Zbytek zůstává stejný a všechno bude dále fungovat tak, jako doposavad.
Znovu zprovoznění xoops kódu [acr] se provede změnou v souboru acr.php v adresáři XOOPSROOT/CLASS/TEXTSANITIZER/ACR.
Změní se téměř celý, ale to jen proto, že je velmi krátký. Původní obsah:
defined('XOOPS_ROOT_PATH') or die('Restricted access');
class MytsAcr extends MyTextSanitizerExtension
{
function load(&$ts)
{
$ts->patterns[] = "/[acr](.*)[/acr]/sU";
$ts->replacements[] = '<acronym title="Zkratka bez zadaného významu">\1</acronym>';
$ts->patterns[] = "/[acr=(.*)](.*)[/acr]/sU";
$ts->replacements[] = '<acronym title="\1">\2</acronym>';
return true;
}
}
Změňte na:
defined('XOOPS_ROOT_PATH') || exit('Restricted access');
/**
* Class MytsACR
*/
class MytsAcr extends MyTextSanitizerExtension
{
/**
* @param $ts
*
* @return bool
*/
public function load($ts)
{
$ts->patterns[] = "/[acr](.*)[/acr]/sU";
$ts->replacements[] = '<acronym title="Zkratka bez zadaného významu">\1</acronym>';
$ts->patterns[] = "/[acr=(.*)](.*)[/acr]/sU";
$ts->replacements[] = '<acronym title="\1">\2</acronym>';
return true;
}
}
A všechno bude opět fungovat tak, jako ve verzi staré. Při nahrávání nové verze si člověk velmi často, a velmi snadno, přepíše původní konfigurační soubory. Pokud k tomu dojde, je potřeba si je upravit tak, jak je popisováno v původních článcích. Ať již ve článku o Zkratkách nebo o Captche.
No a to je pro dnešek všechno. Jsem zvědavá, jestli narazím ještě na nějaké další podobné změny, které mi momentálně unikají, ale myslím si, že by snad být neměly. A také jsem zvědavá, kdy se zase změní XOOPS tak, aby podobný článek musel opět vzniknout. Nechme se překvapit 
|