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-treeviewthe related js and css are no longer available in the systembower-asset/jquery.imgareaselectthe related js and css are no longer available in the systemnpm-asset/formdata-polyfillall modern browser have support, no longer a need for a polyfillnpm-asset/jquery-formuse native FormData functionalitynpm-asset/weakmap-polyfillall 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/widgetsno longer returns an object and no longer requires you to calliniton 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
subjectis stored intitleNotification
summaryis stored insummaryNotification
bodyis 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_guidandenabledcolumns in themetadatatable have been removedThe
enabledcolumn in therivertable has been removedThe
relationshipcolumn in theentity_relationshipstable 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.phpusePluginBootstrap->activate()deactivate.phpusePluginBootstrap->deactivate()views.phpuseelgg-plugin.phpstart.phpuseelgg-plugin.phpand/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
pagesis no longer available inelgg_get_config('pages')useelgg()->fields->get('object', 'page')The config for
groupis no longer available inelgg_get_config('group')useelgg()->fields->get('group', 'group')The config for
profile_fieldsis no longer available inelgg_get_config('profile_fields')useelgg()->fields->get('user', 'user')Setting the config for
pages,groupanduser:profileviaelgg_set_configis no longer possible. Use a hook callback forfields, <entity_type>:<entity_subtype>.The hook
profile:fields, grouphas been replaced by the new hookfields, group:groupThe hook
profile:fields, userhas 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
discussionssite 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
ElggHMACCachehas been replaced by_elgg_services()->hmacCacheTable(for internal use only)Elgg\Notifications\Eventhas 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\ElggApiClientsend_api_get_call()use\Elgg\WebServices\ElggApiClientsend_api_post_call()use\Elgg\WebServices\ElggApiClientservice_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
servicehandlerhas 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 afloatfor$latand$longElggUser::setNotificationSetting()now requires astringfor$methodand aboolfor$enabledElgg\Database\Seeds\Seed::__construct()now requires anintfor$limitElgg\Http\ErrorResponse::__construct()now requires anintfor$status_codeElgg\Http\OkResponse::__construct()now requires anintfor$status_codeElgg\Http\RedirectResponse::__construct()now requires anintfor$status_codeElgg\I18n\Translator::getInstalledTranslations()now requires aboolfor$calculate_completenessSiteNotification::setActor()now requires anElggEntityfor$entitySiteNotification::setURL()now requires astringfor$urlSiteNotification::setRead()now requires aboolfor$read
Class function return type
Elgg\Upgrade\Batch::getVersion()now requires anintreturn valueElgg\Upgrade\Batch::shouldBeSkipped()now requires anboolreturn valueElgg\Upgrade\Batch::needsIncrementOffset()now requires anboolreturn valueElgg\Upgrade\Batch::countItems()now requires anintreturn valueElgg\Upgrade\Batch::run()now requires anElgg\Upgrade\Resultreturn value
Lib function parameters
add_user_to_access_collection()now requires anintfor$user_guidand$collection_idcan_edit_access_collection()now requires anintfor$collection_idand$user_guidcreate_access_collection()now requires anstringfor$nameandintfor$owner_guiddelete_access_collection()now requires anintfor$collection_idelgg_action_exists()now requires astringfor$actionelgg_add_admin_notice()now requires astringfor$idand$messageelgg_admin_notice_exists()now requires astringfor$idelgg_annotation_exists()now requires aintfor$entity_guid, astringfor$nameandintfor$owner_guidelgg_delete_admin_notice()now requires astringfor$idelgg_delete_annotation_by_id()now requires aintfor$idelgg_deprecated_notice()now requires astringfor$msgand$dep_versionelgg_error_response()now requires anintfor$status_codeelgg_get_access_collections()now requires anarrayfor$optionselgg_get_annotation_from_id()now requires anintfor$idelgg_get_subscriptions_for_container()now requires anintfor$container_guidelgg_get_plugin_from_id()now requires astringfor$plugin_idelgg_get_plugin_setting()now requires astringfor$nameand$plugin_idelgg_get_plugin_user_setting()now requires astringfor$nameand$plugin_idandintfor$user_guidelgg_get_plugins()now requires astringfor$statuselgg_get_river_item_from_id()now requires aintfor$idelgg_list_annotations()now requires anarrayfor$optionselgg_ok_response()now requires anintfor$status_codeelgg_plugin_exists()now requires astringfor$plugin_idelgg_redirect_response()now requires anintfor$status_codeelgg_register_action()now requires astringfor$actionand$accesselgg_send_email()now requires an\Elgg\Emailfor$emailelgg_set_plugin_user_setting()now requires astringfor$nameand$plugin_idandintfor$user_guidelgg_unregister_action()now requires astringfor$actionget_access_array()now requires anintfor$user_guidget_access_collection()now requires anintfor$collection_idget_entity_statistics()now requires anintfor$owner_guidget_members_of_access_collection()now requires anintfor$collection_idandboolfor$guids_onlyget_readable_access_level()now requires anintfor$entity_access_idget_write_access_array()now requires anintfor$user_guidandboolfor$flushhas_access_to_entity()now requires anElggEntityfor$entityandElggUserfor$userremove_user_from_access_collection()now requires anintfor$user_guidand$collection_idsystem_log_get_log()now requires anarrayfor$optionsmessageboard_add()now requires anElggUser,ElggUser,stringand anintelgg_register_external_file()now requires all arguments to be of the typestringelgg_unregister_external_file()now requires all arguments to be of the typestringelgg_load_external_file()now requires all arguments to be of the typestringelgg_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$typeand$subtypebut these are required
Lib functions
elgg_get_page_owner_guid()no longer accepts$guidas a parameterget_access_array()no longer accepts$flushas a parameterelgg_register_external_file()no longer accepts$priorityas 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::classaccess_friends_acl_add_friend()changed toElgg\Friends\AddToAclHandler::classaccess_friends_acl_create()changed toElgg\Friends\CreateAclHandler::classaccess_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::classelgg_prepare_breadcrumbs()changed toElgg\Page\PrepareBreadcrumbsHandler::classElgg\Profiler::handleOutputchanged toElgg\Debug\Profiler::classusers_initcombined intoElgg\Application\SystemEventHandlers::initLate()
Plugins
_developers_entity_menuchanged toElgg\Developers\Menus\Entity::registerEntityExplorer_developers_page_menuchanged toElgg\Developers\Menus\Page::register_elgg_activity_owner_block_menuchanged toElgg\Activity\Menus\OwnerBlock::registerUserItemandElgg\Activity\Menus\OwnerBlock::registerGroupItemblog_archive_menu_setupchanged toElgg\Blog\Menus\BlogArchive::registerblog_owner_block_menuchanged toElgg\Blog\Menus\OwnerBlock::registerUserItemandElgg\Blog\Menus\OwnerBlock::registerGroupItemblog_prepare_notificationchanged toElgg\Blog\Notifications\PublishBlogEventHandlerblog_register_db_seedschanged toElgg\Blog\Database::registerSeedsbookmarks_footer_menuchanged toElgg\Bookmarks\Menus\Footer::registerbookmarks_owner_block_menuchanged toElgg\Bookmarks\Menus\OwnerBlock::registerUserItemandElgg\Bookmarks\Menus\OwnerBlock::registerGroupItembookmarks_page_menuchanged toElgg\Bookmarks\Menus\Page::registerbookmarks_prepare_notificationchanged toElgg\Bookmarks\Notifications\CreateBookmarksEventHandlerbookmarks_register_db_seedschanged toElgg\Bookmarks\Database::registerSeedsckeditor_longtext_idchanged toElgg\CKEditor\Views::setInputLongTextIDViewVarckeditor_longtext_menuchanged toElgg\CKEditor\Menus\LongText::registerTogglerdashboard_default_widgetschanged toElgg\Dashboard\Widgets::extendDefaultWidgetsListdevelopers_log_eventschanged toElgg\Developers\HandlerLogger::trackEventandElgg\Developers\HandlerLogger::trackHookdiagnostics_basic_hookchanged toElgg\Diagnostics\Reports::getBasicdiagnostics_globals_hookchanged toElgg\Diagnostics\Reports::getGlobalsdiagnostics_phpinfo_hookchanged toElgg\Diagnostics\Reports::getPHPInfodiagnostics_sigs_hookchanged toElgg\Diagnostics\Reports::getSigsdiscussion_comment_permissionschanged toElgg\Discussions\Permissions::preventCommentOnClosedDiscussiondiscussion_get_subscriptionschanged toElgg\Discussions\Notifications::addGroupSubscribersToCommentOnDiscussionSubscriptionsdiscussion_owner_block_menuchanged toElgg\Discussions\Menus\OwnerBlock::registerGroupItemdiscussion_prepare_comment_notificationchanged toElgg\Discussions\Notifications::prepareCommentOnDiscussionNotificationdiscussion_prepare_notificationchanged toElgg\Discussions\Notifications\CreateDiscussionEventHandlerdiscussion_register_db_seedschanged toElgg\Discussions\Database::registerSeedsElgg\DevelopersPlugins\*changed toElgg\Developers\*Elgg\Discussions\Menus::registerSiteMenuItemchanged toElgg\Discussions\Menus\Site::registerElgg\Discussions\Menus::filterTabschanged toElgg\Discussions\Menus\Filter::filterTabsForDiscussionsembed_longtext_menuchanged toElgg\Embed\Menus\LongText::registerembed_select_tabchanged toElgg\Embed\Menus\Embed::selectCorrectTabembed_set_thumbnail_urlchanged toElgg\Embed\Icons::setThumbnailUrlexpages_menu_register_hookchanged toElgg\ExternalPages\Menus\ExPages::registerfile_handle_object_deletechanged toElgg\File\Icons::deleteIconOnElggFileDeletefile_prepare_notificationchanged toElgg\File\Notifications\CreateFileEventHandlerfile_register_db_seedschanged toElgg\File\Database::registerSeedsfile_set_custom_icon_sizeschanged toElgg\File\Icons::setIconSizesfile_set_icon_filechanged toElgg\File\Icons::setIconFilefile_set_icon_urlchanged toElgg\File\Icons::setIconUrlfile_owner_block_menuchanged toElgg\File\Menus\OwnerBlock::registerUserItemandElgg\File\Menus\OwnerBlock::registerGroupItem_elgg_friends_filter_tabschanged toElgg\Friends\Menus\Filter::registerFilterTabs_elgg_friends_page_menuchanged toElgg\Friends\Menus\Page::register_elgg_friends_register_access_typechanged toElgg\Friends\Access::registerAccessCollectionType_elgg_friends_setup_title_menuchanged toElgg\Friends\Menus\Title::register_elgg_friends_setup_user_hover_menuchanged toElgg\Friends\Menus\UserHover::register_elgg_friends_topbar_menuchanged toElgg\Friends\Menus\Topbar::register_elgg_friends_widget_urlschanged toElgg\Friends\Widgets::setWidgetUrl_elgg_send_friend_notificationchanged toElgg\Friends\Notifications::sendFriendNotificationElgg\Friends\FilterMenu::addFriendRequestTabschanged toElgg\Friends\Menus\Filter::addFriendRequestTabsElgg\Friends\RelationshipMenu::addPendingFriendRequestItemschanged toElgg\Friends\Menus\Relationship::addPendingFriendRequestItemsElgg\Friends\RelationshipMenu::addPendingFriendRequestItemschanged toElgg\Friends\Menus\Relationship::addPendingFriendRequestItemsElgg\Friends\Relationships::createFriendRelationshipchanged toElgg\Friends\Relationships::removePendingFriendRequest_groups_gatekeeper_allow_profile_pagechanged toElgg\Groups\Access::allowProfilePage_groups_page_menuchanged toElgg\Groups\Menus\Page::register_groups_page_menu_group_profilechanged toElgg\Groups\Menus\Page::registerGroupProfile_groups_relationship_invited_menuchanged toElgg\Groups\Menus\Relationship::registerInvitedItems_groups_relationship_member_menuchanged toElgg\Groups\Menus\Relationship::registerRemoveUser_groups_relationship_membership_request_menuchanged toElgg\Groups\Menus\Relationship::registerMembershipRequestItems_groups_title_menuchanged toElgg\Groups\Menus\Title::register_groups_topbar_menu_setupchanged toElgg\Groups\Menus\Topbar::registergroups_access_default_overridechanged toElgg\Groups\Access::overrideDefaultAccessgroups_create_event_listenerchanged toElgg\Groups\Group::createAccessCollectiongroups_default_page_owner_handlerchanged toElgg\Groups\PageOwner::detectPageOwnergroups_entity_menu_setupchanged toElgg\Groups\Menus\Entity::registerandElgg\Groups\Menus\Entity::registerFeaturegroups_fields_setupchanged toElgg\Groups\FieldsHandlergroups_members_menu_setupchanged toElgg\Groups\Menus\GroupsMembers::registergroups_set_access_collection_namechanged toElgg\Groups\Access::getAccessCollectionNamegroups_set_urlchanged toElgg\Groups\Group::getEntityUrlgroups_setup_filter_tabschanged toElgg\Groups\Menus\Filter::registerGroupsAllgroups_update_event_listenerchanged toElgg\Groups\Group::updateGroupgroups_user_join_event_listenerchanged toElgg\Groups\Group::joinGroupgroups_user_leave_event_listenerchanged toElgg\Groups\Group::leaveGroupgroups_write_acl_plugin_hookchanged toElgg\Groups\Access::getWriteAccessinvitefriends_add_friendschanged toElgg\InviteFriends\Users::addFriendsOnRegisterinvitefriends_register_page_menuchanged toElgg\InviteFriends\Menus\Page::registerlikes_permissions_checkchanged toElgg\Likes\Permissions::allowLikedEntityOwnerlikes_permissions_check_annotatechanged toElgg\Likes\Permissions::allowLikeOnEntitylikes_social_menu_setupchanged toElgg\Likes\Menus\Social::registermembers_register_filter_menuchanged toElgg\Members\Menus\Filter::registermessages_can_editchanged toElgg\Messages\Permissions::canEditmessages_can_edit_containerchanged toElgg\Messages\Permissions::canEditContainermessages_purgechanged toElgg\Messages\User::purgeMessagesmessages_register_topbarchanged toElgg\Messages\Menus\Topbar::registermessages_user_hover_menuchanged toElgg\Messages\Menus\UserHover::registerandElgg\Messages\Menus\Title::registernotifications_update_collection_notifychanged toElgg\Notifications\Relationships::updateUserNotificationsPreferencesOnACLChangenotifications_update_friend_notifychanged toElgg\Friends\Relationships::applyFriendNotificationsSettingsnotifications_relationship_removechanged toElgg\Friends\Relationships::deleteFriendNotificationSubscriptionandElgg\Groups\Relationships::removeGroupNotificationSubscriptions_notifications_page_menuchanged toElgg\Notifications\Menus\Page::register_notification_groups_title_menuchanged toElgg\Notifications\Menus\Title::registerpages_container_permission_checkchanged toElgg\Pages\Permissions::allowContainerWriteAccesspages_entity_menu_setupchanged toElgg\Pages\Menus\Entity::registerpages_icon_url_overridechanged toElgg\Pages\Icons::getIconUrlpages_owner_block_menuchanged toElgg\Pages\Menus\OwnerBlock::registerUserItemandElgg\Pages\Menus\OwnerBlock::registerGroupItempages_prepare_notificationchanged toElgg\Pages\Notifications\CreatePageEventHandlerpages_register_db_seedschanged toElgg\Pages\Database::registerSeedspages_set_revision_urlchanged toElgg\Pages\Extender::setRevisionUrlpages_write_access_options_hookchanged toElgg\Pages\Views::removeAccessPublicpages_write_access_varschanged toElgg\Pages\Views::preventAccessPublicpages_write_permission_checkchanged toElgg\Pages\Permissions::allowWriteAccessElgg\Pages\Menus::registerPageMenuItemschanged toElgg\Pages\Menus\PagesNav::register_profile_admin_page_menuchanged toElgg\Profile\Menus\Page::registerAdminProfileFields_profile_fields_setupchanged toElgg\Profile\FieldsHandler_profile_title_menuchanged toElgg\Profile\Menus\Title::register_profile_topbar_menuchanged toElgg\Profile\Menus\Topbar::register_profile_user_hover_menuchanged toElgg\Profile\Menus\UserHover::register_profile_user_page_menuchanged toElgg\Profile\Menus\Page::registerProfileEditprofile_default_widgets_hookchanged toElgg\Profile\Widgets::getDefaultWidgetsListreportedcontent_user_hover_menuchanged toElgg\ReportedContent\Menus\UserHover::registersearch_exclude_robotschanged toElgg\Search\Site::preventSearchIndexingsearch_output_tagchanged toElgg\Search\Views::setSearchHrefsite_notifications_register_entity_menuchanged toElgg\SiteNotifications\Menus\Entity::registersite_notifications_sendchanged toElgg\SiteNotifications\Notifications::createSiteNotifications_uservalidationbyemail_user_unvalidated_bulk_menuchanged toElgg\UserValidationByEmail\Menus\UserUnvalidatedBulk::register_uservalidationbyemail_user_unvalidated_menuchanged toElgg\UserValidationByEmail\Menus\UserUnvalidated::registeruservalidationbyemail_after_registration_urlchanged toElgg\UserValidationByEmail\Response::redirectToEmailSentuservalidationbyemail_check_manual_loginchanged toElgg\UserValidationByEmail\User::preventLoginuservalidationbyemail_disable_new_userchanged toElgg\UserValidationByEmail\User::disableUserOnRegistrationsystem_log_archive_cronchanged toElgg\SystemLog\Cron::rotateLogssystem_log_default_loggerchanged toElgg\SystemLog\Logger::logsystem_log_delete_cronchanged toElgg\SystemLog\Cron::deleteLogssystem_log_listenerchanged toElgg\SystemLog\Logger::listensystem_log_user_hover_menuchanged toElgg\SystemLog\Menus\UserHover::registerthewire_add_original_posterchanged toElgg\TheWire\Notifications\CreateTheWireEventHandlerthewire_owner_block_menuchanged toElgg\TheWire\Menus\OwnerBlock::registerthewire_prepare_notificationchanged toElgg\TheWire\Notifications\CreateTheWireEventHandlerthewire_setup_entity_menu_itemschanged 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
ClassExceptionuseElgg\Exceptions\ClassExceptionConfigurationExceptionuseElgg\Exceptions\ConfigurationExceptionCronExceptionuseElgg\Exceptions\CronExceptionDatabaseExceptionuseElgg\Exceptions\DatabaseExceptionDataFormatExceptionuseElgg\Exceptions\DataFormatExceptionInstallationExceptionuseElgg\Exceptions\Configuration\InstallationExceptionInvalidParameterExceptionuseElgg\Exceptions\InvalidParameterExceptionIOExceptionuseElgg\Exceptions\FileSystem\IOExceptionLoginExceptionuseElgg\Exceptions\LoginExceptionPluginExceptionuseElgg\Exceptions\PluginExceptionRegistrationExceptionuseElgg\Exceptions\Configuration\RegistrationExceptionSecurityExceptionuseElgg\Exceptions\SecurityExceptionElgg\Database\EntityTable\UserFetchFailureExceptionuseElgg\Exceptions\Database\UserFetchFailureExceptionElgg\Di\FactoryUncallableExceptionuseElgg\Exceptions\Di\FactoryUncallableExceptionElgg\Di\MissingValueExceptionuseElgg\Exceptions\Di\MissingValueExceptionElgg\Http\Exception\AdminGatekeeperExceptionuseElgg\Exceptions\Http\Gatekeeper\AdminGatekeeperExceptionElgg\Http\Exception\AjaxGatekeeperExceptionuseElgg\Exceptions\Http\Gatekeeper\AjaxGatekeeperExceptionElgg\Http\Exception\GroupToolGatekeeperExceptionuseElgg\Exceptions\Http\Gatekeeper\GroupToolGatekeeperExceptionElgg\Http\Exception\LoggedInGatekeeperExceptionuseElgg\Exceptions\Http\Gatekeeper\LoggedInGatekeeperExceptionElgg\Http\Exception\LoggedOutGatekeeperExceptionuseElgg\Exceptions\Http\Gatekeeper\LoggedOutGatekeeperExceptionElgg\Http\Exception\UpgradeGatekeeperExceptionuseElgg\Exceptions\Http\Gatekeeper\UpgradeGatekeeperExceptionElgg\I18n\InvalidLocaleExceptionuseElgg\Exceptions\I18n\InvalidLocaleExceptionElgg\BadRequestExceptionuseElgg\Exceptions\Http\BadRequestExceptionElgg\CsrfExceptionuseElgg\Exceptions\Http\CsrfExceptionElgg\EntityNotFoundExceptionuseElgg\Exceptions\Http\EntityNotFoundExceptionElgg\EntityPermissionsExceptionuseElgg\Exceptions\Http\EntityPermissionsExceptionElgg\GatekeeperExceptionuseElgg\Exceptions\Http\GatekeeperExceptionElgg\GroupGatekeeperExceptionuseElgg\Exceptions\Http\Gatekeeper\GroupGatekeeperExceptionElgg\HttpExceptionuseElgg\Exceptions\HttpExceptionElgg\PageNotFoundExceptionuseElgg\Exceptions\Http\PageNotFoundExceptionElgg\ValidationExceptionuseElgg\Exceptions\Http\ValidationExceptionElgg\WalledGardenExceptionuseElgg\Exceptions\Http\Gatekeeper\WalledGardenException
Removed exceptions
CallExceptionClassNotFoundExceptionIncompleteEntityExceptionInvalidClassExceptionNotificationExceptionNotImplementedExceptionfrom 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\Cacheablemoved toElgg\Traits\CacheableElgg\Cli\PluginsHelpermoved toElgg\Traits\Cli\PluginsHelperElgg\Cli\Progressingmoved toElgg\Traits\Cli\ProgressingElgg\Database\Seeds\Seeding\GroupHelpersmoved toElgg\Traits\Seeding\GroupHelpersElgg\Database\Seeds\Seeding\TimeHelpersmoved toElgg\Traits\Seeding\TimeHelpersElgg\Database\Seeds\Seedingmoved toElgg\Traits\SeedingElgg\Database\LegacyQueryOptionsAdaptermoved toElgg\Traits\Database\LegacyQueryOptionsAdapterElgg\Debug\Profilablemoved toElgg\Traits\Debug\ProfilableElgg\Di\ServiceFacademoved toElgg\Traits\Di\ServiceFacadeElgg\Entity\ProfileDatamoved toElgg\Traits\Entity\ProfileDataElgg\Loggablemoved toElgg\Traits\LoggableElgg\Notifications\EventSerializationmoved toElgg\Traits\Notifications\EventSerializationElgg\TimeUsingmoved toElgg\Traits\TimeUsing
Miscellaneous API changes
The defaults for
ignore_empty_bodyandprevent_double_submitwhen usingelgg_view_formhave 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
\ElggBatchno longer implements the interfaceElgg\BatchResultbut still has the same featuresAn
\ElggEntityno longer implements the interfaceLocatablebut still has the same featuresAn
\Elgg\Eventno longer implements the interfaces\Elgg\ObjectEventand\Elgg\UserEventbut still has the same featuresThe view
output/iconno longer uses theconvertview varElggData::save()now always returns aboolas documented. All extending classes have been updated (eg.ElggEntity,ElggMetadata,ElggRelationship, etc.)Elgg\Email::getTo()now always returns anarrayElggPlugin::activate()andElggPlugin::deactivate()now can throw anElgg\Exceptions\PluginExceptionwith more details about the failure\ElggRelationship::RELATIONSHIP_LIMIThas been removed use ElggDatabaseRelationshipsTable::RELATIONSHIP_COLUMN_LENGTH``The constants
ORIGIN_SUBSCRIPTIONSandORIGIN_INSTANTin\Elgg\Notifications\Notificationhave 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
Friendablehas been removed. Implemented functions inElggUserhave been moved toElgg\Traits\Entity\FriendsThe config flag
profile_using_customis no longer availableThe return value of
elgg_create_river_item()will befalsein the case the creation was prevented by the'create:before', 'river'eventThe constant
ELGG_PLUGIN_USER_SETTING_PREFIXhas been removed use the helper function\ElggUser::getNamespacedPluginSettingName()The constant
ELGG_PLUGIN_INTERNAL_PREFIXhas been removed to get the plugin priority private setting name use\ElggPlugin::PRIORITY_SETTING_NAMEThe class
SiteNotificationFactorywas removed useSiteNotification::factory()The class
Elgg\Email\Addressno longer throwsLaminas\Mail\Exception\InvalidArgumentExceptionbut now throwsElgg\Exceptions\InvalidArgumentException
Deprecated APIs
Class functions
ElggPlugin::getUserSetting()useElggUser::getPluginSetting()ElggPlugin::setUserSetting()useElggUser::setPluginSetting()
Lib functions
forward()useElgg\Exceptions\HttpExceptioninstances orelgg_redirect_response()
Plugin hooks
'usersettings', 'plugin'use the hook'plugin_setting', '<entity type>'
Removed functions
Class functions
Elgg\Config::getEntityTypes()useElgg\Config::ENTITY_TYPESconstantElggFile::setDescription()use$file->description = $new_descriptionElggGroup::addObjectToGroup()ElggGroup::removeObjectFromGroup()ElggPlugin::getAllUserSettings()ElggPlugin::getDependencyReport()ElggPlugin::getError()ElggPlugin::unsetAllUserSettings()ElggPlugin::unsetAllUserAndPluginSettings()useElggPlugin::unsetAllEntityAndPluginSettings()ElggWidget::getContext()use$entity->contextElggWidget::setContext()use$entity->context = $contextElgg\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->locationElgg\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/webserviceselgg/thewire.jsinput/urlshortenermessages/jsmoved toforms/messages/process.jsnavigation/menu/elements/item_depsthe functionality has been merged intonavigation/menu/elements/itemobject/plugin/elements/contributorsnotifications/groupsnotifications/personalusenotifications/settingsornotifications/usersnotifications/settings/personalmoved tonotifications/settings/recordsnotifications/settings/collectionsnotifications/settings/otherextendnotifications/settings/recordsnotifications/subscriptions/groupsuseforms/notifications/subscriptions/groupsnotifications/subscriptions/usersuseforms/notifications/subscriptions/usersresources/comments/viewuse\Elgg\Controllers\CommentEntityRedirectorresources/riveruseresources/activity/allorresources/activity/ownerorresources/activity/friendsreportedcontent/admin_cssthewire/previous
Removed hooks / events
Event
created, riverhas been removed. Use thecreate:after, riverevent.Hook
creating, riverhas been removed. Use thecreate:before, riverevent 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, ajaxhas been removed. Use theajax_responsehook if you want to influence the results.Hook
reportedcontent:addhas been removed. Use thecreate, objectevent to prevent creation.Hook
reportedcontent:archivehas been removed. Use thepermissions_check, objecthook.Hook
reportedcontent:deletehas been removed. Use thedelete, objectevent to prevent deletion.
Removed actions
The action
reportedcontent/deletehas been replaced with a generic entity delete action