Platform changelog

Week 31, August 2017

  • Removed previously deprecated property Application::ssl. This value is available both as property ssl in class Sandbox\Request, and as method isSSL in class Core\HTTP. Note, however, that all requests to Includable are forced to use SSL, so this will always return true in production environments.

Week 22, May 2017

  • Added Benchmarks class for module developers to run their own benchmarks.
  • Both frontend Javascript errors and Platform releases are now logged in the inc run console.

Week 20, May 2017

  • Implemented $this->module->version, which outputs a string denoting the module version, useful for cachebusting.
  • Made module translations available in all controller types (previously only available in the web controller by default).
  • Fixed a bug where it was not possible to change the standard locale from within a module.

Week 17, April 2017

Week 16, April 2017

Week 12, March 2017

  • Renamed $this->site to $this->community. Deprecated $this->site, although this property won't be removed any time soon.
  • Made currently signed in user and community available through the global functions user() and community() which both return either a User or Community object (respectively), or null when no user is signed in or community is found in the current context.
  • Class LocaleParser, which determines the correct locale to use for the Language class, now als checks the attribute locale of the currently signed in user (if any), before falling back on the browser's preferred language.
  • Thumbnails generated by CDN::thumbnail() now return a JPEG image with quality 90 instead of 80.
  • Documented Route class.

Week 11, March 2017

  • Added model interface class Group, which makes it easier to create new user groups and assign users to them.
  • Added infrastructure for incoming emails, available through the class Services\Email\Inbox and helper model class Services\Email\Envelope.

Week 10, March 2017

  • Removed deprecated function CDN::get_url_or_path().
  • Abstracted Model methods related to attributes into AttributedModel, which Community and User models now extend.

Week 1, January 2017

  • Implemented helper functions view() and redirect(), as wel as the class Sandbox\Route, which makes routing within modules much cleaner and simpler. Also made $this->request->get() and $this->request->post() available as static functions Input::get() and Input::post() respectively.

Week 52, December 2016

  • Added webOptions.catchAll (boolean) to the Module.json file specification, allowing modules to declare that they should be loaded when the path requested isn't recognized as a module namespace for any other module installed in the community. When a module with webOptions.catchAll set to true is set as the community homepage, going to / within the community will not trigger a redirect to the module namespace (e.g. /courses) as is the case normally, but the module will be executed at the root path. Also, when a catch-all module is executed from a non-existing namespace (e.g. /courses2/test/something), the whole path (after the initial slash) is passed as arguments to the web controller of the module (i.e. $this->request->args[0] would be courses2, instead of test, as would be the case for an existing module with the namespace courses2). Note that is not the case for the catch-all module itself, when using a path including the module namespace, this will be ignored as a part of $this->request->args.

Week 47, November 2016

  • Modernised email template design. The new email template allows you to add a custom icon and header color through properties in the EmailComposer class.

Week 46, November 2016

  • CORE-350 - Fix error handling for missing static assets on production Fixed Changed handling of missing static assets. Before this would throw a SandboxException and display an error to the user. Now, when this happens, no file or error is served, but instead the module's web controller will be called with that path, like any regular URL starting with the module slug. Example: browser requests http://example.com/mymodule/static/something.css, which is registered as a static file URL In the module manifest, but doesn't exist. In this case the web controller is executed with $this->request->args = ['static', 'something.css'].

Week 44, October 2016

  • Added API for retrieving image thumbnails of uploaded documents (official documentation pending).

Week 43, October 2016

  • Removed deprecated $this->module->namespace, $this->module->args and $this->module->request_url. All of these values are still available through $this->request.

Week 37, September 2016

  • Deprecated $this->l. and $this->lang. The Language class will stay available through either Language::instance() and $this->language. Calling instance() on the Language class itself is the recommended way to access this now.

Week 29, July 2016

  • Released the Includable CLI beta 1, enabling module developers to debug modules without the need for a local testing environment. View Github project
  • Added SAML and OAuth2 platform support. User interface and developer registration will follow later in the year.
  • Implemented a new UI for logins and authorization.
  • Added support for custom module language files, to support module-specific translations. View documentation
  • Hooks site-header and site-footer are now also called on non-authenticated community pages, i.e. the login screen.

Week 28, July 2016

  • Implemented Handlebars templates support: $this->response->view($template_name, $template_data)

Week 27, July 2016

  • Implemented Storage Collections, a thin layer around the key-value storage API that allows you to work with table-like data structures.

Week 26, June 2016

  • Dropped support for deprecated apc_get() and apc_set() functions as a way to access the cache. Only way to access the cache now is to use Cache::instance().