<< | Documentation Index | >>

Version 2.2.0-beta1 through 2.2.0-beta65 (2006-09-25 to 2007-11-17)

As discussed on the pmwiki-users mailing list, we have a number of new features and refactorings taking place in the core code. Thus, the next set of releases will be designated as "2.2.0-beta", so that administrators will know to review the release notes here for important changes that may impact their site when upgrading from 2.1.x or earlier to a 2.2 release.

Here's a list of important changes:

  • As of 2.2.0-beta58, several pages that were formally in the Site.* group are now in a separate SiteAdmin.* group, which is read-restricted by default. The affected pages include Site.AuthUser, Site.AuthList, Site.NotifyList, Site.Blocklist, and Site.ApprovedUrls . If upgrading from an earlier version of PmWiki, PmWiki will prompt to automatically copy these pages to their new location if needed. If a site wishes to continue using the old Site.* group for these pages, simply set
$SiteAdminGroup = $SiteGroup;
As of 2.2.0-beta59 this feature works for WikiFarms, in beta-58 affected pages in each field have to be manually reconfigured, or the above setting to change $SiteAdminGroup made.
when carrying out this upgrade inspect your config files for lines such as
$BlocklistDownload['Site.Blocklist-PmWiki'] = array('format' => 'pmwiki');
as you may wish to fix then, eg
$BlocklistDownload[$SiteAdminGroup . '.Blocklist-PmWiki'] = array('format' => 'pmwiki');
  • Important Change in Passwords in PmWiki 2.2 indicating that the group can be edited even if a site password is set will be done by "@nopass" prior it was done by "nopass"
