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

Reply via email to