The Elgg 2.0.0 Changelog

See the accompanying blog post about Elgg 2.0!

2.0.0 (2015-12-14)


  • Steve Clay (112)
  • Evan Winslow (74)
  • Jeroen Dalsem (35)
  • Juho Jaakkola (28)
  • Jerôme Bakker (15)
  • Ismayil Khayredinov (6)
  • iionly (6)
  • Matt Beckett (2)
  • Paweł Sroka (2)


  • application:
    • Allows fetching dataroot statically from Application (bed2e09b, closes #8653)
    • adds elgg() and makes Application a service provider (d43de92f)
    • Introduces Elgg\Application for loading/booting Elgg (ae5ece22)
  • assets:
  • comments: Comment/reply timestamps are now permalinks (4596e00b, closes #8407)
  • composer: Fully support installing Elgg as a composer dependency (fceafea6, closes #8431)
  • core: Makes several commonly-used functions public (4b58e4f5, closes #7838)
  • developers: Always show human-readable translations (43c19644, closes #8834)
  • discussions: discussions feature has been moved to its own plugin (a4e484e6)
  • groups:
    • group owner transfer lists users alphabetically (a8bc79c2)
    • adds alphabetical sorting to all groups page (ba82c682)
    • sidebar members show recently joined members (fcf6e19a)
    • group members page can be sorted on newest members (2eb5e5ea)
    • Only submitted group profile fields are updated (c3d11285)
  • hooks:
    • Adds indication in container permissions hook of checking owner (298b5231, closes #8774)
    • a new function to clear all callbacks for a given hook (bd511763)
  • i18n: abbreviations for months and weekdays (889617ed)
  • icons: use FontAwesome icons (ea7b17d5)
  • javascript: admin panel javascript is now loaded asynchronously (7141da5f)
  • js: Adds temporary require() shim for deferring inline scripts (65fddb00)
  • likes: Entities are no longer likable by default (cb6ebcc9, closes #5996)
  • members: add alphabetical member listing (0ad75efe)
  • memcache: support Memcache namespace prefix (8baae3f3)
  • messages: recipient selection by userpicker (932e974c)
  • php: Require PHP 5.5+ (52da9d98)
  • plugins:
  • profile: only submitted profile fields are updated (fd7b8e0a)
  • routing:
    • Removes /export and all secondary front controllers (ab3c879f, closes #8425#5017)
    • Render blog pages with views (9f1d9316)
    • Render email validation page with view (b1060e52)
    • Render twitter_api interstitial with view (a06a7e27)
    • Render thewire pages with views (e126b2f6)
    • Render tagcloud page with view (ad0d4cc0)
    • Render site notifications page with view (5e3cb646)
    • Render search page with view (aff84bc7)
    • Render reportedcontent pages with views (315ce166)
    • Render profile pages with views (125844aa)
    • Render pages pages with views (ec060fb6)
    • Render notification pages with views (dcfb1761)
    • Render messages pages with views (91b52801)
    • Render messageboard pages with views (c77d4e03)
    • Render members pages with views (75c3fcda)
    • Render groups pages with views (89651a3a)
    • Render discussion pages with views (7dc40a16)
    • Render file pages with views (217e4222)
    • Render theme_sandbox shell with view (42013a5d)
    • Render dashboard page with view (f8530d13)
    • Render categories page with view (1ae65c53)
    • Render bookmarks pages with views (6c63b0df)
    • Move all core pages to resource views (2761e874)
    • Use the views system to render the index page (f1b75bbe)
  • views:
    • allow getting all view locations (7a699f3c, closes #8947)
    • added html5 audio support to the file plugin (e5a32390)
    • Allow sites to specify views.php at root (625c1ddd)
    • added a generic by_line page element for content objects (1a5bcb64)
    • comments form value is now html5 required (ba9f4301)
    • login and register form now have html5 required fields (f8c505ca)
    • Allow mapping views dirs via views.php files (9ba31f20, closes #8546#8550)
    • Nearly all plugin static resources are in views (b8a8864c)
    • Allow specifying exact view paths via views.php (f3881cf4, closes #6844#8515#8527)
  • web_services: filter method output with a plugin hook (5ff308c5)


  • engine:
    • Viewtype is auto-detected only once (541a5cd1, closes #8438)
    • Reduce method calls when fetching from service provider (5561fec9)
  • js: Remove jquery-migrate and upgrade jquery to ^2.1.4 (8f58da98)
  • nginx: Turn on gzip by default (49f776d3)
  • scripts: Load all scripts in foot regardless of registered location (c91f1f3e, closes #2718)
  • simplecache:
    • Faster serving in case symlink not used (85c2e888)
    • Allow 304 responses even with simplecache off (14bd68fb)
  • views:
    • only draw menus when they are used (b9f85e4c)
    • Allow serving assets directly from filesystem (c4c5734d, closes #8381)


  • head: Remove out-of-date JS docs (23c3d036)
  • icons: Add docs for Font Awesome changes in #8578 (eb9bcde3, closes #8625)
  • notifications: documents workflow of the asynchronous notification system (209b6a51, closes #7496)
  • releases: Clarify BC policy for major releases (a636bf86, closes #7080)
  • routing: Update custom_index to demonstrate latest best practices (0142a5f0)
  • upgrade: Clean up docs around PDO upgrade (fdfa4d7f)
  • upgrading:
    • Warn site owners about MultiViews and /settings URLs (0ada89d6, closes #8806)
    • documents comments hook return values (b9d975f0)
  • web_services: document ws hooks (5430e032)

Bug Fixes

(Several of these bugs did not exist in 1.12. They were introduced in the preview releases)

  • a11y: aalborg mobile site menu uses the Font Awesome fa-bars icon (a6a512e3, closes #9110)
  • actions: Misspelled action levels no longer treated as logged_in. (d936549a, closes #8337)
  • admin: admin.js no longer fails on the plugin text file page (a4e2ce00)
  • breadcrumbs: hide the last breadcrumb if it’s not a link (a1bec58f, closes #6419)
  • cli: Rewrite ::installDir() to Directory\Local::root() in CLI server (1e1f446b)
  • comments: allow comments hook to return empty strings (37321a14)
  • composer: Symlink plugins from root mod dir (436fb4a2)
  • database: Uncallable callback arguments now throw exceptions (1e65aa10, closes #6937)
  • discussions: Body of discussion notification mail is not empty anymore (23ab3e51)
  • entities: Entity creation no longer needlessly checks owner container (5adf98fd, closes #4231)
  • events: All hook/event handlers are now weighted properly (3e6a2898, closes #1378)
  • file: thumbnails are visible again (7f46db8e)
  • http: allows sending gzipped JavaScript on nginx < 1.5.4 (4c4b8ab7)
  • https: Drop login-over-https (c0e81a40, closes #5729)
  • icons: sizes of Font awesome icons are now more consistent with old icons (11386003, closes #8733#8861)
  • likes:
    • count is updated after liking/unliking (dae30cb7, closes #9100)
    • likes preloader and entity menus now consider likability (de81d7da, closes #9065)
  • nginx: Update rewrite rules for 2.0 (aa082a5c, closes #8750)
  • output: fewer view $vars will be output by accident (4560d389, closes #8218)
  • profile: Support composer for icondirect requests (7610552b)
  • river:
    • floated river selector no longer breaks layout (2745c914, closes #9091)
    • Improves alignment of filter select and nests inside label (4f903c1e)
  • site_notifications: correctly position site_notifications menu (22d14acb)
  • ui: Eliminates FOUC in Firefox (8244ae61, closes #8328)
  • upgrade: Point UpgradeService to correct upgrades dir (b3a31868)
  • views: do not drop elgg-button-submit class when using input/submit (1e8e3e6f)
  • web_services: do not leak internal function names via system.api.list method (9415c413, closes #8574)
  • zaudio:
    • AudioPlayer now works via AMD module in IE9 (4b0768b8)
    • Convert zaudio JS to AMD modules (674899e0, closes #8283)


  • discussion: Deprecates the elgg:discussion library (bf741815, closes #8760)
  • file: Deprecates accessing filestore metadata (363b461d)

Breaking Changes

  • In aalborg_theme, the view page/elements/navbar now uses an icon for the mobile menu selector (formerly an image). The bars.png image and supporting CSS for the 1.12 rendering has been removed.

Fixes #9110 (a6a512e3)

  • The report content icon is now a FontAwesome icon, however the GIF used in 1.x is still available. (96d258fa)
  • Plugins that override the input/autocomplete view will need to include the source URL in the data-source attribute of the input element, require the new elgg/autocomplete AMD module, and call its init method. The 1.x javascript libraryelgg.autocomplete is no longer used. (2a0cf9a5)
  • To allow for usage of the z-index property for elements in the content area without the More menu dropdown being displayed behind these elements the z-index value in the elgg-menu site class has been increased to 50 (34af1d71)
  • Relationship deletions only fire the "delete", "relationship" event. (9c148994)
  • If a plugin has removed or replaced messages_notifier to hide/alter the inbox icon, the plugin must instead do the same for the topbar menu handler (messages_register_topbar).

Fixes #8862 (67cff474)

  • When creating within a group, ElggEntity::create used to always separately check if the current user can use the owner's account as a container. This made sure that one group member could not post to the group using another member as owner. This separate check led to confusion, as handlers of the container_permissions_check hook were told that the owner was to be the container, when it was actually the group.

Here we bypass the separate owner container check if the desired owner_guid is the logged in user GUID. This eliminates the check under all normal circumstances but leaves it in place in case a poorly coded plugin allows the impersonation described above.

This also denies creation if the owner/container GUIDs are set but can't be loaded. Before, create() would simply bypass the permissions check if it couldn't load the owner/container.

Fixes #4231 (5adf98fd)

  • We've removed the "categories" plugin from core.

You may access it at

Fixes #7584 (ba0c12f2)

  • The zaudio plugin is no longer part of the bundled plugins. The plugin has been moved to a seperate repository. You can find it here: (ace52256)
  • To allow likes on your content you must permit the annotation to be created. Likes provides a new hook “likes:is_likable” to allow easily registering entities by type:subtype.

Fixes #5996 (cb6ebcc9)

  • The plugins blog, bookmarks and file have been changed to have their content listing for "Mine" and "Friends" list content where they are the owner of. Previously it only listed content created in their container. This resulted in group content not showing in 'my' content listings.

Fixes #4878 (20e606b7)

  • The functions blog_get_page_content_read and blog_get_page_content_friends are no longer available. (a437f952)
  • The file mod/aalborg_theme/graphics/avatar_menu_arrows.png has been removed.

Fixes #8629 (ee7f14ed)

  • Elgg no longer checks get_input(‘view’) and $CONFIG->view for every call of elgg_get_viewtype(). elgg_set_viewtype() must be used to change the global viewtype.

Fixes #8438 (541a5cd1)

  • The forms/admin/plugin/change_state view is no longer available (796cafe7)
  • Only profile fields that are passed to the profile/edit action via $_REQUEST will be updated. Omitted fields will not be cleared as it was before this change.

fixes #8582 (fd7b8e0a)

  • Fields not submitted to the groups/edit action will no longer be acted upon. Previously they would be set to empty or default values. (c3d11285)
  • dropped library elgg.markdown

The Markdown library is available as a composer package, this requires less maintenance by Elgg developers.

fixes #8597 (df68d986)

  • The action widgets/upgrade is no longer available (c3273d1d)
  • The deprecated functions $user->getSites(), $user->addToSite(), $user->removeFromSite(), $user->listFriends() and $user->listGroups() are removed. (3bde1718)
  • This class is no longer used in Elgg. If you still need this, you need to provide your own version of this class. (4819c565)
  • The deprecated function parameter support for $object->getSites() and $object->addToSite() are removed. Update to the parameter usage as defined in the ElggEntity functions. (5d02672b)
  • If you use a reference to the physical Elgg sprites please update your plugin to use the FontAwesome icons.

Replace the Elgg sprites icons by FontAwesome icons, this allowes for more icons and easier styling of the icons

fixes #7239 (ea7b17d5)

  • The plugin views are redesigned to display in a lightbox. This completely removes the views forms/admin/plugins/filter and forms/admin/plugins/sort. (bde2c394)
  • Discussion feature has been pulled from the groups plugin into its own independent plugin.

The following views are not available anymore:

  • object/groupforumtopic
  • river/object/groupforumtopic/create

Also the [object, groupforumtopic] subtype has been replaced with the [object, discussion] subtype.

Nothing changes from the group owners' point of view. The discussions feature is still available as a group tool and all old discussions are intact.

Fixes: #5994 (a4e484e6)

If you'd prefer to just add it back, you can use this code in your plugin's init:

elgg_register_js('jquery-migrate', elgg_get_simplecache_url('jquery-migrate.js'), 'head');

Also, define a jquery-migrate.js view containing the contents of the script. (8f58da98)

  • Great care has been taken to make this change as backwards-compatible as possible, so you should not need to update any view references right away. However, you are certainly encouraged to move your JS and CSS views to their new, canonical locations.

Certain uses of the view,$view_name and view_vars,$view_name hooks will not work. See the docs on "View aliases" for more info.

Refs #8381 Fixes #8382 (881e2128)

  • The following views, functions and methods have been removed completely.

Removed views:

  • canvas/layouts/*
  • categories
  • categories/view
  • embed/addcontentjs
  • groups/left_column
  • groups/right_column
  • invitefriends/formitems
  • notifications/subscriptions/groupsform

Removed functions:

  • count_unread_messages()
  • delete_entities()
  • delete_object_entity()
  • delete_user_entity()
  • elgg_validate_action_url()
  • extend_view()
  • get_entities()
  • get_entities_from_access_id()
  • get_entities_from_access_collection()
  • get_entities_from_annotations()
  • get_entities_from_metadata()
  • get_entities_from_metadata_multi()
  • get_entities_from_relationship()
  • get_filetype_cloud
  • get_library_files()
  • get_views()
  • is_ip_in_array()
  • list_entities()
  • list_entities_from_annotations()
  • list_group_search()
  • list_registered_entities()
  • list_user_search()
  • menu_item()
  • make_register_object()
  • search_for_group()
  • search_for_object()
  • search_for_site()
  • search_for_user()
  • search_list_objects_by_name()
  • search_list_groups_by_name()
  • search_list_users_by_name()
  • test_ip()

Removed methods:

  • ElggCache::set_variable()
  • ElggCache::get_variable()
  • ElggData::initialise_attributes()
  • ElggData::getObjectOwnerGUID()
  • ElggDiskFilestore::make_directory_root()
  • ElggDiskFilestore::make_file_matrix()
  • ElggDiskFilestore::user_file_matrix()
  • ElggDiskFilestore::mb_str_split()
  • ElggEntity::clearMetadata()
  • ElggEntity::clearRelationships()
  • ElggEntity::clearAnnotations()
  • ElggEntity::getOwner()
  • ElggEntity::setContainer()
  • ElggEntity::getContainer()
  • ElggEntity::getIcon()
  • ElggEntity::setIcon()
  • ElggExtender::getOwner()
  • ElggFileCache::create_file()
  • ElggSite::getCollections()
  • ElggUser::getCollections()
  • ElggUser::getOwner()

Also the following arguments have been dropped:

  • ElggSite::getMembers()
    • 2: $offset
  • elgg_view_entity_list()
    • 3: $offset
    • 4: $limit
    • 5: $full_view
    • 6: $list_type_toggle
    • 7: $pagination (852b2640)
    • Several internal data structures are no longer stored within the plugin- accessible config space; the removed keys are listed in docs/guides/upgrading.rst. The long-deprecated remove_blacklist() function has also been removed. (2247ed80)
    • Relationship additions only fire the “create”, “relationship” event. (3517bd0f)
    • Elgg no longer allows customizing the views template handler. We don't think this ever really worked in the first place, so probably no one was using it, but since it's conceivable someone could be, we're leaving this warning.

Fixes #8440 (8ae86f16)

  • If your theme or plugin was overriding or extending the 'css' view, you should override/extend the 'css/elgg' view instead. (51441706)
  • The view js/admin and the namespace elgg.admin are not available anymore. (7141da5f)
  • To ensure your handler is called last, you must give it the highest priority of all matching handlers. To ensure your handler is called first, you must give it the lowest priority of all matching handlers. Registering with the keyword “all” no longer has any effect on calling order. (3e6a2898)
  • Several views that were deprecated in the 1.x series are being removed in 2.x. This helps us keep the codebase clean and our maintenance burden lower. (805ecb1d)
  • This removes several views related to IE. If you need support for browsers not listed in our browser support policy, we encourage you to to do so with feature detection and polyfills rather than conditional comments and user-agent sniffing. (7fe9329e)
  • If you use the class FilePluginFile in your plugin, replace this usage with ElggFile (for construction). Load files objects with get_entity().

Fixes #7763 (6be0f97c)

  • Any code that relies of mysql_* functions (expecting an implicit connection) will fail. Also any handler functions passed to the execute_delayed_read/write_query() function will now receive a Doctrine\DBAL\Driver\Statement instead of an ext/mysql resource. (96453494)
  • We are switching to Zend\Mail for sending emails in Elgg 2.0. It's likely that there are some edge cases that the library handles differently than Elgg 1.x used to. Take care to test your email notifications carefully when upgrading to 2.0.

Fixes #5918 (e9de196d)

Fixes #5729 (c0e81a40)

  • If you use any inline scripts that depend on scripts in head, you'll need to change them to external AMD modules and load them with elgg_require_js.

Fixes #2718 (c91f1f3e)

Feedback and Planning

Feedback and Planning

Discussions about the past, present, and future of Elgg and this community site.