When migrating a wiki you will have to manually modify the permission or by a script replace in all the page concerned passwdread=nopass: by passwdread=@nopass (see 00961?) isidor?
  • PmWiki now ships with WikiWords entirely disabled by default. To re-enable them, set either $LinkWikiWords or $EnableWikiWords to 1. To get the 2.1 behavior where WikiWords are spaced and parsed but don't form links, use the following:
  • It's now easy to disable the rule that causes lines with leading spaces to be treated as preformatted text -- simply set $EnableWSPre=0; to disable this rule.
    Important: There is ongoing discussion that the leading whitespace rule may be disabled by default in a future versions of 2.2.0-beta. If you want to make sure that the rule will continue to work in future upgrades, set $EnableWSPre=1; in local/config.php.
  • The $ROSPatterns variable has changed somewhat -- replacement strings are no longer automatically passed through FmtPageName() prior to substitution (i.e., it must now be done explicitly).
  • Page variables and page links inside of (:include:) pages are now treated as relative to the included page, instead of the currently browsed page. In short, the idea is that links and page variables should be evaluated with respect to the page in which they are written, as opposed to the page in which they appear. This seems to be more in line with what authors expect. There are a number of important ramifications of this change:

  • We now have a new {*$var} form of page variable, which always refers to "the currently displayed page". Pages such as Site.PageActions and Site.EditForm that are designed to work on "the currently browsed page" should generally switch to using {*$FullName} instead of {$FullName}.
  • The $EnableRelativePageLinks and $EnableRelativePageVars settings control the treatment of links and page variables in included pages. However, to minimize disruption to existing sites, $EnableRelativePageVars defaults to disabled. This will give existing sites an opportunity to convert any absolute {$var} references to be {*$var} instead.
  • Eventually $EnableRelativePageVars will be enabled by default, so we highly recommend setting $EnableRelativePageVars = 1; in local/config.php to see how a site will react to the new interpretation. Administrators should especially check any customized versions of the following:
    SideBar pages with ?action= links for the current page
    Page lists that refer to the current group or page, etc in sidebars, headers, and footers
  • The (:include:) directive now has a basepage= option whereby an author can explicitly specify the page upon which relative links and page variables should be based. If no basepage= option is specified, the included page is assumed to be the base.
  • Sites that want to retain the pre-2.2 behavior of (:include:) and other items can set $Transition['version'] = 2001900; to automatically retain the 2.1.x defaults.
  • Text inserted via (:include:) can contain "immediate substitutions" of the form {$$option} -- these are substituted with the value of any options provided to the include directive.
  • PmWiki now recognizes when it is being accessed via "https:" and switches its internal links appropriately. This can be overridden by explicitly setting $ScriptUrl and $PubDirUrl.
  • A new $EnableLinkPageRelative option allows PmWiki to generate relative urls for page links instead of absolute urls.
  • Draft handling capabilities have been greatly improved. When $EnableDrafts is set, then the "Save" button is relabeled to "Publish" and a "Save draft" button appears. In addition, an $EnablePublishAttr configuration variable adds a new "publish" authorization level to distinguish editing from publishing. See PmWiki:Drafts for more details.

  • There is a new {$:var} "page text variable" available that is able to grab text excerpts out of markup content. For example, {SomePage$:Xyz} will be replaced by a definition of "Xyz" in SomePage. Page text variables can be defined using definition markup, a line beginning with the variable name and a colon, or a special directive form (that doesn't display anything on output):
    :Xyz: some value            # definition list form
    Xyz: some value             # colon form
    (:Xyz: some value:)         # directive form
    

  • The (:pagelist:) command can now filter pages based on the contents of page variables and/or page text variables. For example, the following directive displays only those pages that have an "Xyz" page text variable with "some value":
    (:pagelist $:Xyz="some value":)
    Wildcards also work here, thus the following pagelist command lists pages where the page's title starts with the letter "a":
    (:pagelist $Title=A* :)
  • The if= option to (:pagelist) can be used to filter pages based on conditional markup:
    (:pagelist if="auth upload {=$FullName}":) pages with upload permission
    (:pagelist if="date today.. {=$Name}":) pages with names that are dates later than today
  • Spaces no longer separate wildcard patterns -- use commas. (Most people have been doing this already.)
  • Because page variables are now "relative", the {$PageCount}, {$GroupCount}, {$GroupPageCount} variables used in pagelist templates are now {$$PageCount}, {$$GroupCount}, {$$GroupPageCount}.
  • One can now use {$$option} in a pagelist template to obtain the value of any 'option=' provided to the (:pagelist:) command.
  • The (:pagelist:) directive no longer accepts parameters from urls or forms by default. In order to have it accept such parameters (which was the default in 2.1 and earlier), add a request=1 option to the (:pagelist:) directive.
  • The count= option to pagelists now accepts negative values to count from the end of the list. Thus count=5 returns the the first five pages in the list, and count=-5 returns the last five pages in the list. In addition, ranges of pages may be specified, as in count=10..19 or count=-10..-5.
  • Pagelist templates may have special (:template first ...:) and (:template last ...:) sections to specify output for the first or last page in the list or a group. There's also a (:template defaults ...:) to allow a template to specify default options.
  • PmWiki comes with an ability to cache the results of certain (:pagelist:) directives, to speed up processing on subsequent visits to the page. To enable this feature, set $PageListCacheDir to the name of a writable directory (e.g., work.d/).
  • The (:if ...:) conditional markup now also understands (:elseif ...:) and (:else:). Conditions still do not nest, however.
  • The (:if date ...:) conditional markup can now perform date comparisons for dates other than the current date and time.
  • WikiTrails can now specify #anchor identifiers to use only sections of pages as a trail.
  • A new (:if ontrail ...:) condition allows testing if a page is listed on a trail.
  • The extensions .odt, .ods, and .odp (from OpenOffice.org) are now recognized as valid attachment types by default.
  • A new blocklist capability has been added to the core distribution. It allows blocking of posts based on IP address, phrase, or regular expression, and can also make use of publicly available standard blocklists. See PmWiki.Blocklist for details.
  • There is a new SiteAdmin.AuthList page that can display a summary of all password and permissions settings for pages on a site. This page is restricted to administrators by default.
  • There are new {$PasswdRead}, {$PasswdEdit}, etc. variables that display the current password settings for a page (assuming the browser has attr permissions or whatever permissions are set in $PasswdVarAuth).
  • Forms creation via the (:input:) markup has been internally refactored somewhat (and may still undergo some changes prior to 2.2.0 release). The new (:input select ...:) markup can be used to create select boxes, and (:input default ...:) can be used to set default control values, including for radio buttons and checkboxes.
  • The (:input textarea:) markup now can take values from other sources, including page text variables from other pages.
  • Specifying focus=1 on an (:input:) control causes that control to receive the input focus when a page is loaded. If a page has multiple controls requesting the focus, then the first control with the lowest value of focus= "wins".
  • PmWiki now provides a scripts/creole.php module to enable Creole standard markup. To enable this, add include_once('scripts/creole.php') to a local customization file.
  • PmWiki adds a new {(...)} markup expression capability, which allows various simple string and data processing (e.g., formatting of dates and times). This is extensible so that recipe authors and system administrators can easily add custom expression operators.
  • It's now possible to configure PmWiki to automatically create Category pages whenever a page is saved with category links and the corresponding category doesn't already exist. Pages are created only if the author has appropriate write permissions into the group. To enable this behavior, add the following to local/config.php:
    $AutoCreate['/^Category\\./'] = array('ctime' => $Now);
  • Sites with wikiwords enabled can now set $WikiWordCount['WikiWord'] to -1 to indicate that 'WikiWord' should not be spaced according to $SpaceWikiWords.
  • WikiWords that follow # or & are no longer treated as WikiWords.
  • Links to non-existent group home pages (e.g., [[Group.]] and [[Group/]]) will now go to the first valid entry of $PagePathFmt, instead of being hardcoded to "Group.Group". For example, to set PmWiki to default group home pages to $DefaultName, use
    $PagePathFmt = array('{$Group}.$1', '$1.{$DefaultName}', '$1.$1');
  • PmWiki now provides a $CurrentTimeISO and $TimeISOFmt variables, for specifying dates in ISO format.
  • Cookbook authors can use the internal PmWiki function UpdatePage (temporarily documented at DebuggingForCookbookAuthors) to change page text while preserving history/diff information, updating page revision numbers, updating RecentChanges pages, sending email notifications, etc.
  • Skin templates are now required to have <!--HTMLHeader--> and <!--HTMLFooter--> directives. Setting $EnableSkinDiag causes PmWiki to return an error if this isn't the case for a loaded skin. Skins that explicitly do not want HTMLHeader or HTMLFooter sections can use <!--NoHTMLHeader--> and <!--NoHTMLFooter--> to suppress the warning.
  • Added a new "pre" wikistyle for preformatted text blocks.
  • The xlpage-utf-8.php script now understands how to space UTF-8 wikiwords.
  • Searches on utf-8 site are now case-insensitive for utf-8 characters.
  • Many Abort() calls now provide a link to pages on pmwiki.org that can explain the problem in more detail and provide troubleshooting assistance.
  • PmWiki no longer reports "?cannot acquire lockfile" if the visitor is simply browsing pages or performing other read-only actions.
  • The $EnableReadOnly configuration variable can be set to signal PmWiki that it is to run in "read-only" mode (e.g., for distribution on read-only media). Attempts to perform actions that write to the disk are either ignored or raise an error via Abort().
  • Including authuser.php no longer automatically calls ResolvePageName().
  • Authentication using Active Directory is now simplified. In Site.AuthUser or the $AuthUser variable, set "ldap://name.of.ad.server/" with no additional path information (see PmWiki.AuthUser for more details).
  • Pages are now saved with a "charset=" attribute to identify the character set in effect when the page was saved.
  • The phpdiff.php algorithm has been optimized to be smarter about finding smaller diffs.
  • Removed the (deprecated) "#wikileft h1" and "#wikileft h5" styles from the pmwiki default skin.
  • The mailposts.php and compat1x.php scripts have been removed from the distribution.

Version 2.1.27 (2006-12-11)

This version backports from 2.2.0-beta a bugfix for $TableRowIndexMax and also support for the {*$Variable} markup.

Version 2.1.26 (2006-09-11)

This version fixes a bug in feeds.php that would cause feed entries to be mixed up.

Version 2.1.25 (2006-09-08)

This release fixes a bug in authuser.php introduced by the 2.1.24 release.

The skin template code has also been extended to allow <!--XMLHeader--> and <!--XMLFooter--> as aliases for <!--HTMLHeader--> and <!--HTMLFooter-->.

Version 2.1.24 (2006-09-06)

This release makes some improvements and fixes to the AuthUser capability.

A bug in authuser.php that had trouble dealing with non-array values in $AuthUser has been fixed.

It is now possible to specify group memberships from local/config.php (remember that such entries must come before including the authuser.php script):

    # alice and bob's passwords
    $AuthUser['alice'] = crypt('alicepassword');
    $AuthUser['bob'] = crypt('bobpassword');

    # members of the @writers and @admins groups
    $AuthUser['@writers'] = array('alice',  'bob');
    $AuthUser['@admins'] = array('alice', 'dave');

    # carol is a member of @editors and @writers
    $AuthUser['carol'] = array('@editors', '@writers');

AuthUser can now read from Apache-formatted .htgroup files. The location of the .htgroup file can be done either in local/config.php or Site.AuthUser

    # local/config.php:
    $AuthUser['htgroup'] = '/path/to/.htgroup';

    # Site.AuthUser
    htgroup: /path/to/.htgroup

Versions 2.1.21, 2.1.22, 2.1.23 (2006-09-05, 2006-09-06)

This release closes a potential security vulnerability for sites that are running with 'register_globals' set to on. Details of the vulnerability will be forthcoming on the mailing list and site.

Sites that are running with PHP 'register_globals' and 'allow_url_fopen' set to 'On' should upgrade to this release at the earliest opportunity. If upgrading isn't an option, contact Pm for a patch to older versions.

There is now a tool available to analyze PmWiki sites for security and other configuration settings, see PmWiki:SiteAnalyzer.

Version 2.1.23 also corrects a bug that prevented PmWiki from being able to read pagefiles created by versions of PmWiki before 0.5.6.

Version 2.1.20 (2006-09-04)

More minor bugfixes:

  • Corrected a bug with WikiWord references appearing in the (:attachlist:) markup.
  • Restore ability to remove/override PmWiki's default CSS settings.

Version 2.1.19 (2006-08-30)

This release provides a number of very minor bugfixes and enhancements:

  • Fixed a bug in the pageindex code that was causing it to not regenerate as quickly as it should.
  • Fixed image/object/embed handling in wikistyles to better support the Cookbook:Flash recipe.
  • Fixed a bug with wikistyles and input form tags.

The next release(s) may have a number of substantial code enhancements and changes, so this release simply closes out a few items before introducing those changes.

Version 2.1.18 (2006-08-28)

This release closes a potential cross-site scripting vulnerability that could allow authors to inject Javascript code through the various table markups.

The release also adds a new (:input image:) markup to generate image input tags in forms.

Finally, this release corrects a problem with ?action=print failing to properly set the {$Action} page variable.

Version 2.1.17 (2006-08-26)

This release fixes a long-standing bug with $EnableIMSCaching (PITS:00573), whereby login/logout operations wouldn't invalidate browser caches, causing some people to see versions of a page prior to the login/logout taking place.

The new IMS caching code maintains a "imstime" cookie in the visitor's browser that keeps track of the time of last login, logout, author name change, or site modification. This cookie is then used to determine the proper response to browser requests containing If-Modified-Since headers. (Previously only the time of the last site modification was available.)

Browsers which do not accept cookies will effectively act as though IMS caching is disabled.

Version 2.1.16 (2006-08-26)

This release makes some improvements to skin handling -- primarily this improves the capability of relocating skin files to other locations, and to provide the ability for recipes to insert items at the end of HTML output.

This release introduces a <!--HTMLFooter--> directive into skin templates, which allows recipes and local customizations to insert output near the end of a document using a $HTMLFooterFmt array from PHP.

Also, the <!--HeaderText--> directive, which inserts the contents of $HTMLHeaderFmt into the output, has now been renamed to <!--HTMLHeader-->. PmWiki will continue to recognize <!--HeaderText--> to preserve compatibility with existing skins, but <!--HTMLHeader--> is preferred.

A new $SkinLibDirs array has been introduced which allows the source locations and urls for skins to be specified from a customization file. By default $SkinLibDirs is set as

  $SkinLibDirs = array("./pub/skins/\$Skin"      => "$PubDirUrl/skins/\$Skin",
                  "$FarmD/pub/skins/\$Skin" => "$FarmPubDirUrl/skins/\$Skin");

The keys (on the left) indicate the places to look for a "skin .tmpl file" in the filesystem, while the values (on the right) indicate the url location of the "skin css file". Modifying the value of $SkinLibDirs allows a skin .tmpl file to be located anywhere on the filesystem.

As far as I can see, none of the changes introduced by this release should have any sort of negative impact on existing sites, so it should be safe to upgrade. (If I'm wrong, please let me know.)

Version 2.1.15 (2006-08-25)

This release includes a number of feature enhancements and code cleanups as reported or requested by administrators.

First, AuthUser's LDAP authentication system now allows the use of a ?filter parameter, consistent with urls used for mod_auth_ldap authorization in Apache. See the newly updated LDAP section of the AuthUser documentation for more details.

A chicken-and-egg problem with the @_site_* authorization groups has been resolved. It's now possible to have a page's read authorization refer to things such as _site_edit.

Also, the RetrieveAuthPage() function -- used for retrieving pages only if the visitor is authorized to do so -- now recognizes a special level parameter of 'ALWAYS', which means to always authorize access regardless of the browser or visitors current permissions. This may be useful for allowing certain operations to take place from within trusted scripts without having to grant full authorization to the browser.

Hardcoded instances of the local/ directory now use a customizable $LocalDir variable. This variable controls where PmWiki looks for local/config.php and per-group customization files. It may be useful for some Wiki Farm contexts. Note that this does not change or affect the location of $FarmD/local/farmconfig.php.

Some minor internal changes have been made to scripts/wikistyles.php to better accommodate the wikipublisher recipe. It's probably better if we don't try to explain them. :-)

Version 2.1.13, 2.1.14 (2006-08-15, 2006-08-16)

This release fixes a bug in handling numeric passwords, and also allows ldaps:// authentication sources.

Version 2.1.12 (2006-08-07)

This version introduces the ability to nest divs and tables. The standard (:table:) and (:div:) markups are still available, except that a (:div:) may contain a (:table:) and vice-versa.

As in previous versions of PmWiki, the (:div:) markup automatically closes any previous (:div:). However, there are now (:div1:), (:div2:), etc. markups (and the corresponding (:div1end:), (:div2end:), ...) which can be used to uniquely distinguish divs for nesting purposes.

To restore PmWiki's previous "non-nested" div behavior, set $Transition['nodivnest'] = 1; in a local customization file.

Other changes in this release:

  • Add a (:noaction:) directive to suppress display of page actions.
  • Allow anchor tags to contain colons, hyphens, and dots.
  • Add "white-space" as an allowed wikistyle.
  • Other minor bug fixes and typographical corrections.

Version 2.1.11 (2006-06-09)

This is a minor update that prevents %define=% wikistyles from generating empty paragraphs in the HTML output. Prior to this release, markup lines containing only wikistyle definitions would often generate empty paragraphs (<p></p>), this release changes things so that a markup line beginning with %define= and containing only wikistyle definitions will not initiate a new paragraph.

Version 2.1.10 (2006-06-03)

Version 2.1.4 introduced an {$Action} page variable that would contain the current ?action= value. Unfortunately, this page variable conflicted with a pre-existing $Action global variable that was being used by skins to display a human-friendly form of the current action. Since there's not really a clean way to resolve this, I've decided to keep {$Action} as a page variable with the current action value (as introduced in 2.1.4), and change the global for skins to be $ActionTitle. This will require updating skins to use $ActionTitle instead of $Action. I apologize for the conflict.

This release adds a Site.LocalTemplates page for the fmt=#xyz option in pagelist and search results. The list of pages to be searched can be customized via the $FPLTemplatePageFmt variable. The fmt=#xyz option will now also search the current page for a matching template before searching Site.LocalTemplates and Site.PageListTemplates.

The 'pmwiki' skin now places a <span> around the "Recent Changes" link in the header to make it somewhat easier to style.

Version 2.1.9 (2006-06-02)

This release fixes a long-standing and difficult-to-find bug with the handling of [[~Author]] links.

Version 2.1.8 (2006-06-01)

This release simply changes the $NotifyListFmt variable to be $NotifyListPageFmt (more descriptive), and adds a $NotifyList array that can be used to specify notification entries from a configuration file.

Version 2.1.7 (2006-05-31)

This release introduces a variety of improvements and bugfixes.

Vspace paragraphs are now divs: Version 2.1.7 changes the way that PmWiki handles vertical space in output (the infamous <p class='vspace></p> sequence). Instead of using paragraphs, PmWiki now generates <div class='vspace'></div> for vertical space sequences. In addition, PmWiki is able to collapse the vspace <div> with any subsequent paragraph tags, such that a sequence like

    <div class='vspace></div><p>...paragraph text...</p>

is automatically converted to

    <p class='vspace'>...paragraph text...</p>

This allows for better control over paragraph spacing. It is expected that this change in vspace handling will not have any detrimental effects on existing sites. Sites that have set custom values for $HTMLVSpace will continue to use the custom value. A site that wants to restore PmWiki's earlier handling of vspace can do so by adding the following to local/config.php:

    $HTMLVSpace = "<p class='vspace'></p>";

Improved email notifications of changes: Version 2.1.7 incorporates a notify.php script that provides improved capabilities for sending email notifications in response to page changes. This script is intended to replace the previous MailPosts capability, which is now deprecated (but will continue to be supported in PmWiki 2.1.x). Details and instructions for using notify.php are in the PmWiki.Notify page.

Added 'group home page' syntax: A group name followed by only a dot or slash is automatically treated as a reference to the group's home page, whatever it happens to be. This simplifies some pagelist templates as well as a number of other items. In particular, group links in pagelist output now points to the correct locations (instead of being a page in the current group).

Several bugs and vulnerabilities have been fixed:

  • The default width of edit forms is now more appropriate for Internet Explorer.
  • Authentication failure messages from LDAP are now suppressed.
  • Some cross-site scripting vulnerabilities in uploads and page links have been corrected (courtesy Moritz Naumann, http://moritz-naumann.com).
  • A problem with invalid pagenames resulting in redirect loops has been corrected.

Version 2.1.6 (2006-05-22)

The primary improvement in this release is the addition of a pagename argument to the (:if auth:) conditional markup. Thus one can display markup based on a visitor's authorization to a page other than the current one. For example, to test for edit privileges to Main.WikiSandbox, one would use (:if auth edit Main.WikiSandbox:). As before, if the pagename is omitted the directive tests authorization to the current page.

This release also restores the ability to have hyphens in InterMap link names.

Lastly, the release closes a potential cross-site scripting vulnerability in the WikiTrail markup, and provides some small performance improvements.

Version 2.1.4, 2.1.5 (2006-03-29)

This release fixes a few more bugs:

  • Pagelist-based feeds using ?action=rss work again.
  • Multi-term searches with special characters is fixed.

The release also adds a couple of items:

  • There is now an {$Action} page variable.
  • Usernames and passwords submitted to authuser.php can contain quotes.
  • The (:attachlist:) command now uses a natural case sort.

Version 2.1.3 (2006-03-17)

This release fixes a bug that prevents the lines= option from working on sites running PHP 5.1.1 or later. It also re-fixes a bug involving empty passwords and LDAP authentication.

Version 2.1.2 (2006-03-16)

This release fixes a bug with handling "nopass" passwords. It also makes some speed improvements to large web feeds, and fixes a couple of minor HTML tag mismatches.

Version 2.1.1 (2006-03-13)

This release primarily fixes a bug with passwords containing multiple authorization groups, and in the process slightly liberalized the formatting of "@group" and "id:name" handling. This release also adds a new mechanism for managing and displaying FAQ pages.

Version 2.1.0 (2006-03-12)

This set of release notes is fairly lengthy, as it chronicles all of the changes since 2.0.13 (four months of development). A lot remains the same, but some changes warrant extra care when upgrading from a 2.0.x version to 2.1.0 (thus the major revision number change). As always, questions and issues can be mailed to the pmwiki-users mailing list.

Here's the list:

  • WikiWords are now disabled by default. To enable them, set "$LinkWikiWords = 1;" in a local customization file. As of 2.1.beta2, you can now leave WikiWords enabled but have links to non-existent pages display without decoration -- to do this, place the following lines in pub/css/local.css:
    span.wikiword a.createlink { display:none; }
    span.wikiword a.createlinktext 
      { border-bottom:none; text-decoration:none; color:inherit; }
  • The (:pagelist:) code has been substantially revised. Pagelist formatting can now be specified using markup, and several defaults are available from Site.PageListTemplates. Also, several built-in pagelist formatting functions (FPLSimple, FPLByGroup, FPLGroup) are now removed in favor of the template code. The FPLByGroup function can be restored by setting $Transition['fplbygroup']=1; . Remark: Check to see if your page Site.PageListTemplates is not passwordprotected for viewing, otherwise the resulting pagelist will not be shown.
  • (:pagelist:) now also understands wildcards in group= and name= arguments, as well as excluding specific names and groups.
  • (:pagelist:) now has an "order=random" option.
  • (:searchbox:) now accepts "group=", "link=", "list=", etc. options to be passed along to the search results. It also accepts a "target=" option that identifies the page on which to send the search query.
  • ?action=search will display the contents of the current page if it contains a (:searchresults:) directive, otherwise it uses the content of the page identified by $PageSearchForm (default is the search page for the current language translation).
  • PmWiki no longer maintains a ".linkindex" file -- it now has a ".pageindex" file that contains not only a table of links, but also words used in each page (to speed up term searches). The maintenance of the .pageindex file can be disabled by setting $PageIndexFile='';
  • The $EnablePageListProtect variable now defaults to true, so that read-only pages appear in pagelists only if the visitor has read authorization. Note that this can also slow down some (:pagelist:) and search commands, so if the site doesn't have any read-only pages or if you aren't worried with cloaking read-only pages from searchlists, it might be worth setting $EnablePageListProtect=0; .
  • Whitespace indentation rules now exist and are enabled by default. Any line that begins with whitespace and aligns with a previous list item is considered to be "within" that list item. Text folds and wraps as normal, and the (:linebreaks:) directive is honored. To turn off whitespace indentation, use DisableMarkup('^ws');.
  • A single blank line after a !!Heading is silently ignored.
  • The (:redirect:) directive is now a true markup, and can be embedded inside conditional markups or includes. It also allows redirecting to an anchor in a page, such as (:redirect PageName#anchor:). A new from= option allows the redirect to take place only from pages that match the given wildcard specification. The status= option allows a 301, 302, 303, or 307 HTTP status code to be returned.
  • The built-in authorization function has gone through some substantial internal changes, however these changes should be fully backward compatible so that it doesn't impact any existing sites. (If it does cause a problem, please let me know so I can investigate why!) The password prompts are now specified by an admin-customizable Site.AuthForm page. In addition, the authorization function no longer creates PHP sessions for visitors that aren't being authenticated.
  • The authuser.php has likewise been substantially updated. The new version should have complete backwards compatibility with previous authuser.php settings, but this version also offers the ability to configure authentication resources and authorization groups through the Site.AuthUser page. Note that by default the Site.AuthUser page can only be edited using the admin password.
  • The $Author variable now defaults to $AuthId if not otherwise set by a script or cookie.
  • The Site.SideBar page now defaults its edit password to the sitewide edit password (in $DefaultPasswords['edit']).
  • PmWiki now supports a "draft edit" mode, enabled by $EnableDrafts = 1. This creates a "Save as draft" button that will save a page under a "-Draft" suffix, for intermediate edits.
  • There is now an ?action=login action available.
  • A potential security vulnerability for sites running PHP 5 with register_globals enabled has been fixed.
  • The [[PageName |+]] markup is now available by default; this creates a link to PageName and uses that page's title as the link text.
  • What used to be "markup variables" are now "page variables". These are always specified using the {$variable} syntax, and can be used in markup and in $...Fmt strings. In addition, one can request a value for a specific page by placing the pagename in front of the variable, as in {pagename$variable}.
  • The scripts/rss.php script is now scripts/feeds.php, and is a complete redesign for web feed generation. The new version supports UTF-8 and other encodings, can generate Atom 1.0 (?action=atom), Dublin Core Metadata (?action=dc) output, and enclosures for podcasting. It also allows feeds to be generated from trails, groups, categories, and backlinks, and provides options (same as pagelists) for sorting and filtering the contents of the feed. Most sites can simply switch to using include_once("scripts/feeds.php"); instead of the previous rss.php include. The rss.php file has been removed from the distribution (but still works with PmWiki 2.1 for those sites that wish to continue using it).
  • InterMap entries can now come from a Site.InterMap page as well as the local/localmap.txt and local/farmmap.txt files. The format of these files has changed slightly, in that the InterMap name should now have a colon after it (previously the colon was omitted).
  • We can now provide better control of robot (webcrawler) interactions with a site to reduce server load and bandwidth. The $RobotPattern variable is used to detect robots based on the user-agent string, and any actions not listed in the $RobotActions array will return a 403 Forbidden response to robots. In addition, setting $EnableRobotCloakActions will eliminate any forbidden ?action= values from page links returned to robots, which will reduce bandwidth loads from robots even further (PITS:00563).
  • Non-existent page handling has been improved; whenever a browser hits a non-existent page, PmWiki returns the contents of Site.PageNotFound and a 404 ("Not Found") status code.
  • Page links that have "?action=" in their query arguments are now treated as "existing page" links even if the page does not exist.
  • The PmWiki default skin now adds rel='nofollow' to various action links.
  • Some of the CSS styles in the PmWiki default skin have been changed for better presentation.
  • The gui edit buttons have transparent (instead of white) borders so they integrate better into skins.
  • The $EnableIMSCaching variable is now much smarter, it can detect changes in local customization files as well as pages.
  • WikiStyles can now make percentage specifications by using "pct" to mean "%".
  • Class attributes in WikiStyle shortcuts are now cumulative, so that %class1 class2% results in class='class1 class2' instead of just class='class2' in the output.
  • A problem with the (:include PageName#from#:) markup not working has been fixed (PITS:00560).
  • Viewing a GroupHeader or GroupFooter page no longer displays the contents twice.
  • It's now easier to share pages among multiple sites (e.g., WikiFarms), see Cookbook:SharedPages (PITS:00459).
  • A problem with nested apostrophe markups has been fixed (PITS:00590).
  • PmWiki is now smarter about not surrounding block HTML tags with <p>...</p> tags.
  • If an [[#anchor]] is used more than once in a page, only the first generates an actual anchor (to preserve XHTML validity).
  • There are now (:if equal ...:) and (:if exists pagename:) conditional markups.
  • Compound conditional markup expressions are now possible -- e.g. (:if [ group PmWiki && ! name PmWiki ] :) .
  • Added an $InputValues array that can supply default values for certain form controls (PITS:00566).
  • The default setting of $UploadUrlFmt is now based on $PubDirUrl instead of $ScriptUrl.
  • The $text global variable has been removed (use $_GET['text'], $_POST['text'], or $_REQUEST['text']).
  • A possible problem with url-encoding of attachments with non-ASCII characters has been addressed (PITS:00588).
  • Page actions in non-existent pages no longer display with non-existent link decorations.
  • A README.txt file has been added, and several documentation files are now available through the docs/ directory.
  • PmWiki is no longer available through CVS on sourceforge.net. It is now available via SVN on pmwiki.org, at svn://pmwiki.org/pmwiki/tags/latest . For more details, see PmWiki:Subversion.
  • The $NewlineXXX variable (deprecated in 2.0.0) has been removed.
  • There is experimental support for server-side caching of pages that take a long time to render; this is currently an unsupported feature and may be removed in future releases.

Version 2.0.13 (2005-11-10)

This is a release containing minor bugfixes and improvements in preparation for the 2.1.beta series.

Wiki administrators should note that after this release PmWiki will default to having WikiWords disabled.
To make sure WikiWords are enabled, use $LinkWikiWords = 1; in the local/config.php file.

Version 2.0.12 (19-Oct-2005)

This release cleans up problems with page validation for page links containing query fragments and ampersands, changes PmWiki to use a PHP "return" statement instead of "exit", and fixes a warning in scripts/transition.php.

Version 2.0.11 (17-Oct-2005)

This release fixes a couple of important bugs and adds some new features to PmWiki.

Most importantly, this release fixes bug with ?action=attr affecting the page history.

For sites using LDAP authentication with authuser.php, PmWiki now provides $AuthLDAPBindDN and $AuthLDAPBindPassword variables to specify the binding to be used for searching. It also works around a PHP oddity that causes users to appear authenticated when an empty password is provided. Authuser.php also now handles straight md5 password encryptions (commonly used by MySQL databases).

The core now includes the (:linebreaks:) markup (from Cookbook:LineBreaks), which causes text on separate lines in the markup to appear as separate lines in the output (i.e., no auto-joining of one line to the previous one).

There have been some internal changes designed to provide better support for leading-whitespace rules (more details on this in a future release).

The core now provides an (:if date:) markup to display text only if the current day is within a range of supplied dates.

Version 2.0.10 (29-Sep-2005)
Version 2.0.9 (28-Sep-2005)

This release fixes an oversight in xlpage-utf-8.php that failed to uppercase ASCII letters when mb_strtoupper isn't present.

Version 2.0.8 (27-Sep-2005)

This release simply adds the capability to use quotes to enter pass phrases (passwords containing spaces) using ?action=attr, and fixes a bug with displaying the name instead of the title in the default print skin.

Version 2.0.7 (26-Sep-2005)

This version changes the xlpage-utf-8.php case conversion slightly to use a more direct conversion table, and completed the table for more characters in the utf-8 set.

This release also fixes the $VersionNum variable that was supposed to appear in 2.0.6.

An accesskey shortcut (ak_textedit) is being added to the edit form text area.

Lastly, this release adds a timelimit to the generation of .linkindex, to avoid long page times when generating the .linkindex.

Version 2.0.6 (16-Sep-2005)

In this release, we provide quite a few more updates for sites that want or need to use utf-8 encoding, fix a large number of utf-8 related bugs, introduce better handling of author cookies, and better support for keeping track of version releases.

The biggest change is to the xlpage-utf-8.php recipe, which has been substantially rewritten from the previous version. This new version of xlpage-utf-8.php no longer depends on the mb_strtoupper() function, which seems to be not available in many PHP installations. The new version of xlpage-utf-8.php uses mb_strtoupper() if it's available, but if not available then it manually performs case conversions from a Unicode table that is directly encoded in the script. At present this table only understands case conversions for Western European (Latin-1 or ISO-8859-1) and Cyrillic characters, we'll want to expand the table to support other language character sets as needed. Just contact me on the listserv if a particular character isn't yet supported.

In addition to the above, author names and cookies in utf-8 environments now work again, and link suffixes containing non-ASCII characters work again also.

The GUI button handling in IE has been greatly improved; text selection in IE now works as you would expect it to work when a gui button is pressed. Possibly still no hope for Mac Safari browsers, unfortunately...

A $CookiePrefix variable has been introduced; a wiki administrator can set $CookiePrefix to prevent PmWiki's cookies from interfering with cookies set from other applications under the same domain name.

Some XHTML validation issues surrounding the use of <script> tags have been fixed.

And lastly, for script and recipe authors, there is now a $VersionNum numeric value that makes it easier to determine if the currently running version of PmWiki is older or newer than a known release. $VersionNum is composed from the release number by padding the major and minor release numbers with zeroes to three digits, thus $VersionNum for this release (2.0.6) is 2000006, while a release like "2.1.24" will have $VersionNum set to 2001024.

As mentioned on the pmwiki-users mailing list, we are also now maintaining PITS entries for enhancements and changes to consider making in the core distribution. The list can be found at http://www.pmwiki.org/PITS/CoreCandidate, all are welcome to add comments and vote on the items under consideration.

Version 2.0.5 (9-Sep-2005)

This version adds an ?action=logout and cleans up a few things for internationalization (i18n) support.

We've also formally deprecated and eliminated the $Newline variable from the core code -- sites that absolutely need pages stored in the 1.x format can set $NewlineXXX. (Note that this version continues to be able to read pages from all previous PmWiki formats.)

Version 2.0.4 (8-Sep-2005)

One week after the release of 2.0.0 we're now up to 2.0.4, most changes have been minor bug fixes and improvements. This release provides a few improvements here and there.

The biggest change is the addition of a link indexing system for improving the speed of Categories and backlinks (using the (:pagelist link=...:) markup. The system uses a .linkindex file to keep track of all page links within the site, generating and updating the file as needed and using the file to avoid scanning pages that are known to not link to the target. The .linkindex file can be removed at anytime to cause it to be regenerated from scratch. Link indexing can be disabled by setting $EnableLinkIndex=0; in local/config.php.

The "change summary" associated with each edit is now limited to a maximum of 100 characters. A local customization can increase the size of the summary.

The tilde sequences used to generate signatures are now precise; only a sequence of exactly three or four tildes result in a signature. Longer sequences of tildes such as ~~~~~~~~ are left alone and not converted to signatures. (Generating a sequence of three or four tildes still requires creative use of escapes, as in [=~~=]~ and [=~~=]~~.)

A number of previously hard-coded prompts are now internationalized.

Many PHP E_NOTICE messages (displayed when error_reporting() is set to its maximum value) are now eliminated.

Version 2.0.3 (6-Sep-2005)

This is a minor update; it enhances the core to display change summaries in the page history, and makes additional attributes available to input forms in forms.php.

This release also fixes a bug in the setting of the $sub parameter for LDAP authentication, improves the setting of default values in scripts/urlapprove.php, and fixes the search pages and skin to use $SiteGroup instead of the hard-coded "Site" variable.

Lastly, this update changes the (:searchbox:) markup to be a bit smarter about form generation when $EnablePathInfo is set.

Version 2.0.2 (3-Sep-2005)
Version 2.0.1 (2-Sep-2005)

These versions correct some minor bugs in the loading and saving of pages, the MailPosts feature, and documentation.

Version 2.0.0 (1-Sep-2005)

At long last, I'm very pleased to announce the official release of PmWiki 2.0.0, now available at http://www.pmwiki.org/pub/pmwiki .

PmWiki 2.0 has been in development for well over a year, with more than eighty development and beta releases. In addition, the cookbook for 2.0 continues to expand, and currently has over 200 recipes and more on the way.

Not available at press time: For those who may be concerned that their "must-have feature" didn't make it into the 2.0.0 release, don't be. The 2.0.0 release isn't the end of development, but just the stable basis for the next set of features and improvements. Even if some features (e.g., discuss/comments pages, table of contents, authorization groups, faster backlinks/categories) aren't in the 2.0.0 release, I'm comfortable that we're at a point where these features can be added as 2.0.x releases with minimal impact to existing 2.0 sites. And if not, then we'll start on 2.1. :-)

Upgrading to 2.0.0: Many sites have been keeping relatively up-to-date with the latest 2.0 beta releases; for most of these sites upgrading to 2.0.0 is a minor upgrade (but see the notes below). For sites running beta versions of PmWiki older than 2.0.beta44, the upgrade may require a bit of extra work -- check the ReleaseNotes for more details. For sites running 1.x or 0.6 versions of PmWiki, see http://www.pmwiki.org/wiki/PmWiki/UpgradingFromPmWiki1 for tips on successfully migrating the site to PmWiki 2.0.0.

PmWiki 2.0.0 does have some changes over the previous (beta55) release:

  • Lots of changes and improvements to the documentation. Some documentation pages still need work, but the documentation is now sufficiently far along that I'm comfortable with making the release.
  • The release comes with a new default skin, matching the one currently available at http://www.pmwiki.org. For those sites that wish to retain the old skin, it is available from http://www.pmwiki.org/wiki/Cookbook/PmWikiV1Skin .
  • The storage format for pages in wiki.d/ has changed somewhat. PmWiki 2.0.0 can seamlessly read and interact with pages stored in previous formats, but any external scripts that may attempt to read wiki.d/ files directly will need to be adjusted to understand the new format. In particular, the $Newline variable has been deprecated in this release and is no longer used. (Sites that need file-level compatibility with previous versions can set a value for $Newline and PmWiki 2.0 will use that, however.)
  • Deleted pages now have a ",del-1234567890" suffix instead of just the timestamp.
  • The Site.SideBar is now unprotected by default. Other pages in the Site group continue to be protected against edits and require the admin password to unlock.
  • Several relatively small improvements and bug fixes -- see the ChangeLog for details.

What's next: Next I plan to work on getting internationalizations updated to 2.0.0 -- many i18n items "broke" in beta44 and need to be cleaned up. In conjunction with this will be page improvements and cleanups on pmwiki.org, as well as addressing outstanding PITS entries. After that will come more feature enhancements, including comments pages, section edits, and improved indexing/search capabilities.


Thank you: My sincere and humble thanks to everyone who has contributed so much of their time, ideas, opinions, writing, and code to PmWiki. I notice that the PmWiki:Contributors page is way out of date, so if you've helped at all with PmWiki core development, don't be shy or modest -- feel free to add yourself to the list and be associated with an outstanding group.

And, as always, comments, suggestions, questions, and bug reports can be reported to the mailing list or the PmWiki Issue Tracking System.

Thanks again,

Pm


Version 2.0.beta55 (25-Aug-2005)

I was really hoping that the next release would be 2.0.0, but it didn't work out that way. Really all that needs to be done now is to finish cleaning up the documentation.

This release has a number of important changes and bugfixes. First, the 'value=' wikistyle is working again, having been broken in an earlier release. WikiStyles now also accept dots and parens in values, so that things like "1.5em" and "rgb(255,255,255)" work. There's a new "%cframe%" wikistyle, which centers content in a 200-pixel frame (this can be adjusted with a "width=" parameter in the wikistyle).

The (:include:) directive now allows a list of pages to be searched for inclusion; the first existing page is selected. Thus the markup

    (:include Page1 Page2 Page3:)

includes the contents of the first available of Page1, Page2, or Page3.

The [@...@] markup is now the "preformatted text" markup. It can be used instead of the space [=...=] markup to generate blocks of preformatted and escaped text. It's also fairly smart about handling extra newlines inside the [@...@], so that there isn't a lot of unwanted vertical space displayed in the output.

And speaking of unwanted vertical space, PmWiki's handling of "blank lines" in the markup text has been changed somewhat. In previous versions of PmWiki, some directives (e.g., (:comment:), (:keyword:), (:noleft:), (:if:)) often resulted in blank lines in the markup text, which then generated vertical space on the output. In this release, only those lines that are blank in the original source markup (before processing) end up generating vertical space in the output. This ends up being much more natural for authors and allows cleaner markup sequences.

This change may have some ramifications for selected recipe authors. If a custom markup rule produces other wiki markup to be processed by PmWiki, and the output wiki markup contains blank lines that is intended to generate vertical space in the page output, then the custom markup rule needs to either generate '<:vspace>' tags for the blank lines or call the PVS() function to convert blank lines into vertical space tags. (For more details or assistance, query the mailing list.)

Some may have noticed that pmwiki.org now has a new skin; some version of this skin is expected to become the standard skin in the next release. The current 2.0.beta skin will be made available for download in the Cookbook for sites that want to continue using it.

Version 2.0.beta54 (1-Aug-2005)
Version 2.0.beta53 (30-Jul-2005)

This release restores ?action=search, to be able to perform searches in the context of a group or current page. It also modifies the (:searchbox:) directive to allow a "group=" option to limit searches to certain groups.

Version 2.0.beta52 (29-Jul-2005)

This release provides a number of minor bugfixes and introduces improvements to image handling. Most of the improvements for images are described on the PmWiki.Images page. Other changes are in the ChangeLog.

Version 2.0.beta51 (22-Jul-2005)

This release corrects a problem introduced by the "Save and Edit" capabilities introduced in 2.0.beta44 -- posts made with "Save and Edit" could bypass blocklists, urlapprovals, and simultaneous edits.

For administrators and recipe writers who have been working with posting capabilities, posting is now controlled by an $EnablePost variable. Setting $EnablePost to zero suppresses the actual post -- previously this was generally performed with unset($_POST['post']). If appropriate, a message for why the post was suppressed can usually be placed in the $MessagesFmt array.

Version 2.0.beta50 (20-Jul-2005)

This release makes two major improvements to the authorization semantics in PmWiki:

1. The $HandleAuth array can be used to set the authorization level required for executing a corresponding action. For example, setting $HandleAuth['diff'] to 'edit' means that edit authorizations are required to view the page history (?action=diff). Similarly, setting $HandleAuth['source'] to 'admin' means that only the admin would be able to use ?action=source.

2. Passwords can now "cascade" -- that is, if a page sets a 'read' password but not an 'edit' password, then the read password is also used as the edit password. Similarly, if a page sets an 'edit' password but not an 'attr' password, then the edit password is also used as the attr password.

This prevents situations where authors set an edit password on a page but don't set a corresponding attr password.

This does not change PmWiki's other passwording characteristics -- i.e., page passwords still override group passwords, and group passwords still override site passwords. Password cascading is only used where there's no page, group, or site password set for a given authorization level.

Version 2.0.beta49 (19-Jul-2005)

This release adds a Content-Disposition: header for sites that have direct downloads disabled (automatically fills in a browser's filename for such downloads). It also fixes some issues with \\ markup at the ends of lines.

Version 2.0.beta48 (13-Jul-2005)
Version 2.0.beta47 (12-Jul-2005)
Version 2.0.beta46 (11-Jul-2005)
Version 2.0.beta45 (10-Jul-2005)
Version 2.0.beta44 (10-Jul-2005)

This release has a number of major changes, and is hopefully the last such "major" release before 2.0.0.

Included with this release is a special transition.php script that reconfigures PmWiki as needed to cause it to work as it did in previous releases. In the release notes below any changes that are handled by the transition script are marked by [ ]. This transition script is automatically loaded by default so the site admin doesn't need to do anything to use it.

Eventually the transition script will also provide diagnostic options to inform site admins of places where they may be relying on outdated or deprecated features, and how they can change their settings to be up-to-date.

PmWiki now sets CSS stylings so that all images within a page are displayed without a border (HTML's default is a 1-pixel border). To restore the behavior of previous versions, add the following to local/config.php:

    $HTMLStylesFmt['img'] = ' img { border:1px solid; } ';
    $ImgTagFmt="<img src='\$LinkUrl' style='border:0px;' alt='\$LinkAlt' />";

With this release we are officially initiating use of the "Site" group discussed on the pmwiki-users mailing list. The Site group is intended to hold a variety of utility and configuration pages used by PmWiki, and many of PmWiki's pages have moved from the "Main" group into this new location. More on this in a bit.

The major internal change is that this release provides support for input forms. Notably, the "Edit Page" form layout can now be specified using wiki markup in the Site.EditForm page. ( [ ] However, PmWiki still honors the $PageEditFmt variable for those sites or skins that may have customized edit forms.)

The edit form now includes a "change summary" line where authors can summarize the edits. The edit form can also contain a "Save and edit" button to save changes but continue editing, and a "Cancel" button for abandoning changes.

The $EditMessageFmt variable for displaying messages to authors is now the $MessagesFmt array, which can be displayed using the (:messages:) markup. [ ] The transition script takes care of moving messages between $EditMessageFmt and $MessagesFmt as need to preserve correct operation.

A number of traditional locations for pages have now been moved into the Site group, many of which are handled by the transition script:

  • The new location for the AllRecentChanges page is Site.AllRecentChanges. [ ] However, if Main.AllRecentChanges exists then it will continue to be updated also. Administrators may wish to move Main.AllRecentChanges to Site.AllRecentChanges and/or remove Main.AllRecentChanges entirely.
  • The search results page is now Site.Search instead of Main.SearchWiki. Main.SearchWiki will be removed entirely in a future release. [ ] The transition script takes care of mapping some instances of Main.SearchWiki in links to Site.Search.
  • Approved urls are now stored in Site.ApprovedUrls . [ ] However, if Main.ApprovedUrls exists it is used and updated as appropriate.
  • Main.SideBar is now Site.SideBar. Unfortunately, it's very difficult to manage this particular change among all possible skin combinations, so it's up to the admin to correctly move existing sidebar pages into the appropriate group, or to update the skin template accordingly.
  • PmWiki.EditQuickReference and PmWiki.UploadQuickReference are now stored in the Site group.
  • PmWiki.WikiHelp is being deprecated and will be removed from a future release.

The $PagePreviewFmt variable no longer exists in standard PmWiki (it's now handled by Site.EditForm). [ ] However, to preserve backwards compatibility it is loaded by the transition script in certain situations.

The $PageName substitution (deprecated in 2.0.devel14) is now gone. Use $FullName instead.

The GUI buttons can now have accesskeys associated with them.

GUI buttons are now displayed via a (:e_guibuttons:) directive in Site.EditForm, instead of being attached to $EditMessagesFmt.

This release now provides the ability for user and browser-specific preferences and customizations, including accesskeys and form element sizes. More details about this will be forthcoming in documentation.

The release adds standard (:noleft:) and (:noright:) directives for suppressing the display of the left and right sidebars (depending on skin template).

Version 2.0.beta43 (8-Jul-2005)

This release adds the long awaited (:div:) markup. The format of the markup is

    
    (:div:)
    ...
    (:divend:)
    

Attributes (e.g., id='name' and class='class' can be supplied to the (:div:) directive. (:div:) lives in the same markup layer as advanced tables (:table:), so divs and tables do not nest, and any div or advanced table directive ends any previous (:div:). (We may change this in a future release; for now we'll go with the non-nesting version.)

The release also adds a div shortcut, any line beginning with >><< marks a new div section. In addition, wikistyle specifications can go between the >> and <<, thus >>bgcolor=#ffffdd<< will create a division with a light yellow background. Similarly, one can do things like >>id=foo<<, >>class=bar<<, and even make use of author-defined wikistyles such as >>center<< or >>Don<<.

Lastly, the wikistyle code now supports %id=name%, which allows an HTML id='name' attribute to be added to the affected text.

Version 2.0.beta42 (7-Jul-2005)

This minor release adds the (:if attachments:) conditional markup, to include/exclude markup based on the (non)existence of attachments to the current page.

Version 2.0.beta41 (7-Jul-2005)

This is a minor release with some small bugfixes to uploads, adding the ability to set the item number for ordered lists with %item value=nn%, and enabling nested Keep()s for module writers.

Version 2.0.beta40 (22-Jun-2005)

This very minor release simply updates the authuser.php script to support Apache MD5 encryption in .htpasswd files.

Version 2.0.beta39 (20-Jun-2005)

This release primarily fixes some bugs with wikistyles and their interactions with block structures such as tables and headings. In addition, the release fixes some nagging errors with opening directories in PITS and other recipes.

This release also adds definition lists to the available syntaxes for building WikiTrails.

Finally, this release adds scripts/authuser.php, which is a preliminary script for user-authentication based on .htpasswd (and similarly formatted) files.

Version 2.0.beta38 (14-Jun-2005)

This version performs a minor bug fix to the ListPages() function for those sites that are storing pages in per-group subdirectories.

Version 2.0.beta37 (26-May-2005)

This version performs some minor bug fixes and improvements:

  • Changed the location in which $SearchIncl, $SearchExcl, and $SearchGroup are set
  • Fixed bug in setting of $SearchExcl
  • Added filesize check after new page is written to disk but before replacing existing page
  • Added $LinkUrl and $LinkAlt to urlapprove.php

Version 2.0.beta36 (30-Apr-2005)

This release fixes a rather large bug with excluded terms in the pagelist code, and a very minor bug with generating cells if there are spaces after the final '||' in a simple table.

Version 2.0.beta35 (24-Apr-2005)

This release fixes some bugs in the new pagelist code.

Version 2.0.beta34 (23-Apr-2005)

Version 2.0.beta33 (22-Apr-2005)

This version introduce a major redesign of working and speed of scripts/pagelist.php, which defines (:pagelist:) and (:searchresults:) markups. This version now have a parameter link= to display pages with links to target page (i.e. "backlinks"). There is also "order=" and "count=" parameters which can be used for sorting listed pages and limit display length.

However, the changes also mean that it's possible that any local customizations or cookbook recipes that depended on the previous pagelist code will no longer work, so be careful when upgrading.

This release also optimizes the rendering of page links and fixes a performance bug in the FmtPageName() function. These changes have been observed to improve page rendering times by up to 40%.

What remains before the 2.0 official release: redesign of the edit page form, addition of a "comments" feature, and fixing PmWiki documentation.

Lastly, the trailing ?> sequences have been removed from all scripts to simplify installations on VMS and other environments that have trouble with newlines after the closing ?>.

Version 2.0.beta32 (17-Apr-2005)

Version beta32 adds the $RCLinesMax variable, which limits the maximum number of lines that are saved in RecentChanges files. The default is set to zero, meaning "no limit".

Version 2.0.beta31 (15-Apr-2005)

This release adds the ability to store and serve attachments (uploads) from directories that is not directly accessible to the webserver. The "download" action (?action=download) tells PmWiki to retrieve an attachment associated with the current page. This can be used for protecting attachments via a page's passwords, or for working around webservers that cannot access files in the PmWiki-created uploads/ directories.

Setting $EnableDirectDownload=0; tells PmWiki to generate links to ?action=download to retrieve attachments instead of accessing the attachments directly through the webserver. Note that this setting by itself may not be enough to protect uploads; one may need also need to to configure the webserver or uploads/ directory to block direct requests to the webserver for attachment files.

This release also adds $EnableFixedUrlRedirect. When PmWiki receives a url with a "partial pagename" (such as the name of a WikiGroup), it first determines the correct "full name" for the page. Normally PmWiki then issues a "redirect" to the browser requesting the browser to reload the page with its full, "official" url, but setting $EnableFixedUrlRedirect to zero will suppress the reload so that the determined page is sent immediately (and keeps the same url used to access the page).

Version 2.0.beta30 (14-Apr-2005)

This release works around some problems with PHP sessions resulting in deadlocked web processes. The changes to the authorization code in 2.0.beta29 greatly increased the likelihood of such deadlocks, so all sites running 2.0.beta29 are encouraged to upgrade to this one.

This release also changes the wikiword-handling functions so that wikiwords are no longer spaced if $LinkWikiWords is disabled.

Finally, this release adds $PageTextStartFmt and $PageTextEndFmt to allow local customization of the container surrounding <!--PageText--> in skin templates.

Version 2.0.beta29 (11-Apr-2005)

This release incorporates some significant changes in the authorization and page storage code, so production-level sites might want to wait for any new bugs to found and fixed before upgrading. Or, go ahead and upgrade but be prepared to revert back to beta28 or earlier if you start to notice problems.

However, I do need lots of testers for the new code in this release, of which there's a fair bit. Thus, I'd greatly appreciate any help people can provide with testing the new system and suggesting improvements. I'm particularly looking for suggestions about how the interfaces can be made easier to understand.

The Page Attributes form (reached via ?action=attr and used to set passwords) has been improved so that it's now possible to see which passwords have been set, and if those passwords are coming from the group or site defaults. For an example, see http://www.pmwiki.org/wiki/Test/AttrExample?action=attr . These prompts are not yet internationalized -- I want to get the english interface finalized first and then we'll make the i18n strings for it.

Multiple passwords (separated by spaces) can now be set on pages and groups, thus entering "one two" for an edit password will means that either "one" or "two" will be accepted. Because of this, passwords cannot contain spaces (I hope this won't be a major loss -- let me know if it will).

The password request field now appears within a normal skin layout (i.e., with header, sidebar, footer); previously requests for passwords were undecorated forms that appeared alone in the browser window.

There is an (:if auth ...:) conditional markup available for processing depending on the current authorizations in effect. For example, one can create a bullet list with

    
    (:if auth read:)* [[View page -> {$Name}?action=browse]]
    (:if auth edit:)* [[Edit page -> {$Name}?action=edit]]
    (:if auth upload:)* [[Attachments -> {$Name}?action=upload]]
    (:if auth attr:)* [[Page Attributes -> {$Name}?action=attr]]
    (:if auth admin:)* You're logged in as admin
    (:ifend:)
    

and only those items corresponding to the user's current authorizations will appear. This should be very useful in creating action buttons.

Assuming there's already some mechanism in place for identifying and authenticating someone, pages can specify a password field of "id:xyz", which means to allow only user "xyz" the specified access. For example, specifying an edit password of "id:alice" means that only user "alice" (and the admin) is allowed to edit the page. Multiple ids can be specified as either "id:alice,bob,carol" or "id:alice id:bob id:carol". The special value "id:*" is used to mean any authenticated user, and users can be excluded via the minus sign, as in "id:-eve,*".

User-based authentication can completely coexist and mix freely with password-based authentication, thus an edit password of "id:alice glorp" will allow Alice and anyone who knows the password "glorp" to edit the page.

2.0.beta29 supports only REMOTE_USER authentication; future releases will add other authentication mechanism.

Version 2.0.beta28 (27-Mar-2005)

This release makes some substantial improvements to the attachments/uploads feature in PmWiki. The specific enhancements include:

  • The Attach: markup can now be used to reference attachments on other pages; the syntax is Attach:pagename/file.ext. The "pagename" can refer to pages in other groups.
  • Attachments automatically have the file extension (if any) converted to lowercase.
  • The (:attachlist:) markup now accepts parameters; ext= can be used to limit the list of attachments to specific extensions, and one can supply a page's name to obtain a list of attachments for that page (e.g., (:attachlist Group.PageName:).

Version 2.0.beta27 (26-Mar-2005)

This release makes a number of minor changes and bugfixes. The more significant changes are listed below.

  • The localmap.txt and farmmap.txt files can now contain $-variable substitutions (same as any variables available through FmtPageName).
  • Most built-in directives are now case insensitive.
  • The (:markup:) directive now has a (:markup:) ... (:markupend:) version. The previous (:markup:) [=...=] syntax is still supported, but may change in future releases.
  • A bug was fixed with preformatted text eating the leading whitespace character.
  • Added the missing {$FullName} markup.
  • Fixed a bug in the handling of $MetaRobots.

Version 2.0.beta26 (5-Mar-2005)

This release adds support for edit page templates; i.e., site administrators can specify the default text for new pages. More details are available at Cookbook:EditTemplates.

Version 2.0.beta25 (2-Mar-2005)

Version 2.0.beta24 (1-Mar-2005)

This release contains an important correction to the processing of QUERY_STRING parameters, and changes to the way that PageNotFound messages are generated. These are needed to prevent webcrawlers (notably the one used by inktomi) from generating long sequences of links to non-existent pages.

This release also adds a ParseArgs() function to make it easier for cookbook recipes and other components to parse directive arguments. Documentation for the function will be forthcoming at Cookbook:ParseArgs.

List and heading markups have been changed to consume any single space character that follows the list or heading marker.

A $EnablePostAttrClearSession switch has been added to control whether or not changing a page's attributes causes any existing passwords to be forgotten. The default is that changing attributes forgets any passwords entered; this can be changed by setting $EnablePostAttrClearSession to zero.

Version 2.0.beta23 (24-Feb-2005)

This release adds a couple of improvements.

First, the passwording system has been improved slightly to hopefully make passwords a little less confusing (although more improvements are coming). Previously PmWiki would remember all passwords previously entered during the current browser session. In this release, changing a page's password causes PmWiki to "forget" all of the previously entered passwords, thus eliminating the confusion that arose when a page would appear unprotected when in fact a previously entered password was authorizing access.

This release also adds as $EnablePageListProtect option. When set, the (:pagelist:) and (:searchresults:) directives will exclude pages for which the browser does not have read authorization.

Version 2.0.beta22 (23-Feb-2005)

This release makes some feature enhancements and some bugfixes.

The skins loading code has undergone some enhancements and substantial rewriting, but it should have no negative impacts on existing skins. The $BasicLayoutVars variable has been deprecated and is no longer needed. This version introduces a SetTmplDisplay() function that makes it easier for local customizations to disable sections of a skin template.

The password prompt form has been customized so that the cursor is automatically placed in the form when the page is loaded.

The ?action=source action has been fixed for pages with characters outside of ASCII.

The graphical button bar can now be used for buttons with arbitrary HTML elements (e.g., "save" and "preview" buttons).

Other changes are noted in the ChangeLog.

Version 2.0.beta21 (13-Feb-2005)

This version has a number of changes. The major change that could (but shouldn't) affect some sites is that PmWiki has changed its default umask from 000 to 002, which will improve the default permissions for files and directories created by PmWiki for some sites, while (hopefully) not affecting others.

Many of you probably don't know (or care) what a umask is. If everything still works after upgrading to this version, you can continue to not know or care. However, if after upgrading to this version you start seeing file permission errors where you weren't seeing them before, try adding the line

    umask(0);

to your local/config.php and things should work again. (And be sure to report that you ran into trouble so we can investigate and improve things for the next version!)

This release also changes the <title> tag generated by ?action=rss to properly honor the (:title:) setting on various pages.

Finally, the release fixes some minor bugs in the HTML generation for tables, corrects some bugs with settings for $AuthorPage and $AuthorLink, and makes some cookbook-related additions to the v1 conversion script.

For more details, see the ChangeLog.

Version 2.0.beta20 (30-Jan-2005)

This version has a number of relatively minor changes.

First, the $UrlLinkFmt variable has been modified so that links to external urls automatically have a rel='nofollow' attribute added to them, to help combat wiki spam as described in http://www.google.com/googleblog/2005/01/preventing-comment-spam.html. Site administrators can customize $UrlLinkFmt and $UnapprovedLinkFmt to supply or omit rel='nofollow' as appropriate.

The algorithm for creating page names from [[free links]] has been modified slightly. First, letters following a hyphen are no longer automatically capitalized, thus [[page-link]] refers to a page named "Page-link" and not "Page-Link". This is more compatible with version 1's naming syntax. Also, single quotes don't promote the following letter to uppercase, thus [[John's page]] now links to JohnsPage and not JohnSPage.

Sites that want to keep PmWiki 2's prior behavior can do so with the following:

    
    $PageNameChars = '-[:alnum:]';
    $MakePageNamePatterns = array(
      "/[^$PageNameChars] /" => ' ',
      "/(\\b\\w)/e" => "strtoupper('$1')",
      "/ /" => '');
    

The localmap.txt InterMap file can now contain comments (denoted by leading '#' in the file).

Headings (!! markup) can now have block wikistyles.

More information is available in the PmWiki.ChangeLog.

Version 2.0.beta19 (17-Jan-2005)

PmWiki uses PHP's sessions for tracking passwords and page authorizations; however, if a session times out (or is otherwise lost) while an author is in the middle of editing a password-protected page, the author's edits may be lost when re-prompted for the password. This release fixes this problem by preserving the edit text and other posted form variables when prompting for a password.

Version 2.0.beta18 (17-Jan-2005)

This release makes improvements to the gui buttons, fixes some bugs, and minor other improvements and changes.

Alternate text is now valid inside of WikiTrails; i.e., one can use <<|[[TrailPage | alternate text]]|>> to change the text of the link to the trailpage.

The GUI button module has a number of changes.

  • New images are provided for lists, indentation, headings, and tables, and the sample-config.php file has examples for configuring these additional buttons into the bar.
  • The "Heading 3" button has now been changed into separate "Heading" and optional "Subheading" buttons.
  • The "Attach:" (paperclip) button appears in the bar only if uploads are enabled for that page.
  • For browsers that support it, clicking one of the buttons that adds text will leave the text highlighted (to make it easier to replace the text).

This release also eliminates the <p>...</p> tags that were being generated around markup lines that contained other HTML block markups (e.g., search results, page listings, forms). As a result, these pages are now valid HTML and pass the W3C validator.

$HTMLHeaderFmt has been changed so that skin designers can completely turn off the inline-styles mechanism used by PmWiki and other cookbook modules. To disable the inline styles, use $HTMLHeaderFmt['styles'] = ''; .

Finally, this release fixes a call to setlocale() which was supposed to only return the current locale but instead was causing the locale to change.

Version 2.0.beta17 (12-Jan-2005)

This release simply makes some minor bug fixes to wikistyles (colors set in wikistyles extend to anchor tags), arrays of default passwords, and advanced table handling.

Version 2.0.beta16 (11-Jan-2005)

Version 2.0.beta15 (10-Jan-2005)

The major feature of this release is the addition of the graphical buttons in the edit page. By default this feature is disabled -- to enable it, use the following in config.php.

    $EnableGUIButtons = 1;

If your site customizes the $PageEditFmt variable, then note that the buttons are placed at the end of the $EditMessageFmt and that the <textarea> needs to have id='edit' in order for the buttons to work.

The rss.php script has also been improved -- it now automatically translates named character entities (from HTML 4) into their numeric equivalents. This eliminates a lot of feed validation errors and problems in specific RSS feed consumers.

This release adds a $Titlespaced variable and {$Titlespaced} markup; $Titlespaced is replaced by either a page's title (if defined by the (:title:) directive) or by the spaced version of the page's name.

Finally, a number of WikiStyles bugs have been fixed.

Version 2.0.beta14 (28-Dec-2004)

This release introduces a number of relatively minor optimizations and improvements, summarized below. If you don't understand what any of these mean, they probably don't affect you. :-)

  • PmWiki's <img ...> tags now use style='border:0px;' instead of border='0'.
  • PrintFmt() now calls Lock(0) to release any locks prior to sending output to the browser. This is important because some webservers (notably Apache) sometimes get stuck when they're unable to send output to the browser, and thus inadvertently lock others from being able to edit/post pages.
  • $PageEditFmt now includes id='text' to make for easier styling/referencing.
  • MarkupToHTML()'s "posteval" code has been changed considerably.
  • PageExists() now caches results of checking for page existence.
  • Page urls are now automatically url-encoded as needed.
  • Many of PmWiki's internal regex patterns have been optimized to (hopefully) improve matching speed.
  • Comparisons to substr() have been replaced with more efficient comparison functions.

Version 2.0.beta13 (22-Dec-2004)

This release fixes a bug introduced in 2.0.beta7 that prevented the refcount.php (for ?action=refcount) from generating links correctly. It also cleans up the handling of wikistyles and %-in-urls (which is what 2.0.beta7 was supposed to fix).

In general, all sites using the 2.0.betaXX series are recommended to upgrade to this latest release.

Version 2.0.beta12 (21-Dec-2004)

This release adds a number of <div> tags and identifiers around the various forms that PmWiki produces (e.g., uploads, search results, attribute pages, etc.). This makes such forms easier to style in CSS.

In addition, this release adds some functionality to the urlapprove.php script to limit the number of unapproved urls that can be saved in a page (helps to combat wikispam).

Finally the release adds the (:description:) markup for generating <meta name='description' ... /> tags in the output. (:description:) may also get used for other features later on (e.g., excerpts in search results, etc.).

Version 2.0.beta11 (19-Dec-2004)

This release primarily cleans up a number of items in the handling of uploads:

  1. A new $LinkUpload variable has been defined for $...Fmt strings -- it contains the URL of the upload page for the current attachment
  2. (:attachlist:) automatically adds "replace-attachment" links (denoted by triangles) to the items in the list
  3. After performing an upload, the "upload name" field is automatically cleared
  4. Fixed error message when upload exceeds maximum allowed by PHP

This release also changes the StopWatch() function (used internally for benchmarking/timing PmWiki performance) to only have an effect when $EnableStopWatch is set to 1 (wall clock timings only) or 2 (wall clock and user-process timings).

Version 2.0.beta10 (14-Dec-2004)

This release makes some substantial improvements in the installation procedure. First, the installation steps have been simplified, and PmWiki provides accurate instructions when it encounters a PHP "safe_mode" environment.

The release also provides better handling of the '.flock' file -- if PmWiki discovers it cannot open an existing .flock file for writing, it removes the file and tries again rather than complaining about it. This makes the system more robust when page directories are going through backup restore.

Version 2.0.beta9 (14-Dec-2004)

This release provides some very minor bugfixes to the [[target |#]] markup, to the appearance of $...variables in documentation, and extends uploads.php to be able to work better with url rewriting.

Version 2.0.beta8 (13-Dec-2004)

This release makes a number of reasonably significant changes. First and foremost, it changes the ?pagename= uri syntax to be ?n=, and installation now defaults to $EnablePathInfo = 0; to make better compatibility.

Sites which wish to continue using the .../Main/HomePage form of uri instead of ?n=Main.HomePage should set $EnablePathInfo = 1 in config.php.

This release also fixes a probable bug in the handling of author names which was causing spaces to be incorrectly removed.

2.0.beta8 includes features for advanced CSS styling of tables via the $TableRowAttrFmt and $TableCellAttrFmt variables, more description will be forthcoming in a Cookbook recipe.

Also, this release includes vastly improved support for UTF-8 sites, including the ability to have UTF-8 characters in pagenames and [[utf-8 links]]. We're still working out the details to be able to support UTF-8 wikiwords -- PHP's functions don't provide good support for this. See scripts/xlpage-utf-8.php for more information on UTF-8.

Finally, the Q: and A: markups are back, and a few other minor bug fixes and documentation improvements have been included.

Version 2.0.beta7 (8-Dec-2004)

This release has a number of improvements and changes to it. First, this release provides a scripts/xlpage-utf-8.php file, which adapts PmWiki to be able to work somewhat with utf-8 characters in pagenames. Since PHP's preg_* functions seem to be unable to detect UTF-8 alphanumeric characters, the trade-off at the moment is that WikiWord links are limited to the ASCII character set. We're working on ways to get around this restriction, however.

The xlpage-utf-8.php script can be automatically loaded by any XLPage translation that specifies 'xlpage-i18n' => 'utf-8'.

This release also:

  • fixes up the .htaccess files that are placed in local/ and wiki.d/
  • changes the default textarea size for the pmwiki skin,
  • restores the link/citation markup ([[target |#]])
  • fixes the default value of $DefaultPageTextFmt (note this may change again)
  • automatically converts instances of $Newline in posted text

Version 2.0.beta6 (5-Dec-2004)

This release contains a number of relatively minor bugfixes (see the ChangeLog), and it also restores the $WikiWordCount functionality from PmWiki 1 in which the wiki administrator can limit the number of conversions for each WikiWord.

The sample-config.php file has been updated with more comments and suggestions for customizations.

Finally, this release increases the default value of $MaxIncludes to 50 (and provides better documentation of the $MaxIncludes variable).

Version 2.0.beta5 (1-Dec-2004)

Version 2.0.beta4 (1-Dec-2004)

These releases fix a number of bugs introduced by the changes in 2.0.beta3. Users of 2.0.beta3 are encouraged to upgrade directly to this release.

Version 2.0.beta3 (30-Nov-2004)

This release provides a simple version of the (:attachlist:) markup (different sorting orders are not available yet as the syntax is likely to change), as well as fixes the PmWiki.EditQuickReference and PmWiki.UploadQuickReference pages. It also provides default pages to lock passwords in the Main and PmWiki groups and adds uppercase versions for ".GIF", ".JPG", and ".PNG" files.

Internally, this release also changes the edit page sequence to use the $_POST autoglobal instead of $_REQUEST (i.e., posting edits is only allowed via method='post' and not via query string parameters).

Version 2.0.beta2

This release fixes the bug that caused $PageTemplateFmt to no longer work in pmwiki-2.0.beta1.

Version 2.0.beta1

This release marks PmWiki 2.0 as entering "beta" status, as it finally begins moving towards official release. The major change for this release is in the skins code -- previous versions of PmWiki used $PageTemplateFmt to specify the location of the template file to be used; newer versions now use the $Skin variable to specify the location of the skins directory (in pub/skins/) that contains the skin template file, php configuration script, and other files.

In general, if you previously had $PageTemplateFmt set to "pub/skins/myskin/myskin.tmpl", then you now simply set $Skin='myskin'; to get things to work. See PmWiki.LayoutBasics for more details.

Version 2.0.devel releases

These are the release notes for the development releases of PmWiki 2.0.

First, this is definitely still in the development stages, so many things are likely to change between now and the official releases.

Second, at present there's not a good way to upgrade from PmWiki 1.0 to PmWiki 2.0, although upgrade support is expected to arrive in future (development) releases. So, you can use this version just to see the new developments and gain some experience, but migrating from 1.0 to this version is still likely to be a bit of a chore.

Bugs and other requests can be reported to the PmWiki Issue Tracking System at http://www.pmwiki.org/wiki/PITS/PITS. Any help in testing, development, and/or documentation is greatly appreciated.


This page may have a more recent version on pmwiki.org: PmWiki:ReleaseNotes, and a talk page: PmWiki:ReleaseNotes-Talk.