This page describes some of the internal workings of PmWiki by explaining how some of the functions in pmwiki.php work. For a more brief list/overview on functions useful to for instance cookbook writers, see Cookbook:Functions. You might also want to look at the latest CVS version of pmwiki.php.
Put PmWiki standard functions here with brief explanations (per Pm email). Overly-documented functions get their own page (where possible). BenWilson August 02, 2005, at 02:15 PM
FmtPageName
($fmt, $pagename)
Returns
$fmt
, with $variable and internationalisation substitutions performed, under the assumption that the current page is
pagename
. See
PmWiki.Variables for an (incomplete) list of available variables,
PmWiki.Internationalizations for internationalisation.
This is one of the major functions in PmWiki, see PmWiki.FmtPageName for
lots of details.
Markup
($name, $when, $pattern, $replace)
This function is used to insert translation rules into the PmWiki's
translation engine. The arguments to Markup()
are all strings, where:
$name
- The string names the rule that is inserted. It must be unique (?? and is used partially controls the order in which the rules are applied).
What happens if the name isn't unique??
$when
- This string is used to primarily control when a rule is to be applied. See ??? for more details on the order of rules.
$pattern
- This string is a regular expression that is used by the translation engine to look for occurences of this rule in the markup source.
$replace
- This string will replace the matched text when a match occurs.
Also see: PmWiki.CustomMarkup and Cookbook:Functions#Markup
MarkupToHTML
($pagename, $str)
Converts the string
$str
containing PmWiki markup into the corresponding HTML code, assuming the current page is
$pagename
.
Also see: Cookbook:Functions#MarkupToHTML
mkdirp
($dir)
The function mkdirp
($dir) creates a directory, $dir
, if it doesn't
already exist, including any parent directories that might be needed. For
each directory created, it checks that the permissions on the directory are
sufficient to allow PmWiki scripts to read and write files in that
directory. This includes checking for restrictions imposed by PHP's
safe_mode setting. If mkdirp
() is unable to successfully create a
read/write directory, mkdirp
() aborts with an error message telling the
administrator the steps to take to either create $dir manually or give
PmWiki sufficient permissions to be able to do it.
Code of mkdirp
() taken from version pmwiki-2.0.beta55 (current is pmwiki-2.0.2):
## mkdirp creates a directory and its parents as needed, and sets
## permissions accordingly.
function mkdirp($dir) {
global $ScriptUrl;
if (file_exists($dir)) return;
if (!file_exists(dirname($dir))) mkdirp(dirname($dir));
if (mkdir($dir, 0777)) {
fixperms($dir);
if (@touch("$dir/xxx")) { unlink("$dir/xxx"); return; }
rmdir($dir);
}
$parent = realpath(dirname($dir));
$perms = decoct(fileperms($parent) & 03777);
$msg = "PmWiki needs to have a writable <tt>$dir/</tt> directory
before it can continue. You can create the directory manually
by executing the following commands on your server:
<pre> mkdir $parent/$dir\n chmod 777 $parent/$dir</pre>
Then, <a href='$ScriptUrl'>reload this page</a>.";
$safemode = ini_get('safe_mode');
if (!$safemode) $msg .= "<br /><br />Or, for a slightly more
secure installation, try executing <pre> chmod 2777 $parent</pre>
on your server and following <a target='_blank' href='$ScriptUrl'>
this link</a>. Afterwards you can restore the permissions to
their current setting by executing <pre> chmod $perms $parent</pre>.";
Abort($msg);
}