Randy Brown writes:
Is there any way to prevent a user from entering a page text variable when
inputting text via PmForm? (It would also be nice to know how to prevent
some specific {(markup expressions)} from being entered via PmForm, although
I don't need to do that yet.)
Yes, a search-replace pattern can be entered in $PmFormPostPatterns, it
works like $ROSPatterns but on the posted form content.
It already replaces "(:" and ":)" with "( :" and ": )" to prevent one type
of PTV to be entered or split, or to insert another {$:PTV} inside.
I'll give one example for your case below.
I need to block PTVs from being entered via PmForm because as far as I can
tell, PmForm is using the first PTV it finds on the page, while PmWiki is
using the last. For example:
PTV1: PmForm uses this first line for PTV1
PTV1: PmWiki uses this last line for PTV1
It is more complex: there are different ways to define PageTextVariables.
PmWiki scans the page for each of the ways in the order they are defined,
first Var:Value, then (:Var:Value:), then any custom ways, and uses the last
one it finds in this process, but not necessarily the last one written in
the page.
PmForm scans the page in the same order of the "ways" but stops after it
finds the first matching variable.
I'm hoping there's a way to fix this without modifying the PmForm recipe,
but I imagine I have to customize the script. I've looked at the script, but
it's not clear to me what it's doing.
It is possible to change the pmform.php script to scan the page backwards,
in the reverse order in which pmwiki.php defines the variables, but I wanted
to ask on the mailing list if there would be no side-effects. An update may
potentially break existing installations, although I suspect your case is
very rare.
Which lines would I change? Also, what regular expression would accomplish
my goal of replacing "PTV1:" at the beginning of a line with "PTV :" (that
is, add a space between the word and the colon)?
This will not help you as a PTV can have an optional space before the colon.
Something like this may work:
$PmFormPostPatterns['/^:*\\s*(\\w[-\\w]*)\\s*:/m'] = '[==]$0';
This will scan the posted content for anything that looks like a PTV (start
of line, optional colon, optional spaces, something looking like a variable
name, optional spaces, colon) and insert the escaping [==] null markup
before it. This should prevent PmWiki to use it when defining a PTV.
Note, this will not prevent someone editing the page via the ?action=edit
interface to insert more than one definitions for the same PTV. In that case
PmWiki will use the last one, PmForm will update the first one. That's why
we should probably modify pmform.php to also update the last one?
Petko
_______________________________________________
pmwiki-users mailing list
pmwiki-users@pmichaud.com
http://www.pmichaud.com/mailman/listinfo/pmwiki-users