xoops forums

SMEDrieben

Not too shy to talk
Posted on: 2015/10/16 19:14
SMEDrieben
SMEDrieben (Show more)
Not too shy to talk
Posts: 151
Since: 2009/6/17
#1

Bug in custom code in class textsanitizer

I have made a custom code in class textsanitizer. It worked fine till recently. I don't know if it went wrong after moving tot 2.5.7.1 of to php 5.4 (tested on 5.4.12 and 5.4.45-0+deb7u1).

This is the error:
Fatal errorCannot make static method MyTextSanitizerExtension::decode() non static in class MytsBldwz in C:wampwwwhttpdocsclasstextsanitizerbldwzbldwz.php on line 64


This is my custom code (bldwz.php) that is a modification of the readme.txt that is found in class/textsanitizer

<?php
class MytsBldwz extends MyTextSanitizerExtension
{
// The encode function for dhtml editor
    
function encode($textarea_id)
    {
        
// If the extension has config data, load it
        
$config parent::loadConfig(dirname(__FILE__));
        
// Make sure that the icon is available /images/form/mycode.gif
        
$code "<img src='{$this->image_path}/bldwz.gif' alt='Bladwijzer' title='Bladwijzer' onclick='xoopsCodeBldwz("{$textarea_id}","" . htmlspecialchars("Voer de term met bladwijzer in", ENT_QUOTES) . "");'  onmouseover='style.cursor="hand"'/>&nbsp;";
        
$javascript = <<<EOH
            function xoopsCodeBldwz(id, enterBldwzPhrase){
                if (enterBldwzPhrase == null) {
                    enterBldwzPhrase = "Enter the content for the code.";
                }
                var selection = xoopsGetSelect(id);
                if (selection.length > 0) {
                    var text = selection;
                }else {
                    var text = prompt(enterBldwzPhrase, "");
                }
                var domobj = xoopsGetElementById(id);
                if ( text != null && text != "" ) {
                    var result = "[bldwz]" + text + "[/bldwz]";
                    xoopsInsertText(domobj, result);
                }
                domobj.focus();
            }
EOH;
        
// Return the scripts to be displayed in editor form and the javascript for relevant actions
        
return array($code$javascript);
    }
    
    
// The code parser
    
function load(&$ts
    {
        
$ts->patterns[] = "/[bldwz](.*)[/bldwz]/sU";
        
$ts->replacements[] = '<a href="' XOOPS_URL '/search.php?query=\1&action=results" target="_top">\1</a>';
        
$ts->patterns[] = "/[bldwz def](.*)[/bldwz]/sU";
        
$ts->replacements[] = '<a href="' XOOPS_URL '/search.php?query=\1+Begrip:&andor=AND&mids%5B%5D=28&action=results" target="_top">\1</a>';
        
$ts->patterns[] = "/[bldwz stp](.*)[/bldwz]/sU";
        
$ts->replacements[] = '<a href="' XOOPS_URL '/search.php?query=\1&mids%5B%5D=28&action=results" target="_top">\1</a>';
        
$ts->patterns[] = "/[bldwz ([0-9]*)](.*)[/bldwz]/sU";
        
$ts->replacements[] = '<a href="' XOOPS_URL '/modules/smartfaq/faq.php?faqid=\1" target="_top">\2</a>';
        
$ts->patterns[] = "/[bldwz KKK=([0-9]*)](.*)[/bldwz]/sU";
        
$ts->replacements[] = '<a href="http://www.katholieknederland.nl/katholicisme/katechismus-van-de-katholieke-kerk/blok_FBlokNo\1.html" target="_blank">\2</a>';
        
$ts->patterns[] = "/[news ([0-9]*)](.*)[/news]/sU";
        
$ts->replacements[] = '<a href="' XOOPS_URL '/modules/news/article.php?storyid=\1" target="_top">\2</a>';
        
$ts->patterns[] = "/[smeb ([0-9]*)](.*)[/smeb]/sU";
        
$ts->replacements[] = '<a href="' XOOPS_URL '/modules/publisher/category.php?categoryid=\1" target="_top">\2</a>';
        
$ts->patterns[] = "/[smehf ([0-9]*)](.*)[/smehf]/sU";
        
$ts->replacements[] = '<a href="' XOOPS_URL '/modules/publisher/item.php?itemid=\1" target="_top">\2</a>';
    }
    
    
// Processing the text
    
function decode($text)
    {
        
// Load config data if any
        
$config parent::loadConfigdirname(__FILE__) );
        if ( empty(
$text) || empty($config['enabled']) ) return $text;
        
$ret someFunctionToConvertTheTextToDefinedFormat($text);
        return 
$ret;
    }
}
?>


Line 64 is almost the latest with only "}".

Any idea what is wrong ?

Thanks !

SMEDrieben

Mamba

Moderator
Posted on: 2015/10/17 9:58
Mamba
Mamba (Show more)
Moderator
Posts: 10465
Since: 2004/4/23
#2

Re: Bug in custom code in class textsanitizer

If the function is declared "static" in the parent as in:

static function decode()

you cannot then re-declare it as non-static:

function decode($text)

You need to declare "static" as it was done in the parent, i.e.
static function decode($text)
Support XOOPS => DONATE
Use 2.5.9 | Docs | Modules | Bugs

SMEDrieben

Not too shy to talk
Posted on: 2015/10/17 11:43
SMEDrieben
SMEDrieben (Show more)
Not too shy to talk
Posts: 151
Since: 2009/6/17
#3

Re: Bug in custom code in class textsanitizer

Thanks Mamba ! This solves the problem.

The php-code I used was copied from the class/texsanitizer/readme.txt. It should be changed there as well.

SMEDrieben

Mamba

