Extension:EditSubpages

The EditSubpages extension restricts anonymous users from editing most pages. Sysops (or whatever group has the 'editinterface' permission) can add pages to "MediaWiki:Unlockedpages" to allow anonymous editing.

Usage
Add pages to be unlocked to MediaWiki:Unlockedpages in a bulleted list (they may be links). Any line that isn't part of a bulleted list is treated as a comment. Example:

This is a comment too :). Unlike page 1, which has both the subject and talk page unlocked, page 3 only has an unlocked talk page.
 * Unlocked page 1
 * 1) Comment. Note that declaring the namespace matters
 * Help:Unlocked page 2
 * Talk:Unlocked page 3
 * Unlocked page 4/subpage
 * 1) this will only unlock subpages of this subpage, so page 4 itself
 * 2) uneditable by anons.

This will allow anonymous users (or any user lacking the 'edit' permission) to edit that page and all subpages of it (e.g. Unlocked page 1, Unlocked page 1/Subpage, etc.), as well as their respective talk pages. If you declare a talk page, it will not make the respective subject page editable. To prevent talk pages from being edited but allow the subject pages to be, simply protect the talk page.

This will also allow the anonymous users to create new pages that are sub-pages of the unlocked page.

Extended syntax
The extended syntax (also known as flags), allows you to control exactly how each unlocked page works. The way of utilizing this is as follows:


 * Unlocked page|flags|alternate text (optional, useful if you are using links)
 * ex:
 * +b-t|unlocks base pages but does not unlock talk pages
 * HELLO|+in-c
 * 1) The above unlocks HELLO, Hello, Help:Hello, User:HEllO, etc., but does not allow creation of new pages

Caveats

 * This extension goes down the list in order and stops when it reaches the first match. As such, it is impossible to have multiple conditions for a single page/group of pages.
 * The +r flag has an implicit ^ and $ before and after the fragment, respectively. This means if you want it only to match part of a title, you will need to use ".*title.*" and not just "title." (Former parses to /^.*title.*$/, latter to /^title$/)
 * The extension's require_once either needs to be after you configure $wgGroupPermissions on your LocalSettings.php file, or you need to make sure that '*' is allowed to 'edit', 'createpage', and 'createtalk', or the extension will not work as expected.
 * The +u flag applies to all logged-in users, no matter what groups they are in (aka sysops are not exempt). As such, it is possible to lock yourself out of the list of unlocked pages until you disable the extension.

Configuration
As of version 3.1, it is possible to modify what the default flags are via $wgEditSubpagesDefaultFlags. This can either be a string in the format +blah-blah, like MediaWiki:Unlockedpages, or in an array format where flags are the keys and the value is true if it should be set by default, and false if it should be unset by default.

Changelog

 * Version 3.5 : Convert to use extension registration. Now requires MediaWiki 1.29+
 * Version 3.4 : Fix fatal error in certain page/flag combinations. Expand functionality of the wildcard flag (+w) to include character classes and negated character classes.
 * Version 3.3 : Move to new JSON i18n format. Now requires PHP 5.3+.
 * Version 3.2 : Fix EditSubpages so that it actually successfully unlocks pages.
 * Version 3.1 : Made flags parsing more flexible, so you can have stuff like "-blah" or "+a+s+d+f", fixed error when trying to view special pages on certain versions of MediaWiki. Added $wgEditSubpagesDefaultFlags variable.
 * Version 3.0 : Added flags feature for finer control over the behavior of unlocked pages.
 * Version 2.2 : Fixed bug that did not allow anonymous users to save unlocked pages.
 * Version 2.1 : Fixed author field in the extension credits.
 * Version 2.0 : Switched to using userCan hook. Fixed namespace issue. Fixed incompatibility with Extension:ConfirmAccount. Now works for versions of MediaWiki 1.6.0+. This will probably be the final release of this extension unless more major bugs are discovered.
 * Version 1.2.2 : Fixed major bug that did not unlock Talk pages when they were explicitly declared. If you have any earlier version, please upgrade to this version for correct functionality!
 * Version 1.2.1 : Fixed major bug that prevented any pages from being unlocked. If you have version 1.2, upgrade to this version!
 * Version 1.2 : Used strpos instead of regex for faster processing and less memory usage. Bugfixes. Moved into Subversion
 * Version 1.1 : Added ability to use comments and talk pages are now unlocked as well.
 * Version 1.0 : Initial creation