Symphony 2.0.7
Stability update; ?debug XPath highlighing; new delegates added; preliminary localisation support; a host of bugs fixed; and more…
Version 2.0.7 was patched on 23 April 2010 with three stability-related commits:
New Features
- Preliminary support for core localisation (big thanks to Nils Hörrmann)
- Updated Debug Devkit and Prfile Devkit extensions, now with XPath highlighting
- Added XSLTPage::registerPHPFunction() function. Extensions can access this function via delegates. Registered function names are passed into the XSLTProcess class, making those PHP functions available within the page XSL.
- Added General::arraytoxml function.
- Added arrayiunique() and iniarray(), both of which are case insensitive versions of existing built in functions. Also added arrayremoveduplicates() companion function
- Added ‘pagestablenest_children’ configuration option (Accepts yes|no value). This will nest pages on the Blueprints > Pages table, providing a new ‘Children’ column. Said column has a link allowing users to drill down to sub-pages rather than viewing a single flat table of all pages. Configuration option must go under the ‘symphony’ configuration group in /manifest/config.php
- Added link between Page config and template
- Added an Env() accessor method to the Frontend class. Use Frontend::instance()->Env() to access it.
- Added ‘assignEntryId’ function to entry object.
- Added EntryPreRender delegate allowing for modification of Entry object just before rendering the Edit form. To be used in Entry Revisions extension.
- Added Delete delegate for entry Delete button.
- Added DataSourceEntriesBuilt delegate
- New duplicator JS code.
- Added a “Copy as Markdown” link and panel to the error page.
- SectionManager now extends Manager allowing it to maintain a pool of resolved sections
- Updated jQuery library to latest version (1.4).
Bug Fixes
- #62: Fixes status message glitch.
- #75: Allow extensions to create their own navigation groups.
- #82: Added ‘Debug Dev Kit’ Extension post update instructions for 2.0.5 or older
- #89: README Update
- #90: Correct creation date will be shown in XML.
- #92: XML declarations in a static XML DS will be removed before saving.
- #99: Fixed typo.
- #109: Added a ‘FrontendPageNotFoundException’ class. This is a replacement for explicitly redirecting to a 404 page and solves the problem raised by issue #109. ‘Datasource::__redirectToErrorPage()’ will be removed in a later version in favour of throwing a ‘FrontendPageNotFoundException’ exception.
- #119: Removed DS filtering re-orderability as it’s not necessary
- #120: Fixes a problem with commas in DS output params.
- #121: Extension version numbers are stored as strings instead of float. This allows ‘PHP-standardized’ version numbers to be used. This also addresses localisation problems, raised in issue #124, where a comma is used instead of a dot in a version number, resulting in broken SQL when installing said extension. Update script has been updated to include the SQL to alter the sym_extensions table.
- #122: Fixed a problem with Param Output. If a field returned an array from the call to Field::getParameterPoolValue(), the param value available to the XSLT would be an empty string.
- #123: Update script will not try to add columns to tables that already have said column. This avoids triggering exceptions which cause the update to fail.
- #128: Trailing slash rule added back in to .htaccess when installing.
- #130: Consolidated ‘disablequerycaching’ and ‘forcequerycaching’ database configuration settings into a single setting called ‘query_caching’. Accepts ‘yes’, ‘no’ or ‘default’ as values. Missing or NULL value assumes ‘default’.
- #131: Prepopulate value is correctly retained when re-saving a newly created entry.
- #134: Removed extra ‘public’ access type from setFetchSorting().
- #135: Fixed pagination + redirect to 404 DS bug.
- #136: Fixes issue with pagination in DS’s. The page value was cast to an integer, meaning invalid page values are always treated as 1. Thanks to ‘drego’.
- #137: Unified the use of /administration/ and /backend/ in delegates to just use /backend/. /administration/ is still supported but will be removed in a later version.
- #140: Tracking latest version of Select Box Link field.
- #142: When saving a page, if the existing file is not writable, Symphony will correctly throw up an error.
- #145: Fixed code resonsible for finding DS dependencies in filter strings.
- #146: Fixed error message, changing reference from utilities to pages.
- #151: Removed the call to wordwrap() in General::encodeHeader().
- #154: Using General::encodeHeader() function written by ‘michael-e’.
- #155: Removed General::rmdirr() function, as it is not used anywhere.
- #157: Added ‘dsParamTIMEOUT’ variable to Dynamic XML datasources, which is used by the Gateway class. The default is 6, but can be changed by editing the Datasource. It will be retained even when editing the DS via the DS editor. If the timeout is reached, an error messages reflecting this is placed in the XML.
- #159: Upload field will correctly save MIME type and Width/Height if file extension has uppercase characters.
- #165: Updated install.php so it will check for install.sql before allowing installation to proceed. Also, tracking latest version of Export Ensemble extension.
- #160: If there are no sections the navigation group suggestion list will not be shown. Thanks to ‘ashooner’ for spotting the problem. Also prevented duplicate items in list from showing.
- #161: Added support for Basic HTTP Authentication
- #162: When creating the admin author during installation, all fields are properly escaped for saving in the Database.
- #166: When there are no sections, and an author logs in, they will be taken to the edit author page, rather than getting booted to the frontend.
- #167: MySQL::cleanFields() function will handle arrays that are more than a single level deep.
- #168: Fixed problem with filtering by a specific date.
- #179: Give the first input of the duplicator instance focus. More robust focusing of duplicator inputs.
- #180: Author class was incorrectly passed a copy of the Administration object when instanciated via the publish table. This caused a ‘Recoverable Error’ to be thrown, crashing the page.
- #184: Allow Text Input option to be preselected. Smart defaults. Slightly reduces the generic-ness of the duplicator.
- #185: Fixed invalid SQL when renaming a section.
- #186: Fixed fatal error when entering incorrect database connenction information
- #187: Fixed text input encoding problems when upgrading from 2.0.6.
- #188: Moved the text input value validation away from the backend, allowing anything to be saved, so it happens on the frontend only. This stops the value from magically changing on the publish form when saving.
- #191: Remove orderability of filters duplicator on DS Editor.
- #192: Trigger orderable “active” state on mousedown before dragging.
- #193: When building dropdown list options for a duplicator, if the heading contains child elements put this text in brackets.
- #195: Added ‘displayeventxmlinsource’ configuration default value to install script.
- #196: Cache all extension subscriptions instead of requerying list of subscriptions on each notifyMembers() call. Reduces query count by 9 on Frontendpage load.
- #197: More precise hash generation ensures all queries are logged.
- #199: Post values for events should use fields passed to __doit() and not fields from raw $_POST array.
- #200: Fixed bug that threw an error page if the settings variable is not an array or empty
- #202: Removed the code for creating a manifest/.htaccess file.
- #204: Don’t try and save Author field when no author is selected.
- #206: Fixed error codes in installer script.
- #208: Checked variable is an array before using in foreach loop.
- #209: If ‘redirect to 404 when no entries found’ checkbox is checked, and no entries are found, the 404 page was no getting displayed. This was due to the FrontendPageNotFoundException getting caught by the generic catch clause. Added in a specific catch statement for this exception.
- #212: Updated ‘Send Email’ Event filter documentation.
- #213: Changed ‘rand’ to ‘random’ in DS editor. Non-core field extensions seem to reference ‘random’ whereas core fields/extensions look for either.
- #216: Allow checkboxes to be filtered with and without an AND operation.
- #219: JS fix for orderable table selection
- #225: Fixed broken redirects without trailing slash
- Closed security hole that could have allowed a file inclusion attack to occur. See discussion for more details.
- Renamed __processDatasources and __processEvents. Also, updated the EventPreSaveFilter delegate to pass in post values.
- Added function Gateway::getInfoLast() to emulate the cURL function curl_getinfo(). Works with both Socket and cURL based requests
- Added -f flag to the sendEmail function. This ensures a correct envelope sender is set
- Added check to make sure file exists before trying to delete.
- Added Event::priority() function which allows more control over when an Event will fire
- AuthorManager class is now static. No longer a need for Author to maintain a ‘parent’ reference to an AuthorManager instance.
- New event data format that handles multilevel arrays better.
- Allow setting of custom options. Port will not be used unless explicitly set.
- Uploading a file, with the same name and to the same entry, will no longer throw an error. Instead, the new file will overwrite the existing one.
- Entry ID value correctly passed into the ‘EventPostSaveFilter’ delegate
- Event trigger order based on their priority
- Field::appendFormattedElement() function is supplied with the entry ID value
- Fields templates for the fields duplicator are now sorted alphabetically.
- Taglist field will do a case insensitive removal of duplicates.
- Dynamic XML DS was too strict when checking returned content type headers. It will now accept any header with ‘xml’, ‘text’ or ‘plain’ in the content type
- Prevented entering forloop when there are no filters
- When a Dynamic DS fails during the transformation step, any errors are now shown in the XML to aid in the debugging process
- When page nesting is enabled, the ‘Create Another? or View All Pages’ will contain the parent ID value in the links.
- Encode apostrophes found in page params.
- A DS which returns no results, due to a pre-condition such as a required param, will no longer place an empty output param value into the page params if it has no ‘param output’ field specified.
- ‘request’ element renamed to ‘post-values’, and XML structure reverted to address backwards compatibility concerns.
- General::arraytoxml() correctly uses the ‘validate’ variable.
- General::arraytoxml() will test each string to ensure it will produce valid XML. Should a string be found that ultimatly will break said XML, it is omitted.
- General::encodeHeader() function updated as recommended by ‘michael-e’. Conforms better to the RFC2045 spec. (See http://www.getsymphony.com/discuss/issues/view/154/)
- General::deleteFile() function updated so it will optionally throw an exception when failing to remove a file
- Fixed regex responsible for finding DS dependancies.
- Fixed handling of invalid data. Instead of sanitising the output of the formatter, the data is sanitised and run through the formatter again. This should handle most situations. If the formatter result is still invalid, an error is throw and saving stopped.
- Fixed logic bug that caused a DS to execute even if a required param was missing
- Fixed variable reference
- Fixed broken navigation.
- Fixed website parameter.
- Fixed error handling.
- Fixed function that merges post data with file data.
- Tweaked code to try and better trap errors and handle expired cache.
- Installer will create a .htaccess in manifest with the contents ‘deny from all’. This makes it impossible for people to view any file in the /manifest folder via the browser.
- Enable taglist-style helper for navigation groups
- Changed the ‘post-value’ element in XML events to ‘request’.
- Pass the current entry ID to Field::appendFormattedElement.
- Use precise status messages for pages (needed for proper back-end localisation)
- Force exception handler to handle errors, instead of throwing them.
- Check arrays are arrays. Fixes bug that prevented DS editor loading when no sections exist.
- If dsParamSTARTPAGE cannot be resolved from the param pool, default to page 1
- Prevent requerying of page schema since it has already been queried. Check for number for legacy in case IDs are still sent. Reduces 1 query per Frontendpage.
- If Author is logged in (Author object created) do not attempt to requery credentials again. Reduces Frontendpage by 6 queries when logged-in.
- Pagestablenest_children param is added by default during the installation.
- HTMLPage::removeFromHead() has been rewritten due the _head variable holding objects instead of arrays. Allows the removal of elements via their element name and optionally combinations of attribute name and value.
- XMLElement::getAttribute() will return NULL if the attribute requested does no exist. Prevents notices being written to the log
- Removed hardcoded ‘sym’ table prefix. This caused fatal errors on installations that don’t use the default ‘sym’ prefix.
- Fixed duplicate post-values element bug. Handled in_array() warnings.
Minor Updates
- Removed ->_templateOrder.
- Addressed some IE7 compatibility concerns.
- Added slight shadow to menus.
- Make Nav Group singular
- The htaccess file created during installation to deny access to everything in /manifest has been relaxed. Instead, it will only deny access to config.php.
- Update.php will check to make sure the select box link field extension is v1.14 or greater. It not, a Post update step message is shown to the user.
- Entry::getData() can optionally return an object instead of an array. This will mean it is possible to access a particular field without the use of an intermediary variable.
- Added pointer when hovering over nav in the admin.
- Removed the trailing exit() call to give more flexiblity to the root install.php file