[pmwiki-devel] Upload variables available in PmWiki

Petko Yotov 5ko at 5ko.fr
Fri Aug 21 06:09:51 CDT 2015


On 2015-08-21 12:19, Simon wrote:
> On page http://www.pmwiki.org/wiki/PmWiki/UploadVariables
> 
> the following variables are defined
> 
> $UploadUrlFmt
> $UploadDir
> $UploadPrefixFmt
> 
> But they are not exposed to PmWiki markup, i.e. don't work on the 
> website.

Correct.

> Are there any variables that are?

Yes, all those defined in the $FmtPV array.

We don't want all global PHP variables to be readable by simply typing 
them on a wiki page, this might open a number of vulnerabilities. In a 
wiki page, one can only check if a global PHP variable is enabled or 
not, with the conditional (:if enabled $UploadDir:).

Now, these upload variables are not confidential (except maybe 
$UploadDir in some cases of protected downloads) so if you require them 
to be accessible as PageVariables, just define them in the $FmtPV array:

   $FmtPV['$UploadDir'] = '$GLOBALS["UploadDir"]';

or for $UploadPrefixFmt which contains PageVariables:

   $FmtPV['$UploadPrefixFmt'] =
     'FmtPageName($GLOBALS["UploadPrefixFmt"], "$group.$name")';

> On a second note (for NZTopo), can someone suggest some exemplar code
> that would left me validate, in a recipe, that a supplied filename (as
> a parameter) exists in a upload directory.
> 
> It would have to cope with per page/per group attachments, and the
> standard pmwiki variants
> 
> filename.ext
> group.page/filename.ext
> etc.
> 
> Ideally if the file does not exist it would exhibit an upload link.
> Or is there an internal PmWiki function for the use of recipe writers?

The core function LinkUpload($pagename, $imap, $path, $alt, $txt, $fmt) 
does exactly this. You can call it like this:

   $imap = "Attach:";
   $path = $alt = "filename.ext"; # or "group.page/filename.ext"

   $txt = $path; # you may want to change this, or not

   $fmt = null; # use the default html snippet for attachment links

   $MyAttachLink = LinkUpload($pagename, $imap, $path, $alt, $txt, $fmt);

Now, this doesn't tell your recipe if the file exists or not, but 
returns the correct link. To know if the file exists, the easiest thing 
is to check this link for ?action=upload:

   $FileIsAlreadyAttached = strpos($MyAttachLink, "action=upload") ? 
false: true;

A less easy way but which would help you better understand the uploads 
feature in PmWiki would be to copy the function LinkUpload() in your 
recipe, rename it, study it and adapt it for your needs.

Petko

-- 
Change log     :  http://www.pmwiki.org/wiki/PmWiki/ChangeLog
Release notes  :  http://www.pmwiki.org/wiki/PmWiki/ReleaseNotes
If you upgrade :  http://www.pmwiki.org/wiki/PmWiki/Upgrades

If this message helped you and saved you time, feel free to make
a small contribution: ♥ http://5ko.fr/donate-ml (mailing list).




More information about the pmwiki-devel mailing list