[pmwiki-users] attachtable for PHP 5.5 ?
Petko Yotov
5ko at 5ko.fr
Tue Dec 9 15:47:24 CST 2014
This one is more advanced indeed, here is how to use it so that the code
is compatible with both PHP 5.5 and PHP 4.
First, instead of preg_replace() with arguments arrays, we use the
built-in PPRA() function which will call intelligently preg_replace() or
preg_replace_callback() for every element of the arrays:
if ($pg) $txt = preg_replace( # before
if ($pg) $txt = PPRA( # after
First, the search pattern is written without the /e flag:
'/\[\[[^\]]*?\bAttach:([^"\]\|]*)/e', # before
'/\[\[[^\]]*?\bAttach:([^"\]\|]*)/', # after
Second, the replace string is converted into a callback function:
"'[['.AttachtableCountUploadLinks(\$pn,'','$1')", # before
PCCF("return '[['.AttachtableCountUploadLinks('$pn','',\$m[1]);"), #
after
Note that we have wrapped the previous code in a line like
PCCF("return PREVCODEHERE ;")
Also, two important changes:
The '$1' is written as \$m[1].
The \$pn variable is EMBEDDED as quoted expanded STRING "...'$pn'..."
into the code to be evaluated, because as a local variable it would be
out of the scope of the callback function, thus inaccessible.
So, the last part would probably look like this:
PCCF("return '[['.AttachtableCountUploadLinks('$pn','',\$m[1]);"),
PCCF("return AttachtableCountUploadLinks('$pn','',\$m[1]);"),
PHSC( $pg['text'], ENT_NOQUOTES ) );
(untested, might need some tweaking)
PCCF="PmWiki Create Callback Function", see/improve
http://www.pmwiki.org/wiki/PmWiki/Functions (documentation)
http://www.pmwiki.org/wiki/Cookbook/ROSPatterns (example)
PPRA="PmWiki preg replace array", see/improve
http://www.pmwiki.org/wiki/PmWiki/Functions (documentation)
http://www.pmwiki.org/wiki/Cookbook/DotsInLinks (example, also PCCF)
Petko
On 09.12.2014 15:08, Hans Bracker wrote:
> I tried to update the attachtable.php script, to make it PHP 5.5
> compatible. But I could not get the following section (lines 174-186)
> revise dfor PHP 5.5 compatibility:
>
> foreach( $ls as $pn ) {
> $pg = RetrieveAuthPage( $pn, 'read', FALSE, READPAGE_CURRENT );
> if ($pg) $txt = preg_replace(
> array(
> "/(\n[^\\S\n]*)?\\[([=@])(.*?)\\2\\]/s", ## preserved text
> '/\[\[[^\]]*?\bAttach:([^"\]\|]*)/e', ## links to
> attachments
>
> "/\\bAttach:([^\\s$UrlExcludeChars]*[^\\s.,?!$UrlExcludeChars])/e" ),
> ## raw attachments
> array(
> ' ',
> "'[['.AttachtableCountUploadLinks(\$pn,'','$1')",
> "AttachtableCountUploadLinks(\$pn,'','$1')" ),
> htmlspecialchars( $pg['text'], ENT_NOQUOTES ) ); ##
> assumes $MarkupFrame[0]['escape'] == 1
> }
>
> How can this be rewritten? preg_replace with /e modifier is used
> twice, and I don't know how to create correct preg_replace_callback
> or use PPRA or PPRE instead. I tried in various ways and get warnings,
> and the Attach: markup in links or otherwise is not picked up (when
> the list of pages gets larger than 8).
>
>
> Best regards,
> Hans
> mailto:design at softflow.co.uk
> www.softflow.co.uk
>
>
> _______________________________________________
> pmwiki-users mailing list
> pmwiki-users at pmichaud.com
> http://www.pmichaud.com/mailman/listinfo/pmwiki-users
More information about the pmwiki-users
mailing list