? Success

User tests: Successful: Unsuccessful:

avatar nikosdion
nikosdion
14 Nov 2013

Technical Details

IMPORTANT: See tracker item 32699

Bug analysis

When a developer specifies an update server for their extension in the XML manifest the URL must end in .xml. If it doesn't the findUpdate methods of JUpdaterCollection and JUpdaterExtension will append /update.xml and /extension.xml respectively. This is a problem in the following common cases:

  • Update XML streams generated on-the-fly by PHP scripts.
  • Update XML streams hosted on file hosting services such as Dropbox, SkyDrive etc where the URL may either need an authentication parameter or otherwise its last four characters not being .XML.
  • Update XML streams hosted on Windows servers and having an extension of .XML (uppercase) or .Xml (mixed case).
  • Update XML streams hosted on CDNs, requiring a special parameter to force-reload them.

In all those cases the developers would use an ugly workaround, appending a dummy query string parameter, e.g. &dummy=whatever.xml. Even though this approach works in most cases it is problematic in certain occasions, it's ugly and makes Joomla! look amateurish in its handling of update sources. It's even worse considering that if Joomla! thinks it can't load an update source it silently disables it, without any way for the user to enable it sort of editing the database.

Furthermore, the necessity of the URL ending in the exact character sequence ".xml" is not documented. Our documentation implies that any valid URL returning valid XML data should be accepted. Therefore the current behavior is a bug.

Proposition

The findUpdate methods of JUpdaterCollection and JUpdaterExtension are modified to support one more option key in the $options array, called append_extension. By default this is false, meaning that these methods will not attempt to tuck the /update.xml or /extension.xml suffix to the URL. Instead they will try loading the provided URL. If the URL is not found or does not contain XML data they will append the /update.xml or /extension.xml suffix to the URL and retry loading it. If it still fails to load / doesn't contain XML data the update source will be silently disabled, exactly as it happens right now.

Project management information

Backwards compatibility issues

None. This solution is backwards compatible with all currently supported versions of Joomla!.

Documentation burden

None. This solution actually makes the code adhere to the existing documentation.

Information for extension developers

You can now use any URL in your XML manifests' updateserver tags. The URL does not have to end in .xml.

avatar nikosdion nikosdion - open - 14 Nov 2013
avatar mbabker mbabker - reference | - 16 Nov 13
avatar mbabker mbabker - close - 16 Nov 2013
avatar garyamort garyamort - reference | - 2 Dec 13

Add a Comment

Login with GitHub to post a comment