С 3.x на 4.0
Содержание
Composer
Требования к PHP
Для совместимости с PHP 8 нам пришлось увеличить минимальную версию PHP до 7.4. Версии PHP < 7.4 уже достигли конца жизненного цикла.
Проект Composer
Корень проекта composer больше не обрабатывается как полуфункциональный плагин. Языки из директории languages больше не импортируются, представления из директории views больше не регистрируются, сервисы PHP DI из elgg-services.php больше не регистрируются, и файл start.php больше не включается.
Если вам нужны специфические модификации вашей установки Elgg, вам нужно создать плагин и убедиться, что плагин находится последним в порядке плагинов, чтобы вы могли переопределить всё, что вам нужно изменить.
Doctrine DBAL
Elgg заменил v2 на v3 зависимости doctrine/dbal. Одним из наиболее заметных изменений является то, что если вы работаете с QueryBuilders и используете функцию $qb->fetch(), вы больше не получите объект, а массив. Если вы хотите, чтобы ваши строки были используемы как классы, вы можете использовать elgg()->db->getData($qb). Ещё одно важное изменение: если вы предоставляете свои собственные параметры запроса, вы больше не должны добавлять двоеточие к ключам в параметрах, но всё ещё должны делать это в запросе.
PHP-DI
Эта функция была обновлена для использования последней версии PHP-DI. Наиболее заметное критическое изменение для Elgg — необходимость изменить определение сервиса вашего плагина для использования \DI\create() вместо \DI\object().
ZendMail заменён на LaminasMail
Из-за устаревания библиотеки Zend\Mail и её замены на Laminas\Mail все ссылки были обновлены.
Удалённые зависимости composer
bower-asset/jquery-treeviewсвязанные js и css больше не доступны в системеbower-asset/jquery.imgareaselectсвязанные js и css больше не доступны в системеnpm-asset/formdata-polyfillвсе современные браузеры поддерживают, больше нет необходимости в полифилеnpm-asset/jquery-formиспользуйте нативную функциональность FormDatanpm-asset/weakmap-polyfillвсе современные браузеры поддерживают, больше нет необходимости в полифилеsimpletest/simpletest
JavaScript
AJAX
Следующие вспомогательные функции Ajax были удалены в пользу их аналогов в асинхронном модуле elgg/Ajax. * elgg.action() * elgg.get() * elgg.getJSON() * elgg.post()
Функция ajax elgg.api была перемещена в функцию executeMethod в асинхронном модуле elgg/webservices в плагине webservices. Другие функции и атрибуты elgg.ajax были удалены из системы. Также устаревшая обработка вызовов ajax была удалена из системы.
Классы
Логика JavaScript для автоматической загрузки некоторого JavaScript для вашего плагина и регистрации хуков через класс Elgg/Plugin была удалена из системы. Эта функциональность никогда не использовалась ядром и редко встречалась в плагинах. Используйте загружаемый через AMD JavaScript или расширяйте elgg.js для всегда загружаемого JavaScript.
Класс JavaScript ElggPriorityList был удалён из системы.
Системные хуки
Модули AMD для elgg/init и elgg/ready были удалены. Хук init, system всё ещё доступен, но имеет смысл полагаться на этот хук только из библиотек js, не загружаемых через AMD. Триггеры boot, system и ready, system были удалены из системы. Замените на init, system для того же эффекта.
jQuery
Библиотека jQuery была обновлена до последней версии (v3.5.x). Это крупное обновление по сравнению с версией, используемой в Elgg 3.x. Для получения информации о том, что изменилось между этими релизами, вам следует ознакомиться с сайтом jQuery.
jQuery UI
Библиотека jQuery UI была обновлена до v1.12.x. Библиотека больше не загружается полностью по умолчанию. Если вам нужно использовать функции из библиотеки, вы можете подключить их в своём собственном скрипте. Например, чтобы иметь возможность использовать функциональность сортировки, выполните следующие действия:
require('jquery-ui/widgets/sortable');
// or in your own AMD script
define(['jquery-ui/widgets/sortable'], function() {
// use the sortable
});
Различные изменения JS
Модуль AMD
elgg/widgetsбольше не возвращает объект и больше не требует вызоваinitна модуле
Уведомления
Обработка уведомлений до Elgg 1.9 была удалена. Связанные функции и хуки больше не существуют.
Подписки
Отношение в базе данных, которое хранит метод подписки для уведомлений, было изменено с notifymethod на notify:method.
Множественные получатели
ElggEmail теперь поддерживает множественных получателей в To, Cc и Bcc. Связанные функции получения, такие как getTo(), теперь всегда будут возвращать массив.
Настройки
В \ElggUser::setNotificationSetting() и \ElggUser::getNotificationSettings() было введено универсальное хранилище для предпочтений уведомлений; настройки уведомлений теперь имеют „цель“.
Например, group_join можно использовать для управления подпиской по умолчанию, которую вы получаете с группой при вступлении в группу.
Плагин Notifications имеет универсальную обработку отображения и сохранения настроек. Чтобы отобразить настройку, расширьте представление notifications/settings/records (множественное число) представлением, которое использует notifications/settings/record (единственное число).
При запросе настроек уведомлений, отличных от настроек по умолчанию, если пользователь ещё не сохранил настройку, будет использована настройка уведомлений по умолчанию.
Управление предпочтениями уведомлений для добавления новых пользователей в коллекцию друзей было удалено.
Приветствие и подпись уведомления
Чтобы иметь возможность использовать более универсальное приветствие и подпись для исходящих почтовых уведомлений, мы удалили эти тексты из различных строк перевода и переместили их в универсальные переводы. Это означает, что вам нужно обновить ваши переводы, чтобы отразить новый текст, а также проверить ваш код на использование уведомлений, где вы предоставляете свой собственный текст приветствия или подписи. Вы можете узнать больше об этом новом поведении в Уведомления.
Плагин Notifications
Плагин Notifications был удалён. Все функции плагина теперь являются частью ядра Elgg. Некоторые страницы (например, настройки уведомлений группы) были перемещены в соответствующий плагин.
Это означает, что обработчики событий, обработчики хуков, действия, представления и языковые ключи были (пере)мещены или переименованы.
Обработка событий уведомлений
Хуки уведомлений больше не получают параметр origin.
Уведомление сайта
Плагин уведомлений сайта теперь по умолчанию отображает тему уведомления. Если уведомление сайта было создано с помощью фабричной функции SiteNotification::factory(), больше исходной информации об уведомлении сохраняется с уведомлением сайта:
Тема уведомления
subjectсохраняется вtitleКраткое содержание уведомления
summaryсохраняется вsummaryТело уведомления
bodyсохраняется вdescription
Разделение OkResponse, ErrorResponse и RedirectResponse
Классы Elgg\Http\ErrorResponse и Elgg\Http\RedirectResponse были расширениями Elgg\Http\OkReponse, что усложняло валидацию ответов (например, в хуках). Классы были разделены для более простой и понятной проверки.
Все классы теперь расширяют Elgg\Http\Response и реализуют Elgg\Http\ReponseBuilder. Код ошибки HTTP по умолчанию при использовании elgg_error_response() был изменён на возврат статуса 400.
Модель данных
Изменения схемы
Колонки
access_id,owner_guidиenabledв таблицеmetadataбыли удаленыКолонка
enabledв таблицеriverбыла удаленаКолонка
relationshipв таблицеentity_relationshipsтеперь имеет максимальную длину 255 символов (ранее было 50)
Атрибуты ElggEntity
Установка атрибутов type, subtype и enabled объекта ElggEntity больше невозможна через магический сеттер. Изменение type больше невозможно, используйте правильный базовый класс для вашей сущности (например, ElggObject, ElggGroup или ElggUser).
Для изменения subtype используйте функцию 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');
Для изменения состояния enabled сущности используйте соответствующие функции
// 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
Установка метаданных admin и banned объекта ElggUser больше невозможна через магический сеттер.
Для изменения состояния admin используйте функции makeAdmin() и 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
Для изменения состояния banned используйте функции ban() и 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
Разработка плагинов
Инициализация плагинов
Следующие файлы больше не подключаются при инициализации плагина:
activate.phpиспользуйтеPluginBootstrap->activate()deactivate.phpиспользуйтеPluginBootstrap->deactivate()views.phpиспользуйтеelgg-plugin.phpstart.phpиспользуйтеelgg-plugin.phpи/илиPluginBootstrap
Манифест плагина
Файл манифеста плагина больше не используется. Возможности манифеста были удалены или перемещены в другие места.
Больше невозможно требовать определённые настройки php ini.
требование версии php -> composer require
требование расширения php -> composer require
конфликты плагинов -> composer conflicts
требование плагина -> elgg-plugin
требование позиции плагина -> elgg-plugin
версия плагина -> elgg-plugin
активация плагина при установке -> elgg-plugin
имя плагина -> elgg-plugin
описание плагина -> composer.json
категории плагина -> composer.json
лицензия плагина -> composer.json
ссылка на репозиторий плагина -> composer.json
ссылка на баг-трекер плагина -> composer.json
ссылка на домашнюю страницу плагина -> composer.json
авторы/участники плагина -> composer.json
Настраиваемые конфигурации полей
Некоторые плагины имели возможность настраивать поля сущностей в конфигурации. Эти возможности были заменены центральным сервисом, который предоставляет механизм запроса настраиваемой конфигурации полей для определённого типа/подтипа.
Вы можете запросить эти конфигурации, используя следующий код:
$fields = elgg()->fields->get('<entity_type>', '<entity_subtype');
Результатом будет массив с конфигурациями полей, пригодными для использования в elgg_view_field($field)
Следующая связанная функциональность была заменена этим новым способом:
Конфигурация для
pagesбольше не доступна вelgg_get_config('pages'), используйтеelgg()->fields->get('object', 'page')Конфигурация для
groupбольше не доступна вelgg_get_config('group'), используйтеelgg()->fields->get('group', 'group')Конфигурация для
profile_fieldsбольше не доступна вelgg_get_config('profile_fields'), используйтеelgg()->fields->get('user', 'user')Установка конфигурации для
pages,groupиuser:profileчерезelgg_set_configбольше невозможна. Используйте хук-колбэк дляfields, <entity_type>:<entity_subtype>.Хук
profile:fields, groupбыл заменён новым хукомfields, group:groupХук
profile:fields, userбыл заменён новым хукомfields, user:user
Регистрация имён метаданных тегов
Из-за различных ограничений этой реализации она была удалена из системы. Были удалены следующие связанные функции API:
elgg_get_registered_tag_metadata_names()elgg_register_tag_metadata_name()elgg_unregister_tag_metadata_name()
Если вам нужно, чтобы определённые поля были доступны для поиска, вам необходимо зарегистрировать их с помощью соответствующих хуков search:fields. Соответствующие языковые ключи тегов tagnames:xxx больше не регистрируются в системе.
Функция ElggEntity::getTags() теперь по умолчанию будет возвращать только метаданные тегов с именем tags. Если вы хотите проверить дополнительные поля, содержащие теги, вам нужно запросить это явно.
Виджеты по умолчанию
Магическая обработка создания виджетов по умолчанию была упрощена. Теперь вам необходимо зарегистрировать колбэк Elgg\Widgets\CreateDefaultWidgetsHandler на событие, когда вы хотите создать виджеты по умолчанию. Конфигурация default_widget_info больше не присутствует в системе. Используйте хук get_list, default_widgets для получения значения.
Вам также необходимо обновить данные в обработчике хука get_list, default_widgets, чтобы возвращать event_name (ранее event) и event_type.
Разрешения контейнера
Параметры функции ElggEntity::canWriteToContainer() теперь требуют передачи $type и $subtype. Это необходимо для предоставления дополнительной информации результирующему хуку, чтобы можно было определить, разрешён ли пользователю доступ на запись в контейнер.
Плагины
Плагин Activity
Этот плагин получил давно необходимый рефакторинг. Различные страницы (all/owner/friends) теперь имеют собственные представления ресурсов и списков.
Плагин Diagnostics
Этот плагин был удалён, но действие для генерации отчёта всё ещё доступно. Вы можете найти его на странице администратора Information/Server.
Плагин Discussions
Этот плагин больше не добавляет вкладку в меню фильтра на страницах групп
Элемент меню сайта
discussionsтеперь всегда присутствует
Плагин Search
Вывод результатов поиска больше не использует вспомогательный класс Elgg\Search\Formatter для подготовки содержимого результатов. Эта логика была полностью перенесена в представления.
Связанные функции prepareEntity и getSearchView в классе Elgg\Search\Service были удалены.
Хук search:format, entity был удалён.
Плагин Web services
Плагин Web Services получил полный рефакторинг, это в основном связано с внутренними механизмами плагина.
Удалённые классы
ElggHMACCacheбыл заменён на_elgg_services()->hmacCacheTable(только для внутреннего использования)Elgg\Notifications\Eventбыл заменён наElgg\Notifications\SubscriptionNotificationEvent
Удалённые функции
create_api_user()была заменена на_elgg_services()->apiUsersTable->createApiUser()create_user_token()была заменена на_elgg_services()->usersApiSessions->createToken()get_api_user()была заменена на_elgg_services()->apiUsersTable->getApiUser()get_standard_api_key_array()используйте\Elgg\WebServices\ElggApiClient::setApiKeys()get_user_tokens()была заменена на_elgg_services()->usersApiSessions->getUserTokens()pam_auth_session()remove_api_user()была заменена на_elgg_services()->apiUsersTable->removeApiUser()remove_expired_user_tokens()была заменена на_elgg_services()->usersApiSessions->removeExpiresTokens()remove_user_token()была заменена на_elgg_services()->usersApiSessions->removeToken()send_api_call()используйте\Elgg\WebServices\ElggApiClientsend_api_get_call()используйте\Elgg\WebServices\ElggApiClientsend_api_post_call()используйте\Elgg\WebServices\ElggApiClientservice_handler()validate_user_token()была заменена на_elgg_services()->usersApiSessions->validateToken()ws_page_handler()ws_rest_handler()была заменена на\Elgg\WebServices\RestServiceController
Различные изменения
Значение конфигурации для
servicehandlerбыло удаленоВ некоторых крайних случаях значение параметра API по умолчанию не будет применено
Функции с типизацией
Следующие функции теперь имеют типизированные аргументы, это может вызывать ошибки TypeError. Также некоторые функции классов имеют типизированные возвращаемые значения, и вам следует обновить определение ваших функций.
Параметры функций классов
ElggEntity::setLatLong()теперь требуетfloatдля$latи$longElggUser::setNotificationSetting()теперь требуетstringдля$methodиboolдля$enabledElgg\Database\Seeds\Seed::__construct()теперь требуетintдля$limitElgg\Http\ErrorResponse::__construct()теперь требуетintдля$status_codeElgg\Http\OkResponse::__construct()теперь требуетintдля$status_codeElgg\Http\RedirectResponse::__construct()теперь требуетintдля$status_codeElgg\I18n\Translator::getInstalledTranslations()теперь требуетboolдля$calculate_completenessSiteNotification::setActor()теперь требуетElggEntityдля$entitySiteNotification::setURL()теперь требуетstringдля$urlSiteNotification::setRead()теперь требуетboolдля$read
Тип возвращаемого значения функций классов
Elgg\Upgrade\Batch::getVersion()теперь требует возвращаемое значение типаintElgg\Upgrade\Batch::shouldBeSkipped()теперь требует возвращаемое значение типаboolElgg\Upgrade\Batch::needsIncrementOffset()теперь требует возвращаемое значение типаboolElgg\Upgrade\Batch::countItems()теперь требует возвращаемое значение типаintElgg\Upgrade\Batch::run()теперь требует возвращаемое значение типаElgg\Upgrade\Result
Параметры функций библиотеки
add_user_to_access_collection()теперь требуетintдля$user_guidи$collection_idcan_edit_access_collection()теперь требуетintдля$collection_idи$user_guidcreate_access_collection()теперь требуетstringдля$nameиintдля$owner_guiddelete_access_collection()теперь требуетintдля$collection_idelgg_action_exists()теперь требуетstringдля$actionelgg_add_admin_notice()теперь требуетstringдля$idи$messageelgg_admin_notice_exists()теперь требуетstringдля$idelgg_annotation_exists()теперь требуетintдля$entity_guid,stringдля$nameиintдля$owner_guidelgg_delete_admin_notice()теперь требуетstringдля$idelgg_delete_annotation_by_id()теперь требуетintдля$idelgg_deprecated_notice()теперь требуетstringдля$msgи$dep_versionelgg_error_response()теперь требуетintдля$status_codeelgg_get_access_collections()теперь требуетarrayдля$optionselgg_get_annotation_from_id()теперь требуетintдля$idelgg_get_subscriptions_for_container()теперь требуетintдля$container_guidelgg_get_plugin_from_id()теперь требуетstringдля$plugin_idelgg_get_plugin_setting()теперь требуетstringдля$nameи$plugin_idelgg_get_plugin_user_setting()теперь требуетstringдля$nameи$plugin_idиintдля$user_guidelgg_get_plugins()теперь требуетstringдля$statuselgg_get_river_item_from_id()теперь требуетintдля$idelgg_list_annotations()теперь требуетarrayдля$optionselgg_ok_response()теперь требуетintдля$status_codeelgg_plugin_exists()теперь требуетstringдля$plugin_idelgg_redirect_response()теперь требуетintдля$status_codeelgg_register_action()теперь требуетstringдля$actionи$accesselgg_send_email()теперь требует\Elgg\Emailдля$emailelgg_set_plugin_user_setting()теперь требуетstringдля$nameи$plugin_idиintдля$user_guidelgg_unregister_action()теперь требуетstringдля$actionget_access_array()теперь требуетintдля$user_guidget_access_collection()теперь требуетintдля$collection_idget_entity_statistics()теперь требуетintдля$owner_guidget_members_of_access_collection()теперь требуетintдля$collection_idиboolдля$guids_onlyget_readable_access_level()теперь требуетintдля$entity_access_idget_write_access_array()теперь требуетintдля$user_guidиboolдля$flushhas_access_to_entity()теперь требуетElggEntityдля$entityиElggUserдля$userremove_user_from_access_collection()теперь требуетintдля$user_guidи$collection_idsystem_log_get_log()теперь требуетarrayдля$optionsmessageboard_add()теперь требуетElggUser,ElggUser,stringиintelgg_register_external_file()теперь требует, чтобы все аргументы были типаstringelgg_unregister_external_file()теперь требует, чтобы все аргументы были типаstringelgg_load_external_file()теперь требует, чтобы все аргументы были типаstringelgg_get_loaded_external_files()теперь требует, чтобы все аргументы были типаstring
Изменения в параметрах функций
Функции классов
Elgg\Http\ResponseBuilder::setStatusCode()больше не имеет значения по умолчаниюElggEntity::canWriteToContainer()больше не имеет значений по умолчанию для$typeи$subtype, но они теперь обязательны
Функции библиотеки
elgg_get_page_owner_guid()больше не принимает$guidв качестве параметраget_access_array()больше не принимает$flushв качестве параметраelgg_register_external_file()больше не принимает$priorityв качестве параметра
Переименованные колбэки обработчиков хуков/событий
Требуется особое внимание, если вы отменяете регистрацию колбэков в ваших плагинах, так как вам может потребоваться обновить ваш код.
Ядро
access_friends_acl_get_name()изменено наElgg\Friends\AclNameHandler::classaccess_friends_acl_add_friend()изменено наElgg\Friends\AddToAclHandler::classaccess_friends_acl_create()изменено наElgg\Friends\CreateAclHandler::classaccess_friends_acl_remove_friend()изменено наElgg\Friends\RemoveFromAclHandler::class_elgg_add_admin_widgets()изменено наElgg\Widgets\CreateAdminWidgetsHandler::class_elgg_admin_check_admin_validation()изменено наElgg\Users\Validation::checkAdminValidation()_elgg_admin_header_menu()изменено наElgg\Menus\AdminHeader::register()иElgg\Menus\AdminHeader::registerMaintenance()_elgg_admin_footer_menu()изменено наElgg\Menus\AdminFooter::registerHelpResources()_elgg_admin_notify_admins_pending_user_validation()изменено наElgg\Users\Validation::notifyAdminsAboutPendingUsers()_elgg_admin_page_menu()изменено наElgg\Menus\Page::registerAdminAdminister()иElgg\Menus\Page::registerAdminConfigure()иElgg\Menus\Page::registerAdminInformation()_elgg_admin_page_menu_plugin_settings()изменено наElgg\Menus\Page::registerAdminPluginSettings()_elgg_admin_prepare_admin_notification_make_admin()изменено наElgg\Notifications\MakeAdminUserEventHandler_elgg_admin_prepare_admin_notification_remove_admin()изменено наElgg\Notifications\RemoveAdminUserEventHandler_elgg_admin_prepare_user_notification_make_admin()изменено наElgg\Notifications\MakeAdminUserEventHandler_elgg_admin_prepare_user_notification_remove_admin()изменено наElgg\Notifications\RemoveAdminUserEventHandler_elgg_admin_save_notification_setting()изменено наElgg\Users\Settings::setAdminValidationNotification()_elgg_admin_set_registration_forward_url()изменено наElgg\Users\Validation::setRegistrationForwardUrl()_elgg_admin_user_unvalidated_bulk_menu()изменено наElgg\Menus\UserUnvalidatedBulk::registerActions()_elgg_admin_user_validation_login_attempt()изменено наElgg\Users\Validation::preventUserLogin()_elgg_admin_user_validation_notification()изменено наElgg\Users\Validation::notifyUserAfterValidation()_elgg_admin_upgrades_menu()изменено наElgg\Menus\Filter::registerAdminUpgrades()действия
_elgg_cache_init()объединены вElgg\Application\SystemEventHandlers::ready()_elgg_clear_caches()изменено наElgg\Cache\EventHandlers::clear()_elgg_comments_access_sync()изменено наElgg\Comments\SyncContainerAccessHandler::class_elgg_comments_container_permissions_override()изменено наElgg\Comments\ContainerPermissionsHandler::class_elgg_comments_permissions_override()изменено наElgg\Comments\EditPermissionsHandler::class_elgg_comments_prepare_content_owner_notification()изменено наElgg\Notifications\CreateCommentEventHandler_elgg_comments_prepare_notification()изменено наElgg\Notifications\CreateCommentEventHandler_elgg_comments_social_menu_setup()изменено наElgg\Menus\Social::registerComments()_elgg_create_default_widgets()изменено наElgg\Widgets\CreateDefaultWidgetsHandler::class_elgg_create_notice_of_pending_upgrade()изменено наElgg\Upgrade\CreateAdminNoticeHandler::class_elgg_db_register_seeds()изменено наElgg\Database\RegisterSeedsHandler::class_elgg_disable_caches()изменено наElgg\Cache\EventHandlers::disable()_elgg_default_widgets_permissions_override()изменено наElgg\Widgets\DefaultWidgetsContainerPermissionsHandler::class_elgg_disable_password_autocomplete()изменено наElgg\Input\DisablePasswordAutocompleteHandler::class_elgg_enable_caches()изменено наElgg\Cache\EventHandlers::enable()_elgg_filestore_move_icons()изменено наElgg\Icons\MoveIconsOnOwnerChangeHandler::class_elgg_filestore_touch_icons()изменено наElgg\Icons\TouchIconsOnAccessChangeHandler::class_elgg_head_manifest()изменено наElgg\Views\AddManifestLinkHandler::class_elgg_annotations_default_menu_items()изменено наElgg\Menus\Annotation::registerDelete()_elgg_walled_garden_menu()изменено наElgg\Menus\WalledGarden::registerHome()_elgg_site_menu_init()изменено наElgg\Menus\Site::registerAdminConfiguredItems()_elgg_site_menu_setup()изменено наElgg\Menus\Site::reorderItems()_elgg_entity_menu_setup()изменено наElgg\Menus\Entity::registerEdit()иElgg\Menus\Entity::registerDelete()_elgg_entity_navigation_menu_setup()изменено наElgg\Menus\EntityNavigation::registerPreviousNext()_elgg_enqueue_notification_event()изменено наElgg\Notifications\EnqueueEventHandler::class_elgg_groups_container_override()изменено наElgg\Groups\MemberPermissionsHandler::class_elgg_groups_comment_permissions_override()изменено наElgg\Comments\GroupMemberPermissionsHandler::class_elgg_htmlawed_filter_tags()изменено наElgg\Input\ValidateInputHandler::class_elgg_invalidate_caches()изменено наElgg\Cache\EventHandlers::invalidate()_elgg_widget_menu_setup()изменено наElgg\Menus\Widget::registerEdit()иElgg\Menus\Widget::registerDelete()_elgg_login_menu_setup()изменено наElgg\Menus\Login::registerRegistration()иElgg\Menus\Widget::registerResetPassword()_elgg_nav_public_pages()изменено наElgg\WalledGarden\ExtendPublicPagesHandler::class_elgg_notifications_cron()изменено наElgg\Notifications\ProcessQueueCronHandler::class_elgg_notifications_smtp_default_message_id_header()изменено наElgg\Email\DefaultMessageIdHeaderHandler::class_elgg_notifications_smtp_thread_headers()изменено наElgg\Email\ThreadHeadersHandler::class_elgg_rebuild_public_container()изменено наElgg\Cache\EventHandlers::rebuildPublicContainer()_elgg_river_update_object_last_action()изменено наElgg\River\UpdateLastActionHandler::class_elgg_rss_menu_setup()изменено наElgg\Menus\Footer::registerRSS()_elgg_plugin_entity_menu_setup()изменено наElgg\Menus\Entity::registerPlugin()_elgg_purge_caches()изменено наElgg\Cache\EventHandlers::purge()_elgg_river_menu_setup()изменено наElgg\Menus\River::registerDelete()_elgg_save_notification_user_settings()изменено наElgg\Notifications\SaveUserSettingsHandler::class_elgg_session_cleanup_persistent_login()изменено наElgg\Users\CleanupPersistentLoginHandler::class_elgg_set_lightbox_config()изменено наElgg\Javascript\SetLightboxConfigHandler::class_elgg_set_user_default_access()изменено наElgg\Users\Settings::setDefaultAccess()_elgg_set_user_email()изменено наElgg\Users\Settings::setEmail()_elgg_set_user_password()изменено наElgg\Users\Settings::setPassword()_elgg_set_user_language()изменено наElgg\Users\Settings::setLanguage()_elgg_set_user_name()изменено наElgg\Users\Settings::setName()_elgg_set_user_username()изменено наElgg\Users\Settings::setUsername()_elgg_send_email_notification()изменено наElgg\Notifications\SendEmailHandler::class_elgg_upgrade_completed()изменено наElgg\Upgrade\UpgradeCompletedAdminNoticeHandler::class_elgg_upgrade_entity_menu()изменено наElgg\Menus\Entity::registerUpgrade()_elgg_user_ban_notification()изменено наElgg\Users\BanUserNotificationHandler::class_elgg_user_get_subscriber_unban_action()изменено наElgg\Notifications\UnbanUserEventHandler_elgg_user_prepare_unban_notification()изменено наElgg\Notifications\UnbanUserEventHandler_elgg_user_settings_menu_register()изменено наElgg\Menus\Page::registerUserSettings()иElgg\Menus\Page::registerUserSettingsPlugins()_elgg_user_settings_menu_prepare()изменено наElgg\Menus\Page::cleanupUserSettingsPlugins()elgg_user_hover_menu()изменено наElgg\Menus\UserHover::registerAvatarEdit()иElgg\Menus\UserHover::registerAdminActions()_elgg_user_set_icon_file()изменено наElgg\Icons\SetUserIconFileHandler::class_elgg_user_title_menu()изменено наElgg\Menus\Title::registerAvatarEdit()_elgg_user_page_menu()изменена наElgg\Menus\Page::registerAvatarEdit()_elgg_user_topbar_menu()изменена наElgg\Menus\Topbar::registerUserLinks()_elgg_user_unvalidated_menu()изменена наElgg\Menus\UserUnvalidated::register()_elgg_views_amd()изменена наElgg\Views\AddAmdModuleNameHandler::class_elgg_views_file_help_upload_limit()изменена наElgg\Input\AddFileHelpTextHandler::class_elgg_views_init()объединена вElgg\Application\SystemEventHandlers::init()_elgg_views_minify()изменена наElgg\Views\MinifyHandler::class_elgg_views_prepare_favicon_links()изменена наElgg\Page\AddFaviconLinksHandler::class_elgg_views_preprocess_css()изменена наElgg\Views\PreProcessCssHandler::class_elgg_views_send_header_x_frame_options()изменена наElgg\Page\SetXFrameOptionsHeaderHandler::class_elgg_walled_garden_init()объединена вElgg\Application\SystemEventHandlers::initLate()_elgg_walled_garden_remove_public_access()изменена наElgg\WalledGarden\RemovePublicAccessHandler::class_elgg_widgets_widget_urls()изменена наElgg\Widgets\EntityUrlHandler::classelgg_prepare_breadcrumbs()изменена наElgg\Page\PrepareBreadcrumbsHandler::classElgg\Profiler::handleOutputизменена наElgg\Debug\Profiler::classusers_initобъединена вElgg\Application\SystemEventHandlers::initLate()
Плагины
_developers_entity_menuизменена наElgg\Developers\Menus\Entity::registerEntityExplorer_developers_page_menuизменена наElgg\Developers\Menus\Page::register_elgg_activity_owner_block_menuизменена наElgg\Activity\Menus\OwnerBlock::registerUserItemиElgg\Activity\Menus\OwnerBlock::registerGroupItemblog_archive_menu_setupизменена наElgg\Blog\Menus\BlogArchive::registerblog_owner_block_menuизменена наElgg\Blog\Menus\OwnerBlock::registerUserItemиElgg\Blog\Menus\OwnerBlock::registerGroupItemblog_prepare_notificationизменена наElgg\Blog\Notifications\PublishBlogEventHandlerblog_register_db_seedsизменена наElgg\Blog\Database::registerSeedsbookmarks_footer_menuизменена наElgg\Bookmarks\Menus\Footer::registerbookmarks_owner_block_menuизменена наElgg\Bookmarks\Menus\OwnerBlock::registerUserItemиElgg\Bookmarks\Menus\OwnerBlock::registerGroupItembookmarks_page_menuизменена наElgg\Bookmarks\Menus\Page::registerbookmarks_prepare_notificationизменена наElgg\Bookmarks\Notifications\CreateBookmarksEventHandlerbookmarks_register_db_seedsизменена наElgg\Bookmarks\Database::registerSeedsckeditor_longtext_idизменена наElgg\CKEditor\Views::setInputLongTextIDViewVarckeditor_longtext_menuизменена наElgg\CKEditor\Menus\LongText::registerTogglerdashboard_default_widgetsизменена наElgg\Dashboard\Widgets::extendDefaultWidgetsListdevelopers_log_eventsизменена наElgg\Developers\HandlerLogger::trackEventиElgg\Developers\HandlerLogger::trackHookdiagnostics_basic_hookизменена наElgg\Diagnostics\Reports::getBasicdiagnostics_globals_hookизменена наElgg\Diagnostics\Reports::getGlobalsdiagnostics_phpinfo_hookизменена наElgg\Diagnostics\Reports::getPHPInfodiagnostics_sigs_hookизменена наElgg\Diagnostics\Reports::getSigsdiscussion_comment_permissionsизменена наElgg\Discussions\Permissions::preventCommentOnClosedDiscussiondiscussion_get_subscriptionsизменена наElgg\Discussions\Notifications::addGroupSubscribersToCommentOnDiscussionSubscriptionsdiscussion_owner_block_menuизменена наElgg\Discussions\Menus\OwnerBlock::registerGroupItemdiscussion_prepare_comment_notificationизменена наElgg\Discussions\Notifications::prepareCommentOnDiscussionNotificationdiscussion_prepare_notificationизменена наElgg\Discussions\Notifications\CreateDiscussionEventHandlerdiscussion_register_db_seedsизменена наElgg\Discussions\Database::registerSeedsElgg\DevelopersPlugins\*изменена наElgg\Developers\*Elgg\Discussions\Menus::registerSiteMenuItemизменена наElgg\Discussions\Menus\Site::registerElgg\Discussions\Menus::filterTabsизменена наElgg\Discussions\Menus\Filter::filterTabsForDiscussionsembed_longtext_menuизменена наElgg\Embed\Menus\LongText::registerembed_select_tabизменена наElgg\Embed\Menus\Embed::selectCorrectTabembed_set_thumbnail_urlизменена наElgg\Embed\Icons::setThumbnailUrlexpages_menu_register_hookизменена наElgg\ExternalPages\Menus\ExPages::registerfile_handle_object_deleteизменена наElgg\File\Icons::deleteIconOnElggFileDeletefile_prepare_notificationизменена наElgg\File\Notifications\CreateFileEventHandlerfile_register_db_seedsизменена наElgg\File\Database::registerSeedsfile_set_custom_icon_sizesизменена наElgg\File\Icons::setIconSizesfile_set_icon_fileизменена наElgg\File\Icons::setIconFilefile_set_icon_urlизменена наElgg\File\Icons::setIconUrlfile_owner_block_menuизменена наElgg\File\Menus\OwnerBlock::registerUserItemиElgg\File\Menus\OwnerBlock::registerGroupItem_elgg_friends_filter_tabsизменена наElgg\Friends\Menus\Filter::registerFilterTabs_elgg_friends_page_menuизменена наElgg\Friends\Menus\Page::register_elgg_friends_register_access_typeизменена наElgg\Friends\Access::registerAccessCollectionType_elgg_friends_setup_title_menuизменена наElgg\Friends\Menus\Title::register_elgg_friends_setup_user_hover_menuизменена наElgg\Friends\Menus\UserHover::register_elgg_friends_topbar_menuизменена наElgg\Friends\Menus\Topbar::register_elgg_friends_widget_urlsизменена наElgg\Friends\Widgets::setWidgetUrl_elgg_send_friend_notificationизменена наElgg\Friends\Notifications::sendFriendNotificationElgg\Friends\FilterMenu::addFriendRequestTabsизменена наElgg\Friends\Menus\Filter::addFriendRequestTabsElgg\Friends\RelationshipMenu::addPendingFriendRequestItemsизменена наElgg\Friends\Menus\Relationship::addPendingFriendRequestItemsElgg\Friends\RelationshipMenu::addPendingFriendRequestItemsизменена наElgg\Friends\Menus\Relationship::addPendingFriendRequestItemsElgg\Friends\Relationships::createFriendRelationshipизменена наElgg\Friends\Relationships::removePendingFriendRequest_groups_gatekeeper_allow_profile_pageизменена наElgg\Groups\Access::allowProfilePage_groups_page_menuизменена наElgg\Groups\Menus\Page::register_groups_page_menu_group_profileизменена наElgg\Groups\Menus\Page::registerGroupProfile_groups_relationship_invited_menuизменена наElgg\Groups\Menus\Relationship::registerInvitedItems_groups_relationship_member_menuизменена наElgg\Groups\Menus\Relationship::registerRemoveUser_groups_relationship_membership_request_menuизменена наElgg\Groups\Menus\Relationship::registerMembershipRequestItems_groups_title_menuизменена наElgg\Groups\Menus\Title::register_groups_topbar_menu_setupизменена наElgg\Groups\Menus\Topbar::registergroups_access_default_overrideизменена наElgg\Groups\Access::overrideDefaultAccessgroups_create_event_listenerизменена наElgg\Groups\Group::createAccessCollectiongroups_default_page_owner_handlerизменена наElgg\Groups\PageOwner::detectPageOwnergroups_entity_menu_setupизменена наElgg\Groups\Menus\Entity::registerиElgg\Groups\Menus\Entity::registerFeaturegroups_fields_setupизменена наElgg\Groups\FieldsHandlergroups_members_menu_setupизменена наElgg\Groups\Menus\GroupsMembers::registergroups_set_access_collection_nameизменена наElgg\Groups\Access::getAccessCollectionNamegroups_set_urlизменена наElgg\Groups\Group::getEntityUrlgroups_setup_filter_tabsизменена наElgg\Groups\Menus\Filter::registerGroupsAllgroups_update_event_listenerизменена наElgg\Groups\Group::updateGroupgroups_user_join_event_listenerизменена наElgg\Groups\Group::joinGroupgroups_user_leave_event_listenerизменена наElgg\Groups\Group::leaveGroupgroups_write_acl_plugin_hookизменена наElgg\Groups\Access::getWriteAccessinvitefriends_add_friendsизменена наElgg\InviteFriends\Users::addFriendsOnRegisterinvitefriends_register_page_menuизменена наElgg\InviteFriends\Menus\Page::registerlikes_permissions_checkизменена наElgg\Likes\Permissions::allowLikedEntityOwnerlikes_permissions_check_annotateизменена наElgg\Likes\Permissions::allowLikeOnEntitylikes_social_menu_setupизменена наElgg\Likes\Menus\Social::registermembers_register_filter_menuизменена наElgg\Members\Menus\Filter::registermessages_can_editизменена наElgg\Messages\Permissions::canEditmessages_can_edit_containerизменена наElgg\Messages\Permissions::canEditContainermessages_purgeизменена наElgg\Messages\User::purgeMessagesmessages_register_topbarизменена наElgg\Messages\Menus\Topbar::registermessages_user_hover_menuизменена наElgg\Messages\Menus\UserHover::registerиElgg\Messages\Menus\Title::registernotifications_update_collection_notifyизменена наElgg\Notifications\Relationships::updateUserNotificationsPreferencesOnACLChangenotifications_update_friend_notifyизменена наElgg\Friends\Relationships::applyFriendNotificationsSettingsnotifications_relationship_removeизменена наElgg\Friends\Relationships::deleteFriendNotificationSubscriptionиElgg\Groups\Relationships::removeGroupNotificationSubscriptions_notifications_page_menuизменена наElgg\Notifications\Menus\Page::register_notification_groups_title_menuизменена наElgg\Notifications\Menus\Title::registerpages_container_permission_checkизменена наElgg\Pages\Permissions::allowContainerWriteAccesspages_entity_menu_setupизменена наElgg\Pages\Menus\Entity::registerpages_icon_url_overrideизменена наElgg\Pages\Icons::getIconUrlpages_owner_block_menuизменена наElgg\Pages\Menus\OwnerBlock::registerUserItemиElgg\Pages\Menus\OwnerBlock::registerGroupItempages_prepare_notificationизменена наElgg\Pages\Notifications\CreatePageEventHandlerpages_register_db_seedsизменена наElgg\Pages\Database::registerSeedspages_set_revision_urlизменена наElgg\Pages\Extender::setRevisionUrlpages_write_access_options_hookизменена наElgg\Pages\Views::removeAccessPublicpages_write_access_varsизменена наElgg\Pages\Views::preventAccessPublicpages_write_permission_checkизменена наElgg\Pages\Permissions::allowWriteAccessElgg\Pages\Menus::registerPageMenuItemsизменена наElgg\Pages\Menus\PagesNav::register_profile_admin_page_menuизменена наElgg\Profile\Menus\Page::registerAdminProfileFields_profile_fields_setupизменена наElgg\Profile\FieldsHandler_profile_title_menuизменена наElgg\Profile\Menus\Title::register_profile_topbar_menuизменена наElgg\Profile\Menus\Topbar::register_profile_user_hover_menuизменена наElgg\Profile\Menus\UserHover::register_profile_user_page_menuизменена наElgg\Profile\Menus\Page::registerProfileEditprofile_default_widgets_hookизменена наElgg\Profile\Widgets::getDefaultWidgetsListreportedcontent_user_hover_menuизменена наElgg\ReportedContent\Menus\UserHover::registersearch_exclude_robotsизменена наElgg\Search\Site::preventSearchIndexingsearch_output_tagизменена наElgg\Search\Views::setSearchHrefsite_notifications_register_entity_menuизменена наElgg\SiteNotifications\Menus\Entity::registersite_notifications_sendизменена наElgg\SiteNotifications\Notifications::createSiteNotifications_uservalidationbyemail_user_unvalidated_bulk_menuизменена наElgg\UserValidationByEmail\Menus\UserUnvalidatedBulk::register_uservalidationbyemail_user_unvalidated_menuизменена наElgg\UserValidationByEmail\Menus\UserUnvalidated::registeruservalidationbyemail_after_registration_urlизменена наElgg\UserValidationByEmail\Response::redirectToEmailSentuservalidationbyemail_check_manual_loginизменена наElgg\UserValidationByEmail\User::preventLoginuservalidationbyemail_disable_new_userизменена наElgg\UserValidationByEmail\User::disableUserOnRegistrationsystem_log_archive_cronизменена наElgg\SystemLog\Cron::rotateLogssystem_log_default_loggerизменена наElgg\SystemLog\Logger::logsystem_log_delete_cronизменена наElgg\SystemLog\Cron::deleteLogssystem_log_listenerизменена наElgg\SystemLog\Logger::listensystem_log_user_hover_menuизменена наElgg\SystemLog\Menus\UserHover::registerthewire_add_original_posterизменена наElgg\TheWire\Notifications\CreateTheWireEventHandlerthewire_owner_block_menuизменена наElgg\TheWire\Menus\OwnerBlock::registerthewire_prepare_notificationизменена наElgg\TheWire\Notifications\CreateTheWireEventHandlerthewire_setup_entity_menu_itemsизменена наElgg\TheWire\Menus\Entity::register
Переработанные исключения
Все исключения в системе Elgg теперь наследуют Elgg\Exceptions\Exception и находятся в пространстве имён Elgg\Exceptions
Перемещённые исключения
ClassExceptionиспользуйтеElgg\Exceptions\ClassExceptionConfigurationExceptionиспользуйтеElgg\Exceptions\ConfigurationExceptionCronExceptionиспользуйтеElgg\Exceptions\CronExceptionDatabaseExceptionиспользуйтеElgg\Exceptions\DatabaseExceptionDataFormatExceptionиспользуйтеElgg\Exceptions\DataFormatExceptionInstallationExceptionиспользуйтеElgg\Exceptions\Configuration\InstallationExceptionInvalidParameterExceptionиспользуйтеElgg\Exceptions\InvalidParameterExceptionIOExceptionиспользуйтеElgg\Exceptions\FileSystem\IOExceptionLoginExceptionиспользуйтеElgg\Exceptions\LoginExceptionPluginExceptionиспользуйтеElgg\Exceptions\PluginExceptionRegistrationExceptionиспользуйтеElgg\Exceptions\Configuration\RegistrationExceptionSecurityExceptionиспользуйтеElgg\Exceptions\SecurityExceptionElgg\Database\EntityTable\UserFetchFailureExceptionиспользуйтеElgg\Exceptions\Database\UserFetchFailureExceptionElgg\Di\FactoryUncallableExceptionиспользуйтеElgg\Exceptions\Di\FactoryUncallableExceptionElgg\Di\MissingValueExceptionиспользуйтеElgg\Exceptions\Di\MissingValueExceptionElgg\Http\Exception\AdminGatekeeperExceptionиспользуйтеElgg\Exceptions\Http\Gatekeeper\AdminGatekeeperExceptionElgg\Http\Exception\AjaxGatekeeperExceptionиспользуйтеElgg\Exceptions\Http\Gatekeeper\AjaxGatekeeperExceptionElgg\Http\Exception\GroupToolGatekeeperExceptionиспользуйтеElgg\Exceptions\Http\Gatekeeper\GroupToolGatekeeperExceptionElgg\Http\Exception\LoggedInGatekeeperExceptionиспользуйтеElgg\Exceptions\Http\Gatekeeper\LoggedInGatekeeperExceptionElgg\Http\Exception\LoggedOutGatekeeperExceptionиспользуйтеElgg\Exceptions\Http\Gatekeeper\LoggedOutGatekeeperExceptionElgg\Http\Exception\UpgradeGatekeeperExceptionиспользуйтеElgg\Exceptions\Http\Gatekeeper\UpgradeGatekeeperExceptionElgg\I18n\InvalidLocaleExceptionиспользуйтеElgg\Exceptions\I18n\InvalidLocaleExceptionElgg\BadRequestExceptionиспользуйтеElgg\Exceptions\Http\BadRequestExceptionElgg\CsrfExceptionиспользуйтеElgg\Exceptions\Http\CsrfExceptionElgg\EntityNotFoundExceptionиспользуйтеElgg\Exceptions\Http\EntityNotFoundExceptionElgg\EntityPermissionsExceptionиспользуйтеElgg\Exceptions\Http\EntityPermissionsExceptionElgg\GatekeeperExceptionиспользуйтеElgg\Exceptions\Http\GatekeeperExceptionElgg\GroupGatekeeperExceptionиспользуйтеElgg\Exceptions\Http\Gatekeeper\GroupGatekeeperExceptionElgg\HttpExceptionиспользуйтеElgg\Exceptions\HttpExceptionElgg\PageNotFoundExceptionиспользуйтеElgg\Exceptions\Http\PageNotFoundExceptionElgg\ValidationExceptionиспользуйтеElgg\Exceptions\Http\ValidationExceptionElgg\WalledGardenExceptionиспользуйтеElgg\Exceptions\Http\Gatekeeper\WalledGardenException
Удалённые исключения
CallExceptionClassNotFoundExceptionIncompleteEntityExceptionInvalidClassExceptionNotificationExceptionNotImplementedExceptionиз плагина Web Services
Переработанные трейты
Для лучшей организации пространства имён Elgg все трейты перемещены в пространство имён Elgg\Traits
Elgg\Cacheableперемещён вElgg\Traits\CacheableElgg\Cli\PluginsHelperперемещён вElgg\Traits\Cli\PluginsHelperElgg\Cli\Progressingперемещён вElgg\Traits\Cli\ProgressingElgg\Database\Seeds\Seeding\GroupHelpersперемещён вElgg\Traits\Seeding\GroupHelpersElgg\Database\Seeds\Seeding\TimeHelpersперемещён вElgg\Traits\Seeding\TimeHelpersElgg\Database\Seeds\Seedingперемещён вElgg\Traits\SeedingElgg\Database\LegacyQueryOptionsAdapterперемещён вElgg\Traits\Database\LegacyQueryOptionsAdapterElgg\Debug\Profilableперемещён вElgg\Traits\Debug\ProfilableElgg\Di\ServiceFacadeперемещён вElgg\Traits\Di\ServiceFacadeElgg\Entity\ProfileDataперемещён вElgg\Traits\Entity\ProfileDataElgg\Loggableперемещён вElgg\Traits\LoggableElgg\Notifications\EventSerializationперемещён вElgg\Traits\Notifications\EventSerializationElgg\TimeUsingперемещён вElgg\Traits\TimeUsing
Различные изменения API
Значения по умолчанию для
ignore_empty_bodyиprevent_double_submitпри использованииelgg_view_formизменены наtrue.Формы настроек плагинов (
plugins/{$plugin_id}/settings) больше не получают$vars['plugin'], используйте$vars['entity']Elgg\Router\Middleware\WalledGarden::isPublicPage()больше нельзя вызывать статическиElgg\Cli\PluginsHelper::getDependents()больше не доступен публичноElggPlugin::getLanguagesPath()больше не доступен публично\ElggBatchбольше не реализует интерфейсElgg\BatchResult, но сохраняет те же функции\ElggEntityбольше не реализует интерфейсLocatable, но сохраняет те же функции\Elgg\Eventбольше не реализует интерфейсы\Elgg\ObjectEventи\Elgg\UserEvent, но сохраняет те же функцииВью
output/iconбольше не использует переменнуюconvertElggData::save()теперь всегда возвращаетboolсогласно документации. Все наследующие классы обновлены (напр.ElggEntity,ElggMetadata,ElggRelationshipи т.д.)Elgg\Email::getTo()теперь всегда возвращаетarrayElggPlugin::activate()иElggPlugin::deactivate()теперь могут выбрасыватьElgg\Exceptions\PluginExceptionс более подробной информацией об ошибке\ElggRelationship::RELATIONSHIP_LIMITудалена, используйте\Elgg\Database\RelationshipsTable::RELATIONSHIP_COLUMN_LENGTHКонстанты
ORIGIN_SUBSCRIPTIONSиORIGIN_INSTANTв\Elgg\Notifications\NotificationудаленыБольше нельзя использовать событие
delete, <entity_type>для предотвращения удаления сущности. Используйте событиеdelete:before, <entity_type>Внешние файлы больше не сортируются по приоритету, а возвращаются в том порядке, в котором они зарегистрированы
Интерфейс
Friendableудалён. Реализованные функции вElggUserперемещены вElgg\Traits\Entity\FriendsФлаг конфигурации
profile_using_customбольше не доступенВозвращаемое значение
elgg_create_river_item()будетfalse, если создание было предотвращено событием'create:before', 'river'Константа
ELGG_PLUGIN_USER_SETTING_PREFIXудалена, используйте вспомогательную функцию\ElggUser::getNamespacedPluginSettingName()Константа
ELGG_PLUGIN_INTERNAL_PREFIXудалена, для получения имени приватной настройки приоритета плагина используйте\ElggPlugin::PRIORITY_SETTING_NAMEКласс
SiteNotificationFactoryудалён, используйтеSiteNotification::factory()Класс
Elgg\Email\Addressбольше не выбрасываетLaminas\Mail\Exception\InvalidArgumentException, а теперь выбрасываетElgg\Exceptions\InvalidArgumentException
Устаревшие API
Функции классов
ElggPlugin::getUserSetting()используйтеElggUser::getPluginSetting()ElggPlugin::setUserSetting()используйтеElggUser::setPluginSetting()
Функции библиотеки
forward()используйте экземплярыElgg\Exceptions\HttpExceptionилиelgg_redirect_response()
Хуки плагинов
'usersettings', 'plugin'используйте хук'plugin_setting', '<entity type>'
Удалённые функции
Функции классов
Elgg\Config::getEntityTypes()используйте константуElgg\Config::ENTITY_TYPESElggFile::setDescription()используйте$file->description = $new_descriptionElggGroup::addObjectToGroup()ElggGroup::removeObjectFromGroup()ElggPlugin::getAllUserSettings()ElggPlugin::getDependencyReport()ElggPlugin::getError()ElggPlugin::unsetAllUserSettings()ElggPlugin::unsetAllUserAndPluginSettings()используйтеElggPlugin::unsetAllEntityAndPluginSettings()ElggWidget::getContext()используйте$entity->contextElggWidget::setContext()используйте$entity->context = $contextElgg\Notifications\NotificationsService::getDeprecatedHandler()Elgg\Notifications\NotificationsService::getMethodsAsDeprecatedGlobal()используйтеelgg_get_notification_methods()Elgg\Notifications\NotificationsService::registerDeprecatedHandler()Elgg\Notifications\NotificationsService::setDeprecatedNotificationSubject()Elgg\Email::getRecipient()используйтеElgg\Email::getTo()Elgg\Email::setRecipient()Elgg\Entity::getLocation()используйте$entity->locationElgg\Entity::setLocation()используйте$entity->location = $location
Функции библиотеки
access_get_show_hidden_status()используйтеelgg()->session->getDisabledEntityVisibility()diagnostics_md5_dir()elgg_add_subscription()используйте\ElggEntity::addSubscription()elgg_get_available_languages()используйтеelgg()->translator->getAvailableLanguages()elgg_get_all_plugin_user_settings()elgg_get_entities_from_plugin_user_settings()используйтеelgg_get_entities()с параметрами приватных настроек и префиксом имени настройкиplugin:user_setting:elgg_get_filter_tabs()используйте хуки меню на'register', 'menu:filter:<filter_id>'elgg_get_loaded_css()используйтеelgg_get_loaded_external_files('css', 'head')elgg_get_loaded_js()используйтеelgg_get_loaded_external_files('js', $location)elgg_get_system_messages()используйтеelgg()->system_messages->loadRegisters()elgg_prepend_css_urls()elgg_remove_subscription()используйте\ElggEntity::removeSubscription()elgg_set_plugin_setting()используйте$plugin->setSetting($name, $value)elgg_set_plugin_user_setting()используйтеElggUser::setPluginSetting()elgg_set_system_messages()используйтеelgg()->system_messages->saveRegisters()elgg_unset_plugin_setting()используйте$plugin->unsetSetting($name)elgg_unset_plugin_user_setting()используйтеElggUser::removePluginSetting()get_language_completeness()используйтеelgg()->translator->getLanguageCompleteness()get_installed_translations()используйтеelgg()->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()используйте\ElggWire::getParent()validate_email_address()используйтеelgg()->accounts->assertValidEmail()validate_password()используйтеelgg()->accounts->assertValidPassword()validate_username()используйтеelgg()->accounts->assertValidUsername()
Удалённые views / ресурсы
admin/develop_tools/inspect/webserviceselgg/thewire.jsinput/urlshortenermessages/jsперемещён вforms/messages/process.jsnavigation/menu/elements/item_depsфункциональность объединена сnavigation/menu/elements/itemobject/plugin/elements/contributorsnotifications/groupsnotifications/personalиспользуйтеnotifications/settingsилиnotifications/usersnotifications/settings/personalперемещён вnotifications/settings/recordsnotifications/settings/collectionsnotifications/settings/otherрасширяйтеnotifications/settings/recordsnotifications/subscriptions/groupsиспользуйтеforms/notifications/subscriptions/groupsnotifications/subscriptions/usersиспользуйтеforms/notifications/subscriptions/usersresources/comments/viewиспользуйте\Elgg\Controllers\CommentEntityRedirectorresources/riverиспользуйтеresources/activity/allилиresources/activity/ownerилиresources/activity/friendsreportedcontent/admin_cssthewire/previous
Удалённые хуки / события
Событие
created, riverудалено. Используйте событиеcreate:after, river.Хук
creating, riverудалён. Используйте событиеcreate:before, river, если хотите заблокировать создание элемента ленты.Хук
filter_tabs, <context>удалён. Используйте хукregister, menu:filter:<filter_id>Хук
output, ajaxудалён. Используйте хукajax_response, если хотите повлиять на результаты.Хук
reportedcontent:addудалён. Используйте событиеcreate, objectдля предотвращения создания.Хук
reportedcontent:archiveудалён. Используйте хукpermissions_check, object.Хук
reportedcontent:deleteудалён. Используйте событиеdelete, objectдля предотвращения удаления.
Удалённые действия
Действие
reportedcontent/deleteзаменено на универсальное действие удаления сущности