Moderator
Posted on: 2015/10/17 18:00
Mamba
Mamba (Show more)
Moderator
Posts: 10465
Since: 2004/4/23
#4

Re: Bug in custom code in class textsanitizer

Quote:
The php-code I used was copied from the class/texsanitizer/readme.txt. It should be changed there as well.

Thanks for letting us know about it - it has been updated now in SVN.

Thank you!
Support XOOPS => DONATE
Use 2.5.9 | Docs | Modules | Bugs

SMEDrieben

Not too shy to talk
Posted on: 11/24 19:53
SMEDrieben
SMEDrieben (Show more)
Not too shy to talk
Posts: 151
Since: 2009/6/17
#5

Re: Addtional textsanitizer extensions do not work

This solution worked in 2.5.7.1. Now I am on 2.5.9. and the additional extensions don't work anymore.

I added the extensions to class/textsanitizer/config.php or config-custom.php

"ref"  => 1,
"bldwz"    => 1)


Thereafter, [ref] appears in the text, it is not interpreted. This is ref.php
<?php
class MytsRef extends MyTextSanitizerExtension
{
    
// The code parser
    
public function load(&$ts
    {
        
$ts->patterns[] = "/[ref ([0-9]*)](.*)[/ref]/sU";
        
$ts->replacements[] = '<span class="refbal">&nbsp;\1&nbsp;<span><b>\1.</b>&nbsp;\2</span></span>';
        
$ts->patterns[] = "/[ref ([0-9]*) news=([0-9]*)](.*)[/ref]/sU";
        
$ts->replacements[] = '<a href="' XOOPS_URL '/modules/news/article.php?storyid=\2" target="_top"><span class="refbal pointer">&nbsp;\1&nbsp;<span><b>\1.</b>&nbsp;\3</span></span></a>';
        
$ts->patterns[] = "/[ref ([0-9]*) smeb=([0-9]*)](.*)[/ref]/sU";
        
$ts->replacements[] = '<a href="' XOOPS_URL '/modules/publisher/category.php?categoryid=\2" target="_top"><span class="refbal pointer">&nbsp;\1&nbsp;<span><b>\1.</b>&nbsp;\3</span></span></a>';
        
$ts->patterns[] = "/[ref ([0-9]*) smehf=([0-9]*)](.*)[/ref]/sU";
        
$ts->replacements[] = '<a href="' XOOPS_URL '/modules/publisher/item.php?itemid=\2" target="_top"><span class="refbal pointer">&nbsp;\1&nbsp;<span><b>\1.</b>&nbsp;\3</span></span></a>';
        
$ts->patterns[] = "/[ref ([0-9]*) url=(.*)](.*)[/ref]/sU";
        
$ts->replacements[] = '<a href="\2" target="_blank"><span class="refbal pointer">&nbsp;\1&nbsp;<span><b>\1.</b>&nbsp;\3</span></span></a>';        
    }
    
    
// Processing the text
    
public static function decode($text$width$height)
    {
        
// Load config data if any
        
$config parent::loadConfigdirname(__FILE__) );
        if ( empty(
$text) || empty($config['enabled']) ) return $text;
        
$ret someFunctionToConvertTheTextToDefinedFormat($text);
        return 
$ret;
    }
}
?>


refbal is defined as class in style.css of my theme.

In the debug, there is one warning (many times repeated):
WaarschuwingParameter 1 to MytsRef::load() expected to be a referencevalue given in bestand /class/module.textsanitizer.php regel 770


How can I get my extensions working ?

Thanks !

SMEDrieben

Mamba

Moderator
Posted on: 11/24 20:49
Mamba
Mamba (Show more)
Moderator
Posts: 10465
Since: 2004/4/23
#6

Re: Addtional textsanitizer extensions do not work

Try to remove the "&" so it is:

load($ts)


see if it helps...
Support XOOPS => DONATE
Use 2.5.9 | Docs | Modules | Bugs

SMEDrieben

Not too shy to talk
Posted on: 11/24 21:41
SMEDrieben
SMEDrieben (Show more)
Not too shy to talk
Posts: 151
Since: 2009/6/17
#7

Re: Addtional textsanitizer extensions do not work

That's even worse ! It generates both a parse error and a fatal error:

Parse errorsyntax errorunexpected '<' in C:wamp64wwwhttpdocsclassmodule.textsanitizer.php(445) : regexp code on line 1


Fatal errorpreg_replace(): Failed evaluating code: <a href="http://www.ntvg.nl/publicatie/vaststellen-van-hersendood-bij-orgaandonatie" target="_blank"><span class="refbal pointer">&nbsp;1&nbsp;<span><b>1.</b>&nbsp;E.J.OKompanjeJ.LEpkerY.Jde GrootE.F.MWijdicksMvan der JagtVaststellen van hersendood bij orgaandonatie. <em>Ned Tijdschr Geneeskd.</em2013;157:A6444</span></span></ain C:wamp64wwwhttpdocsclassmodule.textsanitizer.php on line 445
Call Stack


Other suggestion ?

SMEDRieben

SMEDrieben

Not too shy to talk
Posted on: 11/24 21:58
SMEDrieben
SMEDrieben (Show more)
Not too shy to talk
Posts: 151
Since: 2009/6/17
#8

Re: Addtional textsanitizer extensions do not work

But.... I switched "ref" => to 0, reloaded the page, switched back to 1, saved config,php again, reloaded the page and then ... it worked properly without the &

Cookie or cache problem ?

SMEDrieben

Mamba

Moderator
Posted on: 11/25 0:53
Mamba
Mamba (Show more)
Moderator
Posts: 10465
Since: 2004/4/23
#9

Re: Addtional textsanitizer extensions do not work

Sounds more like cache problem...

I'm glad that it's working now.
Support XOOPS => DONATE
Use 2.5.9 | Docs | Modules | Bugs