- added $popupClass to avoid duplication, getting basedataclass for existing children in DetailForm() (in case we're dealing with different subclasses)
- fixed getParentIdName() call in DetailForm() - paramter-order was wrong
- better checking in saveComplexTableField() to avoid PHP-notice
- Fix title and description in RSS feeds
- Fix interface translations in CMS footer
- DataObject:
- fix for quering database for child elements when it hasnt been serialized
- Remove HAVING clause from methods where it doesn't make sense to have them
- Fix caching in DataObject::get_one()
- Take orderby clause into account when caching in DataObject::get_one()
- Allow insertion of <img> tags that refer to external domains and add alt= to any images that don't have alt tags
- Show the saved value of EditableEmailField.SendCopy
- ManifestBuilder: Fix building manifest before database is created
- HTMLText.Summary: Don't close img and br tags
- Don't fail in i18n::include_by_class if the module isn't translatable
- Database: When removing a value from an enum, set affected rows back to the default
- Fix DataObjectSet constructor breaking with associative arrays
- Make ContentNegotiator send XHTML to the W3C validator
- Image: Fix attaching an existing folder to an ImageField
- TableField:
- when no source items found, the table should still show and it should works as adding new records
- renamed $wantDefaultAddRow to $showAddRow
- Form: removed Form::dropDatalessFields()
- Refactored Member::session_regenerate_id to make it easier to disable in some circumstances.
- Deprecated use of DBField 'Text' for saving HTML-Content (added check in HTMLEditorField->saveInto())
- Make Security::get_encryption_algorithms() a dynamic function again.
- Fix sorting in complextablefield
- Added sapphire/conf/ConfigureFromEnv.php for making use of _ss_environment.php
- SelectionGroup: Fix for bug that initialises with preloaded selected items with right hide/show
- Fixed fatal error due to browscap.ini capitalisation error
- Allow many-many complex table fields to be used on the reverse side of the join (belongs many many)
- Fix incorrect text boxes on many-many complex table fields and relational complex table fields being set on an ajax request
- BasicAuth: Fixed illegal reference to this
- Image: locking down URLs: image/iframe, image/flush, image/transferlegacycontent
- RelationComplexTableField: fixed "object not found" error in ie6
- ImageField: compressed layout to fit in CTF-popup (removed "click here to remove" label), removed iframe-borders for IE
- RelationComplexTableField: added check if sitetree exists otherwise IE broken with all genericDataAdmin panel
- ComplexTableField: updating form in ctf-popup after saving (including validation-errors and fields that have may changed on the serverside, e.g. ImageField?)
- fix PageView's recording of referrers.
- File: fix upload folder
- Fixed seamonkey browser recognition in browscap.ini
- ComplexTableField: fix sql error on comments section
- fixed i18n::get_owner_module() calls on classes with _s
- Fixed ManifestBuilder execution in restrictive openbasedir environments
- Removed clone behaviour from Form::Fields()
- Object: Added object caching methods
- Make DataObject::write() call the recursive write on components, even when the dataobject itself hasn't changed
- fix ComplexTableField caching
- ManifestBuilder regex
- Debug: Supress disabled errors on live site
- Allowed subclasses in ComponentSet::add/remove
- added extra security on Controller ( checkAccessAction() )
- Member: Used Object::create() to create email instances sent by the system.
- Object, Versioned, Hierarchy: Allow selection of folder when inserting files / images
- AjaxUniqueTextField: fixed sql-injection
- TableField: Removed use of deprecated TableField::setExtraClass()
- Group: Removed warning in group admin
- DataObject: fixed caching in getManyManyComponents
- DataObject: Fixed MySQL 4.1 support for situations where we are sorting by a group aggregation function and fixed notice level error
- Fixed bug with BasicAuth enabled on an old database, it was preventing you from visiting db/build
- DataObject: Fixed 4.1-sort-by-group-aggregate query rewriter for sort functions containing columns, eg, ORDER BY if(A,B,C), X
- Director: Small fix for session bugs on Lightspeed server
- DataObjectSets: cannot be iterated over multiple times concurrently
- fix to Installer: falsely claims modrewrite fails (mamp)
- Widget: fixed widget editor
- ComplexTableField: Fixed double-escaping of CTF popup page-navigation links
- ComponentSet: fixing bug with in-memory child objects not having their parent ID field updated via the ->add() method
- ComplexTableField: BUGFIX properly setting $childID in form for newly created items to avoid duplicates after subsequent saving (the form reloaded without the ID connection)
- TableListField: fixed csv export in MemberTableField by checking for valid database columns when building SELECT statement
- ComplexTableField: fix popup breaking after saving
- CMS
- cmsmain_left: You can't reorganise pages without creating pages
- MemberTableField: Patch for more i18n strings
- Fix i18n errors
- UserDefinedForm: Fixed notice level error
- Bug in PageComments class (Security)
- Fix autocompletion in Security Admin
- Fixed the $hide_ancestor static on SiteTree? subclasses
- Fixed bug: Page class wasn't shown in add-page dropdown
- More memory-efficient version of admin/publishall
- tinymce.template: Added paste plain text and paste from word buttons to the HtmlEditorField in the CMS
- SideReport: fixed bug in todo list report
- Fixed 404 on spacer.gif
- Fixed context menus in CMS
- CMSMain: Added 'duplicate page and children' context-item in addition to 'duplicate just this page'
- GenericDataAdmin: Recover ExportForm for genericDataAdmin Which is needed for CRM CreateCommunication
- Hardcoded array of encryption algorithims in Security::get_encryption_algorithms(), as a bug in MySQL causes corruption in dumps with enums with commas
- Fixed bug with google sitemap on translated sites
- Removed title from SecurityID fields, as some forms show labels on HiddenFields
- Fixed Object::uninherited() for PHP 5.1.2
- Added empty array to member so that roles can add their own has_one relations
- Removed right frame headers as the buttons have been moved and they only contain redundant information
- Use a javascript dialog box for confirming unsaved changes instead of the slow loading model one
- Reworked the tabs in the Newsletter section to be less confusing
- Cancel button added to Send Newsletter window
- External logo link opens in a new window
- Left sections in Site Content 'Site Tree', 'History' and 'Reports' now use expandable sections rather than tabs
- Relabeled 'Site Tree' to 'Site Content & Structure', 'History' to 'Page Version History' and 'Reports' to 'Site Reports' in left sections of Site Content
- Relabeled 'Files & Images' left frame to 'Folders'
- Added tooltips to site content tree, showing the page type
- In the 'Page Version History', use a checkbox lable 'Compare mode (click 2 below)' instead of a dropdown
- Renamed 'Save draft' button to 'Save'
- The 'Save' button text changes to 'Saving...', and the 'Publish' button text changes to 'Publishing...' when they are clicked
- Added save indicator to all 'Save' buttons, the 'Save & Publish' button and the 'Unpublish' button while they are being submitted
- Added a go button to the 'Site Reports' dropdown
- Relabeled 'Name' field to 'Folder Name' in Files & Images section
- Renamed the 'Save' button to 'Save folder name' in Files & Images section
- Relabeled 'Send newsletters from' field to 'From email address' in Newsletter section
- Removed the 'Move Files' button from Files & Images section, implemented multi-file drag & drop moving
- Add 'Newsletter Settings' tab to Newsletter type edit form for consistency with other forms
- Make the status message shown after sending a newsletter always include the # of emails sent
- Added delete confirmation for items in Newsletter left tree
- Added delete confirmation for items in Security left tree
- Make 'Add new draft' the default action for 'Create...' in the Newsletter section
- Replace the 'reorganise' button with 'Allowing drag & drog reordering' checkbox
- Define 'EMAIL_BOUNCEHANDLER_KEY' in sapphire/_config.php and require its value to be sent as 'Key' $_GET var in pings to /Email_BounceHandler to prevent fake email bounce pings
- Display an error on duplicate bounce logs instead of a blank screen
- If the contents of the X-SilverStripeMessageID header is sent to /Email_BounceHandler in the 'SilverStripeMessageID' _GET variable, then it will be logged in the Newsletter_SentRecipient table so that the bounce report will show up on the 'Sent Status Report' tab of the Newsletter
- Bounced newsletter recipient emails and blacklisted by default
- FieldSet
- Added insertBeforeRecursive()
- FileSystem
- Added $file_create_mask and $folder_create_mask, which are used whenever creating new files/folders in sapphire
- Form
- All Forms now have a hidden SecurityID field to prevent CSRF attacks
- Added disableSecurityToken() to disable the SecurityID field
- Added securityTokenEnabled()
- Changed <p class="Actions"> to <div class="Actions">
- Renamed PureName() to Name()
- GD
- Added rotate()
- Added rotatePixelByPixel(), allowing rotation where the imagerotate function is unavailable
- Added crop()
- Added getWidth()
- Added getHeight()
- Hierachy
- Versioned now automatically add suffixes, so Hierachy no longer needs to
- HTTP
- Added register_modification_timestamp()
- Added register_etag()
- ImageField
- Improved layout
- Int
- Added support for default value
- ManifestBuilder
- Refactored getClassManifest() for clearer ignore rules
- Ignore i18n language files
- Ignore folders that have a '_manifest_exclude' file
- Member
- Automatically login user if the 'remember login' cookie is set
- Added createNewPassword(), which generates a random password, optionally using a word list
- Added support for password encryption
- Added Locale field to store user preferred language
- Always show five stars in performReadonlyTransformation(), so it is impossible to use the information of the password length for brute-force attacks
- Permission
- Added declare_permissions()
- Added get_declared_permissions_list()
- Added traverse_declared_permissions()
- Added Permission_Group class, used to group permissions together for showing on an interface
- Added $admin_implies_all, if this is false then the 'ADMIN' permission doesn't imply all permissions
- Refactored Permission::checkMember(), should be faster now because the non-strict checking is now only executed if the user doesn't has the permission
- Added deny(), giving the ability to define 'deny permissions'
- Changed references to 'stage site' to 'draft site' in TreeTitle()
- Use Translatable interface by default
- Add content language in MetaTags()
- Add delete class to unpublish and rollback buttons
- SSViewer
- Added support for internationalisation in templates, using <% _t() %>
- Added $Iteration in templates, which keeps track of the number of iterations in a control block
- TableListField
- Prevent onclick event in td.markingcheckbox from showing the popup
- TabSet
- Remove tabset div to reduce wasted space on tabs
- Added insertBeforeRecursive()
- ToggleCompositeField
- Refactored from TogglePanel
- Added icons and used 'cursor: pointer' to make it obvious that it is clickable
- Versioned
- Added the ability to versionise suffixed tables that have names that are not DataObject descendants
- Added canBeVersioned()
- Added extendWithSuffix()
- Added hasVersionField()
Bug Fixes
- Sapphire
- E_NOTICE fixes
- Fixed incorrect deprecated message in Convert::raw2xml()
- Don't show and error message and quit the script when @ is used to suppress the error
- Changed width of HTMLEditorFields to prevent horizontal scrollbars in IE7
- Added checks in DataObjectSet::First() and DataObjectSet::Last() to prevent errors on an empty $items array
- Fixed incorrect treatment of Member::logout() as a static method in Security::logout()
- Ensure Priority is set in SiteTree::onBeforeWrite(), otherwise an invalid SQL statement will be generated when the page is published
- Only highlight broken links in HTMLEditorFields once, to prevent execution timeouts when there are lots of identical broken links
- Fixed bug "Fatal error: Access to undeclared static property: Controller::$db in ../sapphire/core/Object.php(282) : eval()'d code on line 1"
- Fixed DataObjectDecorators not supporting indexes and defaults
- Fixed ReportField generating invalid HTML
- In Member::setBlacklistedEmail() call this->write() so that the BlacklistedEmail field state will be saved to the Member database table
- Fix Email_BlackList::isBlocked() to check the BlockedEmail field instead of non-existant Email field so that it will actaully return true when an email is blocked
- Fix layout problems with search box in IE by only generating a label tag if TItle is set in FormField::FieldHolder()
- Fixed Permission::check() not p[assing $strict to Permission::checkMember()
- Fixed HTTP::gmt_date()
- Fix validation of Member extensions
- Removed DriversLicense references from LoginForm (project specific clutter)
- Added check for existence of #sitetree in RelationComplexTableField.js
- Unsaved changes detection now works in Security section member tables
- Fix typo in LeftAndMain::addTreeNodeJS() by renaming 'select' parameter to 'selected' because 'selected' is what is used in the method body
- Delete image thumbnails after deleting an image
- Use 'html>body' instead of just 'html>' so that #sitetree correctly gets assigned width:auto on Mozilla browsers (prevents Folders being selected from 500px away on file drag and drop)
- Display a useful error message if getCMSFields() returns null
- When 'Duplicate this page' is clicked, first silently (without confirmation) save the page, then duplicate it so the new page is identical to the other page
- Fix errors when importing recipients to newsletter mailing list
- Fixed blocking during resize in IE6
- Don't show a 'No template selected' error when sending a test Newsletter if no template has been selected since templates for Emails are optional
- Fixed bug 'for newly created newsletter drafts, content of newsletter sent is not what is shown on screen'
- Don't save new Newsletter drafts as soon as they are created to prevent TinyMCE Javascript errors in IE
- Add if((typeof tinyMCE != 'undefined')) statement around call to tinyMCE.init() to prevent "Error: 'tinyMCE' is undefined" error in IE7 on Newsletter Recipient import
- Don't allow a deleted draft to be edited in the Newsletter section
- Fix a bug where newsletter drafts will be added, but not show up in the left tree (because of a Javascript error), if no selection has been made
- If there are no newsletter types, and 'Add new draft' is chosen, create a newsletter type to prevent errors
- Fix changed icon only showing after Save button is clicked twice
- Modules must now have _config.php files in order to be loaded
- New Classes
- PermissionProvider
- Improved Classes
- CalendarDateField
- Added a calendar icon
- CheckboxSetField
- Prepared for use editing a many-many join in the CMS, popualted with a SQLMap object
- ClassInfo
- Added implementorsOf()
- ContentNegotiator
- Added set_encoding() to choose a character set other than utf-8
- DatabaseAdmin
- Removed populate() as it was a security risk, the initial content is now loaded via requireDefaultRecords()
- DataObject
- Added add_extension() for adding decorators in _config.php
- DataObjectDecorator
- Added extraDBFields() for modifying the decorated data objects, adding extra database fields
- Email
- Added send_all_emails_to()
- Added cc_all_emails_to()
- Added bcc_all_emails_to()
- Replaced sentLiveErrorsTo() with send_errors_to(), for more flexibility
- Form
- Added current_action()
- Added single_field_required()
- FormField
- Added Required(), so that you can put asterisks into a form template if you wish
- GenericDataAdmin
- Updated to use new permission model
- LeftAndMain
- Added second argument to setApplicationName() so that the name in the top corner and the name shown elsewhere can be 2 different strings
- Permission
- Added get_codes()
- Profiler
- Added trace argument to show()
- Added profiling scaffolds
- Added ?profile_trace=1 url variable tool to show a trace on the profiler
- Sorted the output of profiler
- Improvements to profiling information
- TableField
- Added option to aid putting TableFields inside the ComplexTableField popup
- TreeDropdownField
- Added setTreeBaseID(), for showing a sub-tree in your field
- Javascript
- Added event.setStyle to prototype_improvements.js
- Add class text field to image properties dialog in TinyMCE
- Added ?debug_behaviour=1 URL option for debugging behaviour calls with Firebug
Bug Fixes
- CMS
- Forms in newsletter & security section were incorrectly submitting when enter was pressed
- Fixed search in MemberTableField
- Don't show popup when validation fails in Security section
- Fixed bug where scrollbars aren't shown in the CMS
- Let CMSMain be used to manage objects without Sort
- The help button now redirects to http://userhelp.silverstripe.com
- Version displayed in CMS now works correctly
- Fixed CMS action button support when text size increases
- Added message when report is empty
- fixed (overrides) to CSS to avoid larger font-size due to em values
- Fixed tree scrolling and resizing issues
- Fixed sizing issues with CMS right content area
- Fixed bug with image insertion
- Fixed bug where new pages weren't being highlighted in the CMS
- Fixed bug where the last page in the site tree wasn't being highlighted in the CMS
- Fixed reordering of groups in security section
- Improvements to image inserter
- Sapphire
- Reduced warnings when E_NOTICE is enabled
- Fixed validation of date fields in a user defined form
- Fixed multiple security groups being created when logging in with default admin
- Fixed permissions for administrating page comments
- Fixed ContentController::PageComments() method to die if spammers are POSTing form data when comments are disabled
- Fixed permission checking on PHP 5.0.5
- Fixed 'cannot access protected property' error in Security section on PHP 5.0.5
- Fixed javascript validation of forms
- Fixed error when asp_tags = On
- Fixed bug where you have a non-required field with numeric validation
- Added a limit of 20 steps in Breadcrumbs generation
- Changed SiteTree.Title length from 100 to 255
- Fixed random password generator in Member::createNewPassword()
- Fixed BatchProcess to not display an error if no objects could be processed
- Fixed a bug where a user is redirected incorrectly after logging in
- Changed temp-folder selection to not leave temp files lying around, and put silverstripe temp files into a silverstripe-cache folder
- Made guid of PageComments in rss feed unique
- Removed duplicate XML class
- Fixed bugs caused by missing html elements
- Fixed code to remove need for short_open_tag
- Fixed FileSize generation for sizes of just over 1 meg
- only show $messageBlock in FormField::FieldHolder() if $Message is existing
- fixed rightTitle and id in FormField::FieldHolder()
- Fixed ?isDev=1 mode
- Set default of sendWarnings on Debug::send_errors_to
- Fixed formatting of error emails sent from ajax requests
- Removed debug plumbing from the results of Debug::backtrace()
- Simplified return data of htmlEmail, an inconsequential internal optimisation
- Create assets folder if it doesn't exist when uploading a file
- Fixed bug in SiteTree::NestedTitle()
- Don't append /home to the home page URL
- Small fix for windows installations
- Fixed efficiency problems in Versioned::get_latest_version
- Fixed File::sync(), to let it recurse into new directories in a single execution
- Fixed bug with getting form action that was breaking form submission and complextablefield pop-up
- Fixed SQLMap iteration
- Simplified EmailField validation error message
- Fixed some bugs in the debug emailer
- Reduced amount of ajax-refetching that the TreeSelectorFields do
- Fix macron support in reports
- Improved debug message (remove big blocks of redundant data)
- Allow for the disabling of default buttons. Apply this to CMSMain and GenericDataAdmin in the administration, so that we don't default to clicking the *DELETE* button.
- Added default value to first arg of permissionFailure(); it's not actually used!
- Improved handling of EditableFormFields on new UserDefinedForms
- Improved search results message shown on first load
- Made calendar control register a date change when the calendar is used
- Set some good defaults in DataObjectSet::TotalPages() if they have not been set
- Changes to support forum
- Require authenficiation to do a db/build on live sites
- Close directories before trying to remove them
- Fixed a bug where CheckboxSetField wouldn't save if there was a method the same as the field name
- Fix multiple "broken" in class attribute of HTML Content
- Fixed bug with TreeDropdownField when you clicked the expand link 3 or more times, it wouldn't close
- Fixed bug when editing properties of new text fields
- Fixed duplicate of UserDefinedForm objects
- JSParty
- Fixed a bug where you couldn't always edit the bottom of an WYSIWYG editor field
- Ensure that WYSIWYG context menu always appears on the screen
- Javascript performance improvements
- Fix weird bug in behaviour to do with class.applyToChildren
- Improved console.log alternative
Installer
- Added option of installing either the default template, or the tutorial template
- mod_rewrite check now works with http authentification
- Workaround for 'URL file-access is disabled in the server configuration' using curl for mod_rewrite test
- Better error message if the installer can't detect the web server
- Added an alternative .htaccess configuration
- Less file permissions required by the installer
- Made deleting the installer files more prominent, it now deletes all the installations files, not just php.