From 3.x to 4.0
Contents
Composer
PHP Requirements
To be compatible with PHP 8 we needed to increase the minimal PHP version to 7.4. PHP versions < 7.4 are already end-of-life.
Composer project
The root of the composer project is no longer handled as a semi functional plugin. Languages from the languages
directory are nog longer
imported, the views from the views
directory are no longer registered, the PHP DI services from the elgg-services.php
are no longer
registered and the start.php
file is no longer included.
If you needed specific modification to your Elgg installation you need to make a plugin and ensure that the plugin is the latest in the plugin order to allow you to overrule everything you needed to change.
Doctrine DBAL
Elgg replaced v2 with v3 of the doctrine/dbal
dependency. On of the most notable changes is that if you work with QueryBuilders and use
the $qb->fetch()
function you will no longer get an object, but an array. If you want your rows to be useable as classes, you can use
elgg()->db->getData($qb)
.
Another important change is that if you provide your own query parameters, you should no longer prefix keys with a colon in the parameters
but still do so in the query.
PHP-DI
This feature has been updated to use the latest version of PHP-DI. Most notable breaking change for Elgg is the need to change your plugin
service definition to use \DI\create()
instead of \DI\object()
.
ZendMail replaced by LaminasMail
Because of the deprecation of the Zend\Mail
library and it’s replacement by the Laminas\Mail
all references have been updated.
Removed composer dependencies
bower-asset/jquery-treeview
the related js and css are no longer available in the systembower-asset/jquery.imgareaselect
the related js and css are no longer available in the systemnpm-asset/formdata-polyfill
all modern browser have support, no longer a need for a polyfillnpm-asset/jquery-form
use native FormData functionalitynpm-asset/weakmap-polyfill
all modern browser have support, no longer a need for a polyfillsimpletest/simpletest
Javascript
AJAX
The following Ajax helper functions have been removed in favor of their counterparts in asynchronous module elgg/Ajax
.
* elgg.action()
* elgg.get()
* elgg.getJSON()
* elgg.post()
The ajax function elgg.api
has been moved to the executeMethod
function in the asynchronous module elgg/webservices
in the
webservices plugin.
Other elgg.ajax
functions and attributes have been removed from the system. Also the legacy handling of ajax calls have been removed
from the system.
Classes
The javascript logic for automatically booting some javascript for your plugin and registering hooks via the Elgg/Plugin
class has been
removed from the system.
This functionality was never used by core and hardly seen in plugins. Use AMD loaded javascript or extend elgg.js
for always loaded
javascript.
The ElggPriorityList
javascript class has been removed from the system.
System Hooks
The AMD modules for elgg/init
and elgg/ready
have been removed.
The init, system
hook is still available but it only makes sense to rely on this hook from non-AMD loaded js libraries.
The boot, system
and ready, system
triggers have been removed from the system. Replace with init, system
for the same effect.
jQuery
The jQuery library has been updated to the latest version (v3.5.x). This is a major update from the version used in Elgg 3.x. For information about what is changed between these release you should take a look at the jQuery website.
jQuery UI
The jQuery UI library has been updated to v1.12.x. The library is no longer loaded in full by default. If you need to use features from the library you can require them in your own script. For example to be able to use the sortable functionality do the following:
require('jquery-ui/widgets/sortable');
// or in your own AMD script
define(['jquery-ui/widgets/sortable'], function() {
// use the sortable
});
Miscellaneous JS changes
The AMD module
elgg/widgets
no longer returns an object and no longer requires you to callinit
on the module
Notifications
Pre Elgg 1.9 notification handling has been removed. Related functions and hooks no longer exist.
Subscriptions
The relationship in the database which stores the subscription method for notifications has been changed from notifymethod
to
notify:method
.
Multiple Recipients
An ElggEmail now supports multiple recipients in To, Cc and Bcc. The related getter functions like getTo()
will now always return an array.
Settings
A generic storage for notification preferences has been introduced in \ElggUser::setNotificationSetting()
and
\ElggUser::getNotificationSettings()
, the notification settings now have a ‘purpose’.
For example group_join
can be used to manage the default subscription you get with a group when you join the group.
The Notifications plugin has generic handling of displaying and saving the settings.
To display the setting extend the view notifications/settings/records
(plural) with a view which uses
notifications/settings/record
(singular).
When requesting notification settings other than the default setting, if the user hasn’t saved a setting yet it’ll fall back to the default notification settings.
Management of the notification preferences for adding a new users to a friend collection has been removed.
Notification Salutation & Sign-off
To be able to have a more generic salutation and sign-off for outgoing mail notifications we have removed these texts from various translation strings and moved them to generic translations. This will mean you have to update your translations to reflect the new text and also check your code for uses of notifications where you provide your own salutation or sign-off text. You can find out more about this new behaviour in Notifications.
Notifications plugin
The Notifications plugin has been removed. All the features of the plugin are now part of Elgg core. Some pages (like the group notification settings) have been moved to the correct plugin.
This means that event handlers, hook handlers, actions, views and languages keys have been (re)moved or renamed.
Notification Event Handling
The notification hooks no longer receive the origin
parameter.
Site notification
The site notifications plugin now shows the notification subject by default. If a site notification was created with the factory function
SiteNotification::factory()
more of the original notification information is stored with the site notification:
Notification
subject
is stored intitle
Notification
summary
is stored insummary
Notification
body
is stored indescription
Split OkResponse, ErrorResponse and RedirectResponse
The classes Elgg\Http\ErrorResponse
and Elgg\Http\RedirectResponse
were extensions of Elgg\Http\OkReponse
this
complicated validating responses (for example in hooks). The classes have been split apart to allow for easier and clearer checks.
All classes now extend Elgg\Http\Response
and implement Elgg\Http\ReponseBuilder
. The default HTTP error code when using
elgg_error_response()
has been changed to return a 400 status.
Datamodel
Schema changes
The
access_id
,owner_guid
andenabled
columns in themetadata
table have been removedThe
enabled
column in theriver
table has been removedThe
relationship
column in theentity_relationships
table now has a max length of 255 (up from 50)
ElggEntity attributes
Setting the type
, subtype
and enabled
attributes of an ElggEntity
is no longer possible using the magic setter.
Changing the type
is no longer possible, use the correct base class for your entity (eg. ElggObject
, ElggGroup
or ElggUser
).
To change the subtype
use the function setSubtype($subtype)
// this no longer works and throws an \Elgg\Exceptions\InvalidArgumentException
$object = new ElggObject();
$object->subtype = 'my_subtype';
// The correct use is
$object->setSubtype('my_subtype');
To change the enabled
state of an entity use the correct functions
// this no longer works and throws an \Elgg\Exceptions\InvalidArgumentException
$object = new ElggObject();
$object->enabled = 'no';
// The correct use is
$object->enable(); // to enable
$object->disable(); // to disable
ElggUser attributes
Setting the admin
and banned
metadata of an ElggUser
is no longer possible using the magic setter.
To change the admin
state use the functions makeAdmin()
and removeAdmin()
// this no longer works and throws an \Elgg\Exceptions\InvalidArgumentException
$user = new ElggUser()
$user->admin = 'yes';
// The correct use is
$user->makeAdmin(); // to give the admin role
$user->removeAdmin(); // to remove the admin role
To change the banned
state use the functions ban()
and unban()
// this no longer works and throws an \Elgg\Exceptions\InvalidArgumentException
$user = new ElggUser()
$user->banned = 'yes';
// The correct use is
$user->ban(); // to ban the user
$user->unban(); // to unban the user
Plugin development
Plugin bootstrapping
The following files are no longer included during bootstrapping of a plugin:
activate.php
usePluginBootstrap->activate()
deactivate.php
usePluginBootstrap->deactivate()
views.php
useelgg-plugin.php
start.php
useelgg-plugin.php
and/orPluginBootstrap
Plugin Manifest
The plugin manifest file is no longer used. Features of the manifest have been removed or moved to different locations.
It is no longer possible to require a specific php ini setting.
php version requirement -> composer require
php extension requirement -> composer require
plugin conflicts -> composer conflicts
plugin requirement -> elgg-plugin
plugin position requirement -> elgg-plugin
plugin version -> elgg-plugin
plugin activate on install -> elgg-plugin
plugin name -> elgg-plugin
plugin description -> composer.json
plugin categories -> composer.json
plugin license -> composer.json
plugin repo link -> composer.json
plugin issues link -> composer.json
plugin homepage link -> composer.json
plugin authors/contributors -> composer.json
Hookable field configurations
Some plugins had the option to configure entity fields in config. These features have been replaced by a central service that provides a mechanisme to request a hookable field config for a certain type/subtype.
You can request these configuration using the following code:
$fields = elgg()->fields->get('<entity_type>', '<entity_subtype');
The results will be an array with field configurations usable in elgg_view_field($field)
The following related functionality has been replaced by this new way:
The config for
pages
is no longer available inelgg_get_config('pages')
useelgg()->fields->get('object', 'page')
The config for
group
is no longer available inelgg_get_config('group')
useelgg()->fields->get('group', 'group')
The config for
profile_fields
is no longer available inelgg_get_config('profile_fields')
useelgg()->fields->get('user', 'user')
Setting the config for
pages
,group
anduser:profile
viaelgg_set_config
is no longer possible. Use a hook callback forfields, <entity_type>:<entity_subtype>
.The hook
profile:fields, group
has been replaced by the new hookfields, group:group
The hook
profile:fields, user
has been replaced by the new hookfields, user:user
Registering tag metadatanames
Because of various limitations of this implementation it has been removed from the system. The following related API functions have been removed:
elgg_get_registered_tag_metadata_names()
elgg_register_tag_metadata_name()
elgg_unregister_tag_metadata_name()
If you need specific fields to be searchable you need to register them with the related search:fields
hooks.
The related tagnames:xxx
tag language keys are no longer registered in the system.
The function ElggEntity::getTags()
will now return only tag metadata with the name tags
by default. If you want to check extra fields
containing tags, you need to request this specifically.
Default widgets
The magic handling the creation of default widgets has been reduced. You now need to register the Elgg\Widgets\CreateDefaultWidgetsHandler
callback to the event when you want default widgets to be created.
The configuration default_widget_info
is no longer present in the system. Use the get_list
, default_widgets
hook to get the value.
You also need to update the data in your get_list
, default_widgets
hook handler to return event_name
(previously event
) and event_type
.
Container permissions
The function parameters for ElggEntity::canWriteToContainer()
now require a $type
and $subtype
to be passed. This is to give more
information to the resulting hook in order to be able to determine if a user is allowed write access to the container.
Plugins
Activity plugin
This plugin received a much needed rewrite. The different pages (all/owner/friends) now have their own resource and listing views.
Diagnostics Plugin
This plugin has been removed, but the action to generate a report is still available. You can find it on the Information/Server
admin page.
Discussions Plugin
This plugin no longer adds a tab to the filter menu on the groups pages
The
discussions
site menu item is now always present
Search Plugin
The output of search results no longer uses the helper class Elgg\Search\Formatter
for the preparation of the result contents. This logic
has been moved entirely into views.
The related functions prepareEntity
and getSearchView
in the Elgg\Search\Service
class have been removed.
The hook search:format, entity
has been removed.
Web services Plugin
The Web Services plugin received a complete rewrite, this is mostly related to the internals of the plugin.
Removed classes
ElggHMACCache
has been replaced by_elgg_services()->hmacCacheTable
(for internal use only)Elgg\Notifications\Event
has been replaced byElgg\Notifications\SubscriptionNotificationEvent
Removed functions
create_api_user()
has been replaced by_elgg_services()->apiUsersTable->createApiUser()
create_user_token()
has been replaced by_elgg_services()->usersApiSessions->createToken()
get_api_user()
has been replaced by_elgg_services()->apiUsersTable->getApiUser()
get_standard_api_key_array()
use\Elgg\WebServices\ElggApiClient::setApiKeys()
get_user_tokens()
has been replaced by_elgg_services()->usersApiSessions->getUserTokens()
pam_auth_session()
remove_api_user()
has been replaced by_elgg_services()->apiUsersTable->removeApiUser()
remove_expired_user_tokens()
has been replaced by_elgg_services()->usersApiSessions->removeExpiresTokens()
remove_user_token()
has been replaced by_elgg_services()->usersApiSessions->removeToken()
send_api_call()
use\Elgg\WebServices\ElggApiClient
send_api_get_call()
use\Elgg\WebServices\ElggApiClient
send_api_post_call()
use\Elgg\WebServices\ElggApiClient
service_handler()
validate_user_token()
has been replaced by_elgg_services()->usersApiSessions->validateToken()
ws_page_handler()
ws_rest_handler()
has been replaced by\Elgg\WebServices\RestServiceController
Miscellaneous changes
The config value for
servicehandler
has been removedIn certain edge cases the default value of an API parameter will not be applied
Type hinted functions
The following functions now have their arguments type-hinted, this can cause TypeError
errors.
Also some class functions have their return value type hinted and you should update your function definition.
Class function parameters
ElggEntity::setLatLong()
now requires afloat
for$lat
and$long
ElggUser::setNotificationSetting()
now requires astring
for$method
and abool
for$enabled
Elgg\Database\Seeds\Seed::__construct()
now requires anint
for$limit
Elgg\Http\ErrorResponse::__construct()
now requires anint
for$status_code
Elgg\Http\OkResponse::__construct()
now requires anint
for$status_code
Elgg\Http\RedirectResponse::__construct()
now requires anint
for$status_code
Elgg\I18n\Translator::getInstalledTranslations()
now requires abool
for$calculate_completeness
SiteNotification::setActor()
now requires anElggEntity
for$entity
SiteNotification::setURL()
now requires astring
for$url
SiteNotification::setRead()
now requires abool
for$read
Class function return type
Elgg\Upgrade\Batch::getVersion()
now requires anint
return valueElgg\Upgrade\Batch::shouldBeSkipped()
now requires anbool
return valueElgg\Upgrade\Batch::needsIncrementOffset()
now requires anbool
return valueElgg\Upgrade\Batch::countItems()
now requires anint
return valueElgg\Upgrade\Batch::run()
now requires anElgg\Upgrade\Result
return value
Lib function parameters
add_user_to_access_collection()
now requires anint
for$user_guid
and$collection_id
can_edit_access_collection()
now requires anint
for$collection_id
and$user_guid
create_access_collection()
now requires anstring
for$name
andint
for$owner_guid
delete_access_collection()
now requires anint
for$collection_id
elgg_action_exists()
now requires astring
for$action
elgg_add_admin_notice()
now requires astring
for$id
and$message
elgg_admin_notice_exists()
now requires astring
for$id
elgg_annotation_exists()
now requires aint
for$entity_guid
, astring
for$name
andint
for$owner_guid
elgg_delete_admin_notice()
now requires astring
for$id
elgg_delete_annotation_by_id()
now requires aint
for$id
elgg_deprecated_notice()
now requires astring
for$msg
and$dep_version
elgg_error_response()
now requires anint
for$status_code
elgg_get_access_collections()
now requires anarray
for$options
elgg_get_annotation_from_id()
now requires anint
for$id
elgg_get_subscriptions_for_container()
now requires anint
for$container_guid
elgg_get_plugin_from_id()
now requires astring
for$plugin_id
elgg_get_plugin_setting()
now requires astring
for$name
and$plugin_id
elgg_get_plugin_user_setting()
now requires astring
for$name
and$plugin_id
andint
for$user_guid
elgg_get_plugins()
now requires astring
for$status
elgg_get_river_item_from_id()
now requires aint
for$id
elgg_list_annotations()
now requires anarray
for$options
elgg_ok_response()
now requires anint
for$status_code
elgg_plugin_exists()
now requires astring
for$plugin_id
elgg_redirect_response()
now requires anint
for$status_code
elgg_register_action()
now requires astring
for$action
and$access
elgg_send_email()
now requires an\Elgg\Email
for$email
elgg_set_plugin_user_setting()
now requires astring
for$name
and$plugin_id
andint
for$user_guid
elgg_unregister_action()
now requires astring
for$action
get_access_array()
now requires anint
for$user_guid
get_access_collection()
now requires anint
for$collection_id
get_entity_statistics()
now requires anint
for$owner_guid
get_members_of_access_collection()
now requires anint
for$collection_id
andbool
for$guids_only
get_readable_access_level()
now requires anint
for$entity_access_id
get_write_access_array()
now requires anint
for$user_guid
andbool
for$flush
has_access_to_entity()
now requires anElggEntity
for$entity
andElggUser
for$user
remove_user_from_access_collection()
now requires anint
for$user_guid
and$collection_id
system_log_get_log()
now requires anarray
for$options
messageboard_add()
now requires anElggUser
,ElggUser
,string
and anint
elgg_register_external_file()
now requires all arguments to be of the typestring
elgg_unregister_external_file()
now requires all arguments to be of the typestring
elgg_load_external_file()
now requires all arguments to be of the typestring
elgg_get_loaded_external_files()
now requires all arguments to be of the typestring
Change in function parameters
Class functions
Elgg\Http\ResponseBuilder::setStatusCode()
no longer has a default valueElggEntity::canWriteToContainer()
no longer has a default value for$type
and$subtype
but these are required
Lib functions
elgg_get_page_owner_guid()
no longer accepts$guid
as a parameterget_access_array()
no longer accepts$flush
as a parameterelgg_register_external_file()
no longer accepts$priority
as a parameter
Renamed hook/event handler callbacks
Special attention is required if you unregister the callbacks in your plugins as you might need to update your code.
Core
access_friends_acl_get_name()
changed toElgg\Friends\AclNameHandler::class
access_friends_acl_add_friend()
changed toElgg\Friends\AddToAclHandler::class
access_friends_acl_create()
changed toElgg\Friends\CreateAclHandler::class
access_friends_acl_remove_friend()
changed toElgg\Friends\RemoveFromAclHandler::class
_elgg_add_admin_widgets()
changed toElgg\Widgets\CreateAdminWidgetsHandler::class
_elgg_admin_check_admin_validation()
changed toElgg\Users\Validation::checkAdminValidation()
_elgg_admin_header_menu()
changed toElgg\Menus\AdminHeader::register()
andElgg\Menus\AdminHeader::registerMaintenance()
_elgg_admin_footer_menu()
changed toElgg\Menus\AdminFooter::registerHelpResources()
_elgg_admin_notify_admins_pending_user_validation()
changed toElgg\Users\Validation::notifyAdminsAboutPendingUsers()
_elgg_admin_page_menu()
changed toElgg\Menus\Page::registerAdminAdminister()
andElgg\Menus\Page::registerAdminConfigure()
andElgg\Menus\Page::registerAdminInformation()
_elgg_admin_page_menu_plugin_settings()
changed toElgg\Menus\Page::registerAdminPluginSettings()
_elgg_admin_prepare_admin_notification_make_admin()
changed toElgg\Notifications\MakeAdminUserEventHandler
_elgg_admin_prepare_admin_notification_remove_admin()
changed toElgg\Notifications\RemoveAdminUserEventHandler
_elgg_admin_prepare_user_notification_make_admin()
changed toElgg\Notifications\MakeAdminUserEventHandler
_elgg_admin_prepare_user_notification_remove_admin()
changed toElgg\Notifications\RemoveAdminUserEventHandler
_elgg_admin_save_notification_setting()
changed toElgg\Users\Settings::setAdminValidationNotification()
_elgg_admin_set_registration_forward_url()
changed toElgg\Users\Validation::setRegistrationForwardUrl()
_elgg_admin_user_unvalidated_bulk_menu()
changed toElgg\Menus\UserUnvalidatedBulk::registerActions()
_elgg_admin_user_validation_login_attempt()
changed toElgg\Users\Validation::preventUserLogin()
_elgg_admin_user_validation_notification()
changed toElgg\Users\Validation::notifyUserAfterValidation()
_elgg_admin_upgrades_menu()
changed toElgg\Menus\Filter::registerAdminUpgrades()
_elgg_cache_init()
actions combined inElgg\Application\SystemEventHandlers::ready()
_elgg_clear_caches()
changed toElgg\Cache\EventHandlers::clear()
_elgg_comments_access_sync()
changed toElgg\Comments\SyncContainerAccessHandler::class
_elgg_comments_container_permissions_override()
changed toElgg\Comments\ContainerPermissionsHandler::class
_elgg_comments_permissions_override()
changed toElgg\Comments\EditPermissionsHandler::class
_elgg_comments_prepare_content_owner_notification()
changed toElgg\Notifications\CreateCommentEventHandler
_elgg_comments_prepare_notification()
changed toElgg\Notifications\CreateCommentEventHandler
_elgg_comments_social_menu_setup()
changed toElgg\Menus\Social::registerComments()
_elgg_create_default_widgets()
changed toElgg\Widgets\CreateDefaultWidgetsHandler::class
_elgg_create_notice_of_pending_upgrade()
changed toElgg\Upgrade\CreateAdminNoticeHandler::class
_elgg_db_register_seeds()
changed toElgg\Database\RegisterSeedsHandler::class
_elgg_disable_caches()
changed toElgg\Cache\EventHandlers::disable()
_elgg_default_widgets_permissions_override()
changed toElgg\Widgets\DefaultWidgetsContainerPermissionsHandler::class
_elgg_disable_password_autocomplete()
changed toElgg\Input\DisablePasswordAutocompleteHandler::class
_elgg_enable_caches()
changed toElgg\Cache\EventHandlers::enable()
_elgg_filestore_move_icons()
changed toElgg\Icons\MoveIconsOnOwnerChangeHandler::class
_elgg_filestore_touch_icons()
changed toElgg\Icons\TouchIconsOnAccessChangeHandler::class
_elgg_head_manifest()
changed toElgg\Views\AddManifestLinkHandler::class
_elgg_annotations_default_menu_items()
changed toElgg\Menus\Annotation::registerDelete()
_elgg_walled_garden_menu()
changed toElgg\Menus\WalledGarden::registerHome()
_elgg_site_menu_init()
changed toElgg\Menus\Site::registerAdminConfiguredItems()
_elgg_site_menu_setup()
changed toElgg\Menus\Site::reorderItems()
_elgg_entity_menu_setup()
changed toElgg\Menus\Entity::registerEdit()
andElgg\Menus\Entity::registerDelete()
_elgg_entity_navigation_menu_setup()
changed toElgg\Menus\EntityNavigation::registerPreviousNext()
_elgg_enqueue_notification_event()
changed toElgg\Notifications\EnqueueEventHandler::class
_elgg_groups_container_override()
changed toElgg\Groups\MemberPermissionsHandler::class
_elgg_groups_comment_permissions_override()
changed toElgg\Comments\GroupMemberPermissionsHandler::class
_elgg_htmlawed_filter_tags()
changed toElgg\Input\ValidateInputHandler::class
_elgg_invalidate_caches()
changed toElgg\Cache\EventHandlers::invalidate()
_elgg_widget_menu_setup()
changed toElgg\Menus\Widget::registerEdit()
andElgg\Menus\Widget::registerDelete()
_elgg_login_menu_setup()
changed toElgg\Menus\Login::registerRegistration()
andElgg\Menus\Widget::registerResetPassword()
_elgg_nav_public_pages()
changed toElgg\WalledGarden\ExtendPublicPagesHandler::class
_elgg_notifications_cron()
changed toElgg\Notifications\ProcessQueueCronHandler::class
_elgg_notifications_smtp_default_message_id_header()
changed toElgg\Email\DefaultMessageIdHeaderHandler::class
_elgg_notifications_smtp_thread_headers()
changed toElgg\Email\ThreadHeadersHandler::class
_elgg_rebuild_public_container()
changed toElgg\Cache\EventHandlers::rebuildPublicContainer()
_elgg_river_update_object_last_action()
changed toElgg\River\UpdateLastActionHandler::class
_elgg_rss_menu_setup()
changed toElgg\Menus\Footer::registerRSS()
_elgg_plugin_entity_menu_setup()
changed toElgg\Menus\Entity::registerPlugin()
_elgg_purge_caches()
changed toElgg\Cache\EventHandlers::purge()
_elgg_river_menu_setup()
changed toElgg\Menus\River::registerDelete()
_elgg_save_notification_user_settings()
changed toElgg\Notifications\SaveUserSettingsHandler::class
_elgg_session_cleanup_persistent_login()
changed toElgg\Users\CleanupPersistentLoginHandler::class
_elgg_set_lightbox_config()
changed toElgg\Javascript\SetLightboxConfigHandler::class
_elgg_set_user_default_access()
changed toElgg\Users\Settings::setDefaultAccess()
_elgg_set_user_email()
changed toElgg\Users\Settings::setEmail()
_elgg_set_user_password()
changed toElgg\Users\Settings::setPassword()
_elgg_set_user_language()
changed toElgg\Users\Settings::setLanguage()
_elgg_set_user_name()
changed toElgg\Users\Settings::setName()
_elgg_set_user_username()
changed toElgg\Users\Settings::setUsername()
_elgg_send_email_notification()
changed toElgg\Notifications\SendEmailHandler::class
_elgg_upgrade_completed()
changed toElgg\Upgrade\UpgradeCompletedAdminNoticeHandler::class
_elgg_upgrade_entity_menu()
changed toElgg\Menus\Entity::registerUpgrade()
_elgg_user_ban_notification()
changed toElgg\Users\BanUserNotificationHandler::class
_elgg_user_get_subscriber_unban_action()
changed toElgg\Notifications\UnbanUserEventHandler
_elgg_user_prepare_unban_notification()
changed toElgg\Notifications\UnbanUserEventHandler
_elgg_user_settings_menu_register()
changed toElgg\Menus\Page::registerUserSettings()
andElgg\Menus\Page::registerUserSettingsPlugins()
_elgg_user_settings_menu_prepare()
changed toElgg\Menus\Page::cleanupUserSettingsPlugins()
elgg_user_hover_menu()
changed toElgg\Menus\UserHover::registerAvatarEdit()
andElgg\Menus\UserHover::registerAdminActions()
_elgg_user_set_icon_file()
changed toElgg\Icons\SetUserIconFileHandler::class
_elgg_user_title_menu()
changed toElgg\Menus\Title::registerAvatarEdit()
_elgg_user_page_menu()
changed toElgg\Menus\Page::registerAvatarEdit()
_elgg_user_topbar_menu()
changed toElgg\Menus\Topbar::registerUserLinks()
_elgg_user_unvalidated_menu()
changed toElgg\Menus\UserUnvalidated::register()
_elgg_views_amd()
changed toElgg\Views\AddAmdModuleNameHandler::class
_elgg_views_file_help_upload_limit()
changed toElgg\Input\AddFileHelpTextHandler::class
_elgg_views_init()
combined intoElgg\Application\SystemEventHandlers::init()
_elgg_views_minify()
changed toElgg\Views\MinifyHandler::class
_elgg_views_prepare_favicon_links()
changed toElgg\Page\AddFaviconLinksHandler::class
_elgg_views_preprocess_css()
changed toElgg\Views\PreProcessCssHandler::class
_elgg_views_send_header_x_frame_options()
changed toElgg\Page\SetXFrameOptionsHeaderHandler::class
_elgg_walled_garden_init()
merged intoElgg\Application\SystemEventHandlers::initLate()
_elgg_walled_garden_remove_public_access()
changed toElgg\WalledGarden\RemovePublicAccessHandler::class
_elgg_widgets_widget_urls()
changed toElgg\Widgets\EntityUrlHandler::class
elgg_prepare_breadcrumbs()
changed toElgg\Page\PrepareBreadcrumbsHandler::class
Elgg\Profiler::handleOutput
changed toElgg\Debug\Profiler::class
users_init
combined intoElgg\Application\SystemEventHandlers::initLate()
Plugins
_developers_entity_menu
changed toElgg\Developers\Menus\Entity::registerEntityExplorer
_developers_page_menu
changed toElgg\Developers\Menus\Page::register
_elgg_activity_owner_block_menu
changed toElgg\Activity\Menus\OwnerBlock::registerUserItem
andElgg\Activity\Menus\OwnerBlock::registerGroupItem
blog_archive_menu_setup
changed toElgg\Blog\Menus\BlogArchive::register
blog_owner_block_menu
changed toElgg\Blog\Menus\OwnerBlock::registerUserItem
andElgg\Blog\Menus\OwnerBlock::registerGroupItem
blog_prepare_notification
changed toElgg\Blog\Notifications\PublishBlogEventHandler
blog_register_db_seeds
changed toElgg\Blog\Database::registerSeeds
bookmarks_footer_menu
changed toElgg\Bookmarks\Menus\Footer::register
bookmarks_owner_block_menu
changed toElgg\Bookmarks\Menus\OwnerBlock::registerUserItem
andElgg\Bookmarks\Menus\OwnerBlock::registerGroupItem
bookmarks_page_menu
changed toElgg\Bookmarks\Menus\Page::register
bookmarks_prepare_notification
changed toElgg\Bookmarks\Notifications\CreateBookmarksEventHandler
bookmarks_register_db_seeds
changed toElgg\Bookmarks\Database::registerSeeds
ckeditor_longtext_id
changed toElgg\CKEditor\Views::setInputLongTextIDViewVar
ckeditor_longtext_menu
changed toElgg\CKEditor\Menus\LongText::registerToggler
dashboard_default_widgets
changed toElgg\Dashboard\Widgets::extendDefaultWidgetsList
developers_log_events
changed toElgg\Developers\HandlerLogger::trackEvent
andElgg\Developers\HandlerLogger::trackHook
diagnostics_basic_hook
changed toElgg\Diagnostics\Reports::getBasic
diagnostics_globals_hook
changed toElgg\Diagnostics\Reports::getGlobals
diagnostics_phpinfo_hook
changed toElgg\Diagnostics\Reports::getPHPInfo
diagnostics_sigs_hook
changed toElgg\Diagnostics\Reports::getSigs
discussion_comment_permissions
changed toElgg\Discussions\Permissions::preventCommentOnClosedDiscussion
discussion_get_subscriptions
changed toElgg\Discussions\Notifications::addGroupSubscribersToCommentOnDiscussionSubscriptions
discussion_owner_block_menu
changed toElgg\Discussions\Menus\OwnerBlock::registerGroupItem
discussion_prepare_comment_notification
changed toElgg\Discussions\Notifications::prepareCommentOnDiscussionNotification
discussion_prepare_notification
changed toElgg\Discussions\Notifications\CreateDiscussionEventHandler
discussion_register_db_seeds
changed toElgg\Discussions\Database::registerSeeds
Elgg\DevelopersPlugins\*
changed toElgg\Developers\*
Elgg\Discussions\Menus::registerSiteMenuItem
changed toElgg\Discussions\Menus\Site::register
Elgg\Discussions\Menus::filterTabs
changed toElgg\Discussions\Menus\Filter::filterTabsForDiscussions
embed_longtext_menu
changed toElgg\Embed\Menus\LongText::register
embed_select_tab
changed toElgg\Embed\Menus\Embed::selectCorrectTab
embed_set_thumbnail_url
changed toElgg\Embed\Icons::setThumbnailUrl
expages_menu_register_hook
changed toElgg\ExternalPages\Menus\ExPages::register
file_handle_object_delete
changed toElgg\File\Icons::deleteIconOnElggFileDelete
file_prepare_notification
changed toElgg\File\Notifications\CreateFileEventHandler
file_register_db_seeds
changed toElgg\File\Database::registerSeeds
file_set_custom_icon_sizes
changed toElgg\File\Icons::setIconSizes
file_set_icon_file
changed toElgg\File\Icons::setIconFile
file_set_icon_url
changed toElgg\File\Icons::setIconUrl
file_owner_block_menu
changed toElgg\File\Menus\OwnerBlock::registerUserItem
andElgg\File\Menus\OwnerBlock::registerGroupItem
_elgg_friends_filter_tabs
changed toElgg\Friends\Menus\Filter::registerFilterTabs
_elgg_friends_page_menu
changed toElgg\Friends\Menus\Page::register
_elgg_friends_register_access_type
changed toElgg\Friends\Access::registerAccessCollectionType
_elgg_friends_setup_title_menu
changed toElgg\Friends\Menus\Title::register
_elgg_friends_setup_user_hover_menu
changed toElgg\Friends\Menus\UserHover::register
_elgg_friends_topbar_menu
changed toElgg\Friends\Menus\Topbar::register
_elgg_friends_widget_urls
changed toElgg\Friends\Widgets::setWidgetUrl
_elgg_send_friend_notification
changed toElgg\Friends\Notifications::sendFriendNotification
Elgg\Friends\FilterMenu::addFriendRequestTabs
changed toElgg\Friends\Menus\Filter::addFriendRequestTabs
Elgg\Friends\RelationshipMenu::addPendingFriendRequestItems
changed toElgg\Friends\Menus\Relationship::addPendingFriendRequestItems
Elgg\Friends\RelationshipMenu::addPendingFriendRequestItems
changed toElgg\Friends\Menus\Relationship::addPendingFriendRequestItems
Elgg\Friends\Relationships::createFriendRelationship
changed toElgg\Friends\Relationships::removePendingFriendRequest
_groups_gatekeeper_allow_profile_page
changed toElgg\Groups\Access::allowProfilePage
_groups_page_menu
changed toElgg\Groups\Menus\Page::register
_groups_page_menu_group_profile
changed toElgg\Groups\Menus\Page::registerGroupProfile
_groups_relationship_invited_menu
changed toElgg\Groups\Menus\Relationship::registerInvitedItems
_groups_relationship_member_menu
changed toElgg\Groups\Menus\Relationship::registerRemoveUser
_groups_relationship_membership_request_menu
changed toElgg\Groups\Menus\Relationship::registerMembershipRequestItems
_groups_title_menu
changed toElgg\Groups\Menus\Title::register
_groups_topbar_menu_setup
changed toElgg\Groups\Menus\Topbar::register
groups_access_default_override
changed toElgg\Groups\Access::overrideDefaultAccess
groups_create_event_listener
changed toElgg\Groups\Group::createAccessCollection
groups_default_page_owner_handler
changed toElgg\Groups\PageOwner::detectPageOwner
groups_entity_menu_setup
changed toElgg\Groups\Menus\Entity::register
andElgg\Groups\Menus\Entity::registerFeature
groups_fields_setup
changed toElgg\Groups\FieldsHandler
groups_members_menu_setup
changed toElgg\Groups\Menus\GroupsMembers::register
groups_set_access_collection_name
changed toElgg\Groups\Access::getAccessCollectionName
groups_set_url
changed toElgg\Groups\Group::getEntityUrl
groups_setup_filter_tabs
changed toElgg\Groups\Menus\Filter::registerGroupsAll
groups_update_event_listener
changed toElgg\Groups\Group::updateGroup
groups_user_join_event_listener
changed toElgg\Groups\Group::joinGroup
groups_user_leave_event_listener
changed toElgg\Groups\Group::leaveGroup
groups_write_acl_plugin_hook
changed toElgg\Groups\Access::getWriteAccess
invitefriends_add_friends
changed toElgg\InviteFriends\Users::addFriendsOnRegister
invitefriends_register_page_menu
changed toElgg\InviteFriends\Menus\Page::register
likes_permissions_check
changed toElgg\Likes\Permissions::allowLikedEntityOwner
likes_permissions_check_annotate
changed toElgg\Likes\Permissions::allowLikeOnEntity
likes_social_menu_setup
changed toElgg\Likes\Menus\Social::register
members_register_filter_menu
changed toElgg\Members\Menus\Filter::register
messages_can_edit
changed toElgg\Messages\Permissions::canEdit
messages_can_edit_container
changed toElgg\Messages\Permissions::canEditContainer
messages_purge
changed toElgg\Messages\User::purgeMessages
messages_register_topbar
changed toElgg\Messages\Menus\Topbar::register
messages_user_hover_menu
changed toElgg\Messages\Menus\UserHover::register
andElgg\Messages\Menus\Title::register
notifications_update_collection_notify
changed toElgg\Notifications\Relationships::updateUserNotificationsPreferencesOnACLChange
notifications_update_friend_notify
changed toElgg\Friends\Relationships::applyFriendNotificationsSettings
notifications_relationship_remove
changed toElgg\Friends\Relationships::deleteFriendNotificationSubscription
andElgg\Groups\Relationships::removeGroupNotificationSubscriptions
_notifications_page_menu
changed toElgg\Notifications\Menus\Page::register
_notification_groups_title_menu
changed toElgg\Notifications\Menus\Title::register
pages_container_permission_check
changed toElgg\Pages\Permissions::allowContainerWriteAccess
pages_entity_menu_setup
changed toElgg\Pages\Menus\Entity::register
pages_icon_url_override
changed toElgg\Pages\Icons::getIconUrl
pages_owner_block_menu
changed toElgg\Pages\Menus\OwnerBlock::registerUserItem
andElgg\Pages\Menus\OwnerBlock::registerGroupItem
pages_prepare_notification
changed toElgg\Pages\Notifications\CreatePageEventHandler
pages_register_db_seeds
changed toElgg\Pages\Database::registerSeeds
pages_set_revision_url
changed toElgg\Pages\Extender::setRevisionUrl
pages_write_access_options_hook
changed toElgg\Pages\Views::removeAccessPublic
pages_write_access_vars
changed toElgg\Pages\Views::preventAccessPublic
pages_write_permission_check
changed toElgg\Pages\Permissions::allowWriteAccess
Elgg\Pages\Menus::registerPageMenuItems
changed toElgg\Pages\Menus\PagesNav::register
_profile_admin_page_menu
changed toElgg\Profile\Menus\Page::registerAdminProfileFields
_profile_fields_setup
changed toElgg\Profile\FieldsHandler
_profile_title_menu
changed toElgg\Profile\Menus\Title::register
_profile_topbar_menu
changed toElgg\Profile\Menus\Topbar::register
_profile_user_hover_menu
changed toElgg\Profile\Menus\UserHover::register
_profile_user_page_menu
changed toElgg\Profile\Menus\Page::registerProfileEdit
profile_default_widgets_hook
changed toElgg\Profile\Widgets::getDefaultWidgetsList
reportedcontent_user_hover_menu
changed toElgg\ReportedContent\Menus\UserHover::register
search_exclude_robots
changed toElgg\Search\Site::preventSearchIndexing
search_output_tag
changed toElgg\Search\Views::setSearchHref
site_notifications_register_entity_menu
changed toElgg\SiteNotifications\Menus\Entity::register
site_notifications_send
changed toElgg\SiteNotifications\Notifications::createSiteNotifications
_uservalidationbyemail_user_unvalidated_bulk_menu
changed toElgg\UserValidationByEmail\Menus\UserUnvalidatedBulk::register
_uservalidationbyemail_user_unvalidated_menu
changed toElgg\UserValidationByEmail\Menus\UserUnvalidated::register
uservalidationbyemail_after_registration_url
changed toElgg\UserValidationByEmail\Response::redirectToEmailSent
uservalidationbyemail_check_manual_login
changed toElgg\UserValidationByEmail\User::preventLogin
uservalidationbyemail_disable_new_user
changed toElgg\UserValidationByEmail\User::disableUserOnRegistration
system_log_archive_cron
changed toElgg\SystemLog\Cron::rotateLogs
system_log_default_logger
changed toElgg\SystemLog\Logger::log
system_log_delete_cron
changed toElgg\SystemLog\Cron::deleteLogs
system_log_listener
changed toElgg\SystemLog\Logger::listen
system_log_user_hover_menu
changed toElgg\SystemLog\Menus\UserHover::register
thewire_add_original_poster
changed toElgg\TheWire\Notifications\CreateTheWireEventHandler
thewire_owner_block_menu
changed toElgg\TheWire\Menus\OwnerBlock::register
thewire_prepare_notification
changed toElgg\TheWire\Notifications\CreateTheWireEventHandler
thewire_setup_entity_menu_items
changed toElgg\TheWire\Menus\Entity::register
Reworked exceptions
All exceptions in the Elgg system now extend the Elgg\Exceptions\Exception
and are in the namespace Elgg\Exceptions
Moved exceptions
ClassException
useElgg\Exceptions\ClassException
ConfigurationException
useElgg\Exceptions\ConfigurationException
CronException
useElgg\Exceptions\CronException
DatabaseException
useElgg\Exceptions\DatabaseException
DataFormatException
useElgg\Exceptions\DataFormatException
InstallationException
useElgg\Exceptions\Configuration\InstallationException
InvalidParameterException
useElgg\Exceptions\InvalidParameterException
IOException
useElgg\Exceptions\FileSystem\IOException
LoginException
useElgg\Exceptions\LoginException
PluginException
useElgg\Exceptions\PluginException
RegistrationException
useElgg\Exceptions\Configuration\RegistrationException
SecurityException
useElgg\Exceptions\SecurityException
Elgg\Database\EntityTable\UserFetchFailureException
useElgg\Exceptions\Database\UserFetchFailureException
Elgg\Di\FactoryUncallableException
useElgg\Exceptions\Di\FactoryUncallableException
Elgg\Di\MissingValueException
useElgg\Exceptions\Di\MissingValueException
Elgg\Http\Exception\AdminGatekeeperException
useElgg\Exceptions\Http\Gatekeeper\AdminGatekeeperException
Elgg\Http\Exception\AjaxGatekeeperException
useElgg\Exceptions\Http\Gatekeeper\AjaxGatekeeperException
Elgg\Http\Exception\GroupToolGatekeeperException
useElgg\Exceptions\Http\Gatekeeper\GroupToolGatekeeperException
Elgg\Http\Exception\LoggedInGatekeeperException
useElgg\Exceptions\Http\Gatekeeper\LoggedInGatekeeperException
Elgg\Http\Exception\LoggedOutGatekeeperException
useElgg\Exceptions\Http\Gatekeeper\LoggedOutGatekeeperException
Elgg\Http\Exception\UpgradeGatekeeperException
useElgg\Exceptions\Http\Gatekeeper\UpgradeGatekeeperException
Elgg\I18n\InvalidLocaleException
useElgg\Exceptions\I18n\InvalidLocaleException
Elgg\BadRequestException
useElgg\Exceptions\Http\BadRequestException
Elgg\CsrfException
useElgg\Exceptions\Http\CsrfException
Elgg\EntityNotFoundException
useElgg\Exceptions\Http\EntityNotFoundException
Elgg\EntityPermissionsException
useElgg\Exceptions\Http\EntityPermissionsException
Elgg\GatekeeperException
useElgg\Exceptions\Http\GatekeeperException
Elgg\GroupGatekeeperException
useElgg\Exceptions\Http\Gatekeeper\GroupGatekeeperException
Elgg\HttpException
useElgg\Exceptions\HttpException
Elgg\PageNotFoundException
useElgg\Exceptions\Http\PageNotFoundException
Elgg\ValidationException
useElgg\Exceptions\Http\ValidationException
Elgg\WalledGardenException
useElgg\Exceptions\Http\Gatekeeper\WalledGardenException
Removed exceptions
CallException
ClassNotFoundException
IncompleteEntityException
InvalidClassException
NotificationException
NotImplementedException
from the Web Services plugin
Reworked Traits
In order to better organize the Elgg namespace all Traits have been moved to the Elgg\Traits
namespace
Elgg\Cacheable
moved toElgg\Traits\Cacheable
Elgg\Cli\PluginsHelper
moved toElgg\Traits\Cli\PluginsHelper
Elgg\Cli\Progressing
moved toElgg\Traits\Cli\Progressing
Elgg\Database\Seeds\Seeding\GroupHelpers
moved toElgg\Traits\Seeding\GroupHelpers
Elgg\Database\Seeds\Seeding\TimeHelpers
moved toElgg\Traits\Seeding\TimeHelpers
Elgg\Database\Seeds\Seeding
moved toElgg\Traits\Seeding
Elgg\Database\LegacyQueryOptionsAdapter
moved toElgg\Traits\Database\LegacyQueryOptionsAdapter
Elgg\Debug\Profilable
moved toElgg\Traits\Debug\Profilable
Elgg\Di\ServiceFacade
moved toElgg\Traits\Di\ServiceFacade
Elgg\Entity\ProfileData
moved toElgg\Traits\Entity\ProfileData
Elgg\Loggable
moved toElgg\Traits\Loggable
Elgg\Notifications\EventSerialization
moved toElgg\Traits\Notifications\EventSerialization
Elgg\TimeUsing
moved toElgg\Traits\TimeUsing
Miscellaneous API changes
The defaults for
ignore_empty_body
andprevent_double_submit
when usingelgg_view_form
have been changed totrue
.The plugin settings forms (
plugins/{$plugin_id}/settings
) no longer receive$vars['plugin']
use$vars['entity']
Elgg\Router\Middleware\WalledGarden::isPublicPage()
can no longer be called staticallyElgg\Cli\PluginsHelper::getDependents()
is no longer publically availableElggPlugin::getLanguagesPath()
is no longer publically availableAn
\ElggBatch
no longer implements the interfaceElgg\BatchResult
but still has the same featuresAn
\ElggEntity
no longer implements the interfaceLocatable
but still has the same featuresAn
\Elgg\Event
no longer implements the interfaces\Elgg\ObjectEvent
and\Elgg\UserEvent
but still has the same featuresThe view
output/icon
no longer uses theconvert
view varElggData::save()
now always returns abool
as documented. All extending classes have been updated (eg.ElggEntity
,ElggMetadata
,ElggRelationship
, etc.)Elgg\Email::getTo()
now always returns anarray
ElggPlugin::activate()
andElggPlugin::deactivate()
now can throw anElgg\Exceptions\PluginException
with more details about the failure\ElggRelationship::RELATIONSHIP_LIMIT
has been removed use ElggDatabaseRelationshipsTable::RELATIONSHIP_COLUMN_LENGTH``The constants
ORIGIN_SUBSCRIPTIONS
andORIGIN_INSTANT
in\Elgg\Notifications\Notification
have been removedYou can no longer use the
delete, <entity_type>
event to prevent deletion of an entity. Use thedelete:before, <entity_type>
eventExternal Files are no longer ordered by priority but will be returned in the same order as they are registered
The interface
Friendable
has been removed. Implemented functions inElggUser
have been moved toElgg\Traits\Entity\Friends
The config flag
profile_using_custom
is no longer availableThe return value of
elgg_create_river_item()
will befalse
in the case the creation was prevented by the'create:before', 'river'
eventThe constant
ELGG_PLUGIN_USER_SETTING_PREFIX
has been removed use the helper function\ElggUser::getNamespacedPluginSettingName()
The constant
ELGG_PLUGIN_INTERNAL_PREFIX
has been removed to get the plugin priority private setting name use\ElggPlugin::PRIORITY_SETTING_NAME
The class
SiteNotificationFactory
was removed useSiteNotification::factory()
The class
Elgg\Email\Address
no longer throwsLaminas\Mail\Exception\InvalidArgumentException
but now throwsElgg\Exceptions\InvalidArgumentException
Deprecated APIs
Class functions
ElggPlugin::getUserSetting()
useElggUser::getPluginSetting()
ElggPlugin::setUserSetting()
useElggUser::setPluginSetting()
Lib functions
forward()
useElgg\Exceptions\HttpException
instances orelgg_redirect_response()
Plugin hooks
'usersettings', 'plugin'
use the hook'plugin_setting', '<entity type>'
Removed functions
Class functions
Elgg\Config::getEntityTypes()
useElgg\Config::ENTITY_TYPES
constantElggFile::setDescription()
use$file->description = $new_description
ElggGroup::addObjectToGroup()
ElggGroup::removeObjectFromGroup()
ElggPlugin::getAllUserSettings()
ElggPlugin::getDependencyReport()
ElggPlugin::getError()
ElggPlugin::unsetAllUserSettings()
ElggPlugin::unsetAllUserAndPluginSettings()
useElggPlugin::unsetAllEntityAndPluginSettings()
ElggWidget::getContext()
use$entity->context
ElggWidget::setContext()
use$entity->context = $context
Elgg\Notifications\NotificationsService::getDeprecatedHandler()
Elgg\Notifications\NotificationsService::getMethodsAsDeprecatedGlobal()
useelgg_get_notification_methods()
Elgg\Notifications\NotificationsService::registerDeprecatedHandler()
Elgg\Notifications\NotificationsService::setDeprecatedNotificationSubject()
Elgg\Email::getRecipient()
useElgg\Email::getTo()
Elgg\Email::setRecipient()
Elgg\Entity::getLocation()
use$entity->location
Elgg\Entity::setLocation()
use$entity->location = $location
Lib functions
access_get_show_hidden_status()
useelgg()->session->getDisabledEntityVisibility()
diagnostics_md5_dir()
elgg_add_subscription()
use\ElggEntity::addSubscription()
elgg_get_available_languages()
useelgg()->translator->getAvailableLanguages()
elgg_get_all_plugin_user_settings()
elgg_get_entities_from_plugin_user_settings()
useelgg_get_entities()
with private settings parameters and prefix your setting name withplugin:user_setting:
elgg_get_filter_tabs()
use menu hooks on'register', 'menu:filter:<filter_id>'
elgg_get_loaded_css()
useelgg_get_loaded_external_files('css', 'head')
elgg_get_loaded_js()
useelgg_get_loaded_external_files('js', $location)
elgg_get_system_messages()
useelgg()->system_messages->loadRegisters()
elgg_prepend_css_urls()
elgg_remove_subscription()
use\ElggEntity::removeSubscription()
elgg_set_plugin_setting()
use$plugin->setSetting($name, $value)
elgg_set_plugin_user_setting()
useElggUser::setPluginSetting()
elgg_set_system_messages()
useelgg()->system_messages->saveRegisters()
elgg_unset_plugin_setting()
use$plugin->unsetSetting($name)
elgg_unset_plugin_user_setting()
useElggUser::removePluginSetting()
get_language_completeness()
useelgg()->translator->getLanguageCompleteness()
get_installed_translations()
useelgg()->translator->getInstalledTranslations()
group_access_options()
pages_is_page()
system_log_get_log()
system_log_get_log_entry()
system_log_get_object_from_log_entry()
system_log_get_seconds_in_period()
system_log_archive_log()
system_log_browser_delete_log()
thewire_get_parent()
use\ElggWire::getParent()
validate_email_address()
useelgg()->accounts->assertValidEmail()
validate_password()
useelgg()->accounts->assertValidPassword()
validate_username()
useelgg()->accounts->assertValidUsername()
Removed views / resources
admin/develop_tools/inspect/webservices
elgg/thewire.js
input/urlshortener
messages/js
moved toforms/messages/process.js
navigation/menu/elements/item_deps
the functionality has been merged intonavigation/menu/elements/item
object/plugin/elements/contributors
notifications/groups
notifications/personal
usenotifications/settings
ornotifications/users
notifications/settings/personal
moved tonotifications/settings/records
notifications/settings/collections
notifications/settings/other
extendnotifications/settings/records
notifications/subscriptions/groups
useforms/notifications/subscriptions/groups
notifications/subscriptions/users
useforms/notifications/subscriptions/users
resources/comments/view
use\Elgg\Controllers\CommentEntityRedirector
resources/river
useresources/activity/all
orresources/activity/owner
orresources/activity/friends
reportedcontent/admin_css
thewire/previous
Removed hooks / events
Event
created, river
has been removed. Use thecreate:after, river
event.Hook
creating, river
has been removed. Use thecreate:before, river
event if you want to block the creation of a river item.Hook
filter_tabs, <context>
has been removed. Use theregister, menu:filter:<filter_id>
hookHook
output, ajax
has been removed. Use theajax_response
hook if you want to influence the results.Hook
reportedcontent:add
has been removed. Use thecreate, object
event to prevent creation.Hook
reportedcontent:archive
has been removed. Use thepermissions_check, object
hook.Hook
reportedcontent:delete
has been removed. Use thedelete, object
event to prevent deletion.
Removed actions
The action
reportedcontent/delete
has been replaced with a generic entity delete action