From 3.x to 4.0¶
Contents
- Composer
- Javascript
- Notifications
- Split OkResponse, ErrorResponse and RedirectResponse
- Datamodel
- Plugin development
- Plugins
- Type hinted functions
- Change in function parameters
- Renamed hook/event handler callbacks
- Reworked exceptions
- Reworked Traits
- Miscellaneous API changes
- Deprecated APIs
- Removed functions
- Removed views / resources
- Removed hooks / events
- Removed actions
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 intitle - Notification
summaryis stored insummary - Notification
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 removed - The
enabledcolumn in therivertable has been removed - The
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:group - The 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 removed - In 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 available- An
\ElggBatchno longer implements the interfaceElgg\BatchResultbut still has the same features - An
\ElggEntityno longer implements the interfaceLocatablebut still has the same features - An
\Elgg\Eventno longer implements the interfaces\Elgg\ObjectEventand\Elgg\UserEventbut still has the same features - The view
output/iconno longer uses theconvertview var ElggData::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 removed - You can no longer use the
delete, <entity_type>event to prevent deletion of an entity. Use thedelete:before, <entity_type>event - External 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\Friends - The config flag
profile_using_customis no longer available - The return value of
elgg_create_river_item()will befalsein the case the creation was prevented by the'create:before', 'river'event - The 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_NAME - The 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>hook - Hook
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