Add Fieldtype::___cloneField method to the Fieldtype interface so that Fieldtypes can get involved in how fields using them are cloned. This was prompted by a user discovering that FieldtypeRepeater doesn't clone well -- so that one now throws an exception to prevent the clone (though will work on making it cloneable in the future).
Fixes to PW's indexing and handling of pages_parents. Huge thanks to @niklaka for tracking down the problem here and helping debug it. This fix greatly improves the speed of pages saved on larger sites, improves the performance of Page::find() or has_parent searches, and fixes some errors that were occurring when relying on has_parent with deeply nested pages.
Update to ensure $config->urls->admin is available at module init() time. Thanks to @somartist for finding the issue. Note that this update includes a modification to /index.php, which you should replace with the new one -- though no immediate concerns if you don't get to it (just a little unnecessary overhead).
Update version number to 2.2.3.
Correction to the Pages::_path() function.
Fix install error message that appears when entering usernames with uppercase characters (issue #113). Now it just accepts it and makes it lowercase.
Make all ProcessField::buildEditForm functions hookable. @oliverwehn
Fix issue with WireArray find(selector) only recognizing the fist expression. This also fixes the same issue with the filter() and not() functions in WireArray and related types like PageArray.
Add support for $input->var where var can be from get/post/cookie, not unlike $_REQUEST in PHP. For existing installations, this is not enabled by default. To enable, edit your /site/config.php and add $config->wireInputOrder = 'get post'; (or any combination/order of "get post cookie whitelist"). The default setting for new PW installations is 'get post', as this has been added to the default /site/config.php. This was added to make it consistent with the documentation and suggested by Daniel Ilkovich with a GitHub pull request. I took a little bit different direction, making it configurable, but the result is the same. Note that it's still preferable to use the actual $input->get or $input->post so that you know where you are grabbing data from.
Add selector support for page reference subfields. Example: $page->find("template=building, architects.title*=John"); would find all buildings that had an architect with "John" in their name.
Implement the != operator for text/textarea Fieldtypes, plus add starts/ends using only LIKE operators: key%^=value for "starts with", or key%$=value for "ends with". These two differ from ^= and $= in that they only use LIKE and no fulltext indexes, making them slower, but able to match some instances that ^= and $= may not, due to stopwords, ft_min_word_len, etc.
Fix for Selector class that goes along with the update to the WireArray class
PageList template class added so that admin themes or modules can manipulate the look of pages in the PageList based on the template the page is using. The class name format is: "PageListTemplate_[template name]".
Fix issue with template-based sortfield settings sometimes not taking effect.
Change PW so that it only creates /assets/files/[id]/ dirs for pages that need them. Also fix a bug that was preventing some deleted page file dirs from getting removed.
Update copyright file to include timepicker addon. Also, just testing to see if I can push commits from here.
Make the markup and classes in InputfieldWrapper API configurable.
Fix issue where some fieldsets would include fields they weren't supposed to.
Used a more unique name for the $page->name field in ProcessPageEdit/ProcessPageAdd, so that it could never be confused with an Inputfield name attribute.
Make it possible for fieldset fields to use column widths in the Page editor.