С 4.x до 5.0

CKEditor

Редактор обновлён до версии 5. Это добавляет новые функции (например, упоминания и изображения в контенте), но также влияет на существующие плагины. Наиболее заметны изменения в The Wire (который теперь также поддерживает упоминания) и удаление плагина Embed.

Связанное меню „longtext“ больше недоступно.

Composer

Требования к PHP

Минимальная версия PHP теперь 8.0.

Faker

Библиотека faker больше не поддерживается fzaninotto, поэтому мы перешли на форк, который поддерживается FakerPHP.

События и хуки

Эти две схожие концепции объединены, и отныне мы будем ссылаться только на события. Публичный сервис hooks больше не существует. Все хуки теперь можно регистрировать в разделе events вашего плагина. Если вы используете колбэки хуков, ожидающие аргумент с типом ElggHook, вам потребуется обновить его на ElggEvent.

Событие создания

События create, <object|group|user|site> больше нельзя использовать для предотвращения создания сущности. Используйте create:before, если хотите предотвратить создание.

Приватные настройки

Концепция приватных настроек удалена из системы. Все приватные настройки скопированы в метаданные. Все связанные функции удалены.

Обновления

Асинхронные или системные обновления больше не являются классами, реализующими интерфейсы, а наследуют абстрактные классы. Обновите ваши обновления для наследования правильных классов. Причина этого изменения — возможность получения доступа к сущности ElggUpgrade из Batch, который выполняет часть обновления. Вы можете получить доступ к обновлению, вызвав $this->getUpgrade().

Сессия

Если вы используете сервис сессии напрямую (или через elgg_get_session()), возможно, потребуется обновить ваш код. Различные функции этого класса перемещены в сервис elgg()->session_manager.

Gatekeepers (проверки доступа)

Middleware PageOwnerCanEditGatekeeper теперь требует установки pageowner. Этот gatekeeper теперь также всегда требует авторизованного пользователя.

Плагин Files

Файлы, загруженные через плагин file, больше не хранятся у владельца, а хранятся вместе с сущностью файла. Также изменены иконки файлов. Изображения иконок доступны только для типов файлов-изображений. Размеры иконок изменены для использования стандартных размеров иконок.

Плагин Embed

Плагин embed удалён.

JavaScript

Система хуков

Функции хуков JavaScript перемещены в AMD-модуль. Если вы использовали хуки JavaScript, вам необходимо обновить код для использования модуля elgg/hook. Концепция „мгновенных хуков“ больше не присутствует в системе.

Событие 'init', 'system' больше не вызывается в JavaScript.

Удалённые функции

  • elgg.is_in_object_array

  • elgg.is_instant_hook

  • elgg.is_triggered_hook

  • elgg.push_to_object_array

  • elgg.register_hook_handler используйте функцию register, предоставляемую модулем elgg\hooks

  • elgg.register_instant_hook

  • elgg.set_triggered_hook

  • elgg.trigger_hook используйте функцию trigger, предоставляемую модулем elgg\hooks

Исключения

Использование исключений в Elgg пересмотрено. \Elgg\Exceptions\InvalidParameterException удалено и заменено на правильное исключение. Также проверено использование \Elgg\Exceptions\InvalidArgumentException. В некоторых случаях исключение заменено на более подходящее.

ElggRiverItem

Больше нельзя устанавливать произвольные данные во время выполнения на ElggRiverItem. Поскольку данные были доступны только во время выполнения и не сохранялись в базу данных, это различие удалено. При установке неподдерживаемого атрибута выбрасывается \Elgg\Exceptions\RuntimeException.

// this is allowed
$item = new \ElggRiverItem();
$item->subject_guid = elgg_get_logged_in_user_guid();

// this is no longer allowed (causes an \Elgg\Exceptions\RuntimeException)
$item = new \ElggRiverItem();
$item->foo = 'bar';

Опции метаданных в функциях получения

Ранее существовала магия, которая превращала строку metadata_value в массив, если она содержала ,.

Эта магия удалена. Теперь вам нужно предоставлять массив самостоятельно. Из-за этой магии было невозможно выполнять запросы по значению метаданных, содержащему ,.

// previously
$options = [
        'metadata_name_value_pairs' => [
                'some_name' => 'some_value1, some_value2',
        ],
];

// would result into, thus giving it an OR value
$options = [
        'metadata_name_value_pairs' => [
                'name' => 'some_name',
                'value' => [
                        'some_value1',
                        'some_value2',
                ],
                'operand' => '=',
        ],
];

Изменения в функциях

Следующие функции теперь имеют типизированные аргументы и/или типы возвращаемых значений, это может вызывать ошибки TypeError. Также у некоторых функций классов типизированы возвращаемые значения, и вам следует обновить определение вашей функции. У некоторых функций могут быть изменены аргументы или тип возвращаемого значения.

Типы возвращаемых значений функций библиотеки

  • elgg_add_admin_notice() теперь возвращает null при ошибке вместо bool

  • elgg_create_river_item() теперь возвращает null при ошибке или ElggRiverItem

  • elgg_delete_metadata() больше не возвращает null

  • elgg_delete_river() больше не возвращает null

  • elgg_deprecated_notice() больше не возвращает bool

  • elgg_generate_entity_url() теперь возвращает null при ошибке вместо bool

  • elgg_generate_url() теперь возвращает null при ошибке вместо bool

  • elgg_get_annotation_from_id() теперь возвращает null, если аннотация не найдена, вместо bool

  • elgg_get_download_url() теперь возвращает null при ошибке

  • elgg_get_entity_as_row() теперь возвращает null, если сущность не найдена, вместо bool

  • elgg_get_entity_dates() больше не возвращает bool

  • elgg_get_form_footer() больше не возвращает bool

  • elgg_get_inline_url() теперь возвращает null при ошибке

  • elgg_get_metadata_from_id() теперь возвращает null, если метаданные не найдены

  • elgg_get_page_owner_entity() теперь возвращает null, если владелец страницы не найден

  • elgg_get_river_item_from_id() теперь возвращает null, если элемент ленты не найден

  • elgg_get_system_cache() теперь возвращает экземпляр \Elgg\Cache\BaseCache вместо \ElggCache

  • elgg_get_uploaded_file() теперь возвращает null, если файл не найден или файл недействителен

  • elgg_normalize_site_url() теперь возвращает null, когда URL не является URL сайта

  • elgg_register_action() больше не возвращает bool

  • elgg_register_menu_item() больше не имеет возвращаемого значения

  • elgg_register_widget_type() больше не возвращает значение

  • elgg_set_form_footer() больше не возвращает значение

  • elgg_trigger_after_event() больше не возвращает значение

  • elgg_unregister_action() больше не возвращает значение

  • elgg_unregister_event_handler() больше не возвращает значение

  • elgg_unregister_notification_event() больше не возвращает значение

  • elgg_unregister_notification_method() больше не возвращает значение

  • elgg_unregister_widget_type() больше не возвращает значение

  • elgg_view_annotation() больше не возвращает bool

  • elgg_view_comments() больше не возвращает bool

  • elgg_view_list_item() больше не возвращает bool

  • elgg_view_relationship() больше не возвращает bool

  • get_entity() теперь возвращает null, если сущность не найдена, вместо bool

  • get_user() теперь возвращает null, если пользователь не найден, вместо bool

  • elgg_ws_expose_function() больше не возвращает bool

Параметры функций библиотеки

  • blog_prepare_form_vars() теперь требует ElggBlog для $blog и ElggAnnotation для $revision

  • bookmarks_prepare_form_vars() теперь требует ElggBookmark для $bookmark

  • discussion_prepare_form_vars() теперь требует ElggDiscussion для $topic

  • elgg_add_action_tokens_to_url() теперь требует string для $url и bool для $html_encode

  • elgg_can_edit_widget_layout() теперь требует string для $context и int для $user_guid

  • elgg_clear_event_handlers() теперь требует string для $event и $type

  • elgg_clear_sticky_form() теперь требует string для $context

  • elgg_create_widget() теперь требует int для $owner_guid и $access_id, а также string для $handler и $context

  • elgg_define_js() теперь требует string для $name и array для $config

  • elgg_delete_system_cache() теперь требует string для $type

  • elgg_echo() теперь требует string для $message_key и string для $language

  • elgg_enqueue_notification_event() больше не требует $type

  • elgg_entity_exists() теперь требует int для $guid

  • elgg_entity_gatekeeper() теперь требует int для $guid, string для $type и $subtype, а также bool для $validate_can_edit

  • elgg_error_response() теперь требует string или array для $message и string для $forward_url

  • elgg_extend_view() теперь требует string для $view и $view_extension

  • elgg_extract() теперь требует bool для $strict

  • elgg_format_bytes() теперь требует int для $size и $precision

  • elgg_format_element() теперь требует string для $tag_name и string для $text

  • elgg_format_html() теперь требует string для $html

  • elgg_generate_action_url() теперь требует string для $action и boolean для $add_csrf_tokens

  • elgg_generate_entity_url() теперь требует string для $resource и $subresource

  • elgg_generate_url() теперь требует string для $name

  • elgg_get_config() теперь требует string для $name

  • elgg_get_download_url() теперь требует bool для $use_cookie и string для $expires

  • elgg_get_embed_url() теперь требует string для $size

  • elgg_get_entity_class() теперь требует string для $type и string для $subtype

  • elgg_get_excerpt() теперь требует string для $text и int для $num_chars

  • elgg_get_friendly_upload_error() теперь требует int для $error_code

  • elgg_get_friendly_time() теперь требует int для $time и $current_time

  • elgg_get_friendly_title() теперь требует string для $title

  • elgg_get_icon_sizes() теперь требует string для $entity_type и $entity_subtype

  • elgg_get_ini_setting_in_bytes() теперь требует string для $setting

  • elgg_get_inline_url() теперь требует bool для $use_cookie и string для $expires

  • elgg_get_login_url() теперь требует string для $fragment

  • elgg_get_metadata_from_id() теперь требует int для $id

  • elgg_get_registration_url() теперь требует string для $fragment

  • elgg_get_request_data() теперь требует bool для $filter_result

  • elgg_get_simplecache_url() теперь требует string для $view и $sub_view

  • elgg_get_sticky_value() теперь требует string для $form_name, string для $variable и bool для $filter_result

  • elgg_get_sticky_values() теперь требует string для $form_name и bool для $filter_result

  • elgg_get_title_input() теперь требует string для $variable и string для $default

  • elgg_get_uploaded_file() теперь требует string для $input_name и bool для $check_for_validity

  • elgg_get_uploaded_files() теперь требует string для $input_name

  • elgg_get_view_extensions() теперь требует string для $view

  • elgg_get_widget_types() теперь требует string или array для $context

  • elgg_get_widgets() теперь требует int для $owner_guid и string для $context

  • elgg_group_tool_gatekeeper() теперь требует string для $tool_name и int для $group_guid

  • elgg_html_decode() теперь требует string для $string

  • elgg_http_add_url_query_elements() теперь требует string для $url

  • elgg_http_build_url() теперь требует bool для $html_encode

  • elgg_http_get_signed_url() теперь требует string для $url и $expires

  • elgg_http_remove_url_query_element() теперь требует string для $url и string для $element

  • elgg_http_url_is_identical() теперь требует string для $url1 и $url2, а также array для $ignore_params

  • elgg_http_validate_signed_url() теперь требует string для $url

  • elgg_in_context() теперь требует string для $context

  • elgg_is_sticky_form() теперь требует string для $form_name

  • elgg_is_widget_type() теперь требует string для $handler и $context

  • elgg_language_key_exists() теперь требует string для $key и string для $language

  • elgg_list_entities() теперь требует callable для $getter и callable для $viewer

  • elgg_list_entities_from_relationship_count() теперь требует array для $options

  • elgg_list_relationships() теперь требует array для $options

  • elgg_load_system_cache() теперь требует string для $type

  • elgg_make_sticky_form() теперь требует string для $form_name

  • elgg_normalize_site_url() теперь требует string для $unsafe_url

  • elgg_normalize_url() теперь требует string для $url

  • elgg_ok_response() теперь требует string или array для $message и string для $forward_url

  • elgg_parse_emails() теперь требует string для $text

  • elgg_push_context() теперь требует string для $context

  • elgg_redirect_response() теперь требует string для $forward_url

  • elgg_register_action() теперь требует string для $filename

  • elgg_register_ajax_view() теперь требует string для $view

  • elgg_register_error_message() теперь требует string|array для $message

  • elgg_register_event_handler() теперь требует string для $event и $type, int для $priority и callable|string для $callable

  • elgg_register_menu_item() теперь требует string для $menu_name и array|\ElggMenuItem для $menu_item

  • elgg_register_notification_event() теперь требует string для $object_type и $object_subtype

  • elgg_register_notification_method() теперь требует string для $name

  • elgg_register_route() теперь требует string для $name

  • elgg_register_simplecache_view() теперь требует string для $view_name

  • elgg_register_success_message() теперь требует string|array для $message

  • elgg_register_title_button() удалён первый аргумент ($handler) и теперь требует string для $name, $entity_type и $entity_subtype

  • elgg_register_viewtype_fallback() теперь требует string для $viewtype

  • elgg_register_widget_type() теперь поддерживает только array, подходящий для \Elgg\WidgetDefinition::factory() для $options

  • elgg_remove_config() теперь требует string для $name

  • elgg_require_js() теперь требует string для $name

  • elgg_save_config() теперь требует string для $name

  • elgg_save_resized_image() теперь требует string для $source и string для $destination

  • elgg_save_system_cache() теперь требует string для $type

  • elgg_set_config() теперь требует string для $name

  • elgg_set_context() теперь требует string для $context

  • elgg_set_entity_class() теперь требует string для $type, string для $subtype и string для $class

  • elgg_set_form_footer() теперь требует string для $footer

  • elgg_set_http_header() теперь требует string для $header и bool для $replace

  • elgg_set_page_owner_guid() теперь требует int для $guid

  • elgg_set_view_location() теперь требует string для $view, $location и $viewtype

  • elgg_set_viewtype() теперь требует string для $viewtype

  • elgg_strip_tags() теперь требует string для $string и $allowable_tags

  • elgg_trigger_after_event() теперь требует string для $event и $type

  • elgg_trigger_before_event() теперь требует string для $event и $type

  • elgg_trigger_deprecated_event() теперь требует string для $event, $type, $message и $version

  • elgg_trigger_event() теперь требует string для $event и $type

  • elgg_unregister_ajax_view() теперь требует string для $view

  • elgg_register_event_handler() теперь требует string для $event и $type, а также callable|string для $callable

  • elgg_unregister_menu_item() теперь требует string для $menu_name и $item_name

  • elgg_unregister_notification_event() теперь требует string для $object_type и $object_subtype

  • elgg_unregister_notification_method() теперь требует string для $name

  • elgg_unregister_route() теперь требует string для $name

  • elgg_unregister_widget_type() теперь требует string для $handler

  • elgg_unrequire_js() теперь требует string для $name

  • elgg_validate_invite_code() теперь требует string для $username и $code

  • elgg_validate_registration_data() теперь требует string для $username, $name и $email, bool для $multiple и string|array для $password

  • elgg_view() теперь требует string для $view и $viewtype, а также bool для $recurse

  • elgg_view_annotation_list() теперь требует array для $annotations

  • elgg_view_deprecated() теперь требует string для $view, $message и $version

  • elgg_view_comments() теперь требует ElggEntity для $entity и bool для $add_comment

  • elgg_view_entity_icon() теперь требует string для $size и array для $vars

  • elgg_view_entity_list() теперь требует array для $entities

  • elgg_view_exists() теперь требует string для $view и $viewtype, а также array для $vars

  • elgg_view_form() теперь требует string для $action и array для $form_vars и $body_vars

  • elgg_view_icon() теперь требует string для $name и array для $vars

  • elgg_view_image_block() теперь требует string для $type, $title и $body

  • elgg_view_layout() теперь требует string для $layout_name и array для $vars

  • elgg_view_message() теперь требует string для $type и $body

  • elgg_view_page() теперь требует string для $title и $page_shell, array для $vars и string|array для $body

  • elgg_view_relationship_list() теперь требует array для $relationships

  • elgg_view_river_item() теперь требует ElggRiverItem для $item

  • elgg_view_resource() теперь требует string для $name

  • elgg_view_title() теперь требует string для $title

  • embed_get_list_options() теперь требует array для $options

  • embed_list_items() теперь требует array для $entities и $vars

  • file_prepare_form_vars() теперь требует ElggFile для $file

  • get_entity() теперь требует int для $guid

  • get_input() теперь требует string для $variable и bool для $filter_result

  • get_user() теперь требует int для $guid

  • groups_get_group_join_menu_item() теперь требует ElggUser для $user

  • groups_get_group_leave_menu_item() теперь требует ElggUser для $user

  • groups_get_invited_groups() теперь требует int для $user_guid, bool для $return_guids и array для $options

  • notify_user() теперь требует int|array для $to, int для $from и string для $subject и $message

  • pages_get_navigation_tree() теперь требует ElggEntity для $container

  • pages_prepare_form_vars() теперь требует ElggPage для $page, int для $parent_guid и ElggAnnotation для $revision

  • pages_prepare_parent_breadcrumbs() теперь требует ElggPage для $page

  • set_input() теперь требует string для $variable

  • thewire_filter() теперь требует string для $text

  • thewire_get_hashtags() теперь требует string для $text

  • thewire_save_post() теперь требует string для $text и $method, int для $userid, $access_id и $parent_guid

  • uservalidationbyemail_request_validation() теперь требует int для $user_guid

  • elgg_ws_expose_function() теперь требует string для $method, $description и $call_method, array для $parameters, bool для $require_api_auth, $require_user_auth и $assoc

  • elgg_ws_register_service_handler() теперь требует string для $handler

  • elgg_ws_unexpose_function() теперь требует string для $method и string для $http_request_method

  • elgg_ws_unregister_service_handler() теперь требует string для $handler

Типы возвращаемых значений методов классов

  • \ElggEntity::deleteMetadata() больше не возвращает null

  • \ElggEntity::getOwnedAccessCollection() больше не возвращает false, а null, если коллекция доступа не найдена

  • \ElggEntity::setContainerGUID() больше не возвращает int

  • \ElggFile::getDownloadURL() теперь возвращает null при ошибке

  • \ElggFile::getInlineURL() теперь возвращает null при ошибке

  • \ElggMenuItem::factory() больше не возвращает null при ошибке

  • \Elgg\Page::getParentEntity() больше не возвращает false, а null, если родительская сущность не найдена

Параметры функций классов

  • \ElggAccessCollection::getObjectFromID() теперь требует int для $id

  • \ElggAnnotation::getObjectFromID() теперь требует int для $id

  • \ElggEntity::addRelationship() теперь требует int для $guid_two и string для $relationship

  • \ElggEntity::cache() теперь требует bool для $persist

  • \ElggEntity::canAnnotate() теперь требует int для $user_guid и string для $annotation_name

  • \ElggEntity::canComment() теперь требует int для $user_guid

  • \ElggEntity::canDelete() теперь требует int для $user_guid

  • \ElggEntity::canEdit() теперь требует int для $user_guid

  • \ElggEntity::canWriteToContainer() теперь требует int для $user_guid и string для $type и $subtype

  • \ElggEntity::countAnnotations() теперь требует string для $name

  • \ElggEntity::countEntitiesFromRelationship() теперь требует string для $relationship и bool для $inverse_relationship

  • \ElggEntity::delete() теперь требует bool для $recursive

  • \ElggEntity::deleteAnnotations() теперь требует string для $name

  • \ElggEntity::deleteIcon() теперь требует string для $type

  • \ElggEntity::deleteMetadata() теперь требует string для $name

  • \ElggEntity::deleteOwnedAnnotations() теперь требует string для $name

  • \ElggEntity::disable() теперь требует string для $reason и bool для $recursive

  • \ElggEntity::disableAnnotations() теперь требует string для $name

  • \ElggEntity::enable() теперь требует bool для $recursive

  • \ElggEntity::enableAnnotations() теперь требует string для $name

  • \ElggEntity::getAnnotationsAvg() теперь требует string для $name

  • \ElggEntity::getAnnotationsMax() теперь требует string для $name

  • \ElggEntity::getAnnotationsSum() теперь требует string для $name

  • \ElggEntity::getIcon() теперь требует string для $size и $type

  • \ElggEntity::getIconLastChange() теперь требует string для $size и $type

  • \ElggEntity::getIconURL() теперь требует string или array для $params

  • \ElggEntity::getObjectFromID() теперь требует int для $id

  • \ElggEntity::getOwnedAccessCollections() теперь требует array для $options

  • \ElggEntity::getOwnedAccessCollection() теперь требует string для $subtype

  • \ElggEntity::getMetadata() теперь требует string для $name

  • \ElggEntity::getVolatileData() теперь требует string для $name

  • \ElggEntity::hasIcon() теперь требует string для $size и $type

  • \ElggEntity::removeAllRelationships() больше не допускает передачу null в $relationship

  • \ElggEntity::removeRelationship() теперь требует int для $guid_two и string для $relationship

  • \ElggEntity::saveIconFromElggFile() теперь требует string для $type

  • \ElggEntity::saveIconFromLocalFile() теперь требует string для $input_name и $type

  • \ElggEntity::saveIconFromUploadedFile() теперь требует string для $input_name и $type

  • \ElggEntity::setContainerGUID() теперь требует int для $container_guid

  • \ElggEntity::setDisplayName() теперь требует string для $display_name

  • \ElggEntity::setMetadata() теперь требует string для $name и $value_type, а также bool для $multiple

  • \ElggEntity::setTempMetadata() теперь требует string для $name и bool для $multiple

  • \ElggEntity::setVolatileData() теперь требует string для $name

  • \ElggEntity::updateLastAction() теперь требует int для $posted

  • \ElggMetadata::getObjectFromID() теперь требует int для $id

  • \ElggRelationship::getObjectFromID() теперь требует int для $id

  • \ElggFile::getDownloadURL() теперь требует bool для $use_cookie и string для $expires

  • \ElggFile::getInlineURL() теперь требует bool для $use_cookie и string для $expires

  • \ElggGroup::isToolEnabled() теперь требует string для $name

  • \ElggMenuItem::factory() теперь требует array для $options

  • \ElggTempFile::getDownloadURL() теперь требует bool для $use_cookie и string для $expires

  • \ElggTempFile::getInlineURL() теперь требует bool для $use_cookie и string для $expires

  • \Elgg\WebServices\Di\ApiRegistrationService::registerApiMethod() теперь требует только \Elgg\WebServices\ApiMethod в качестве параметра

Перемещённые классы

  • \ElggAutoP перемещён в \Elgg\Views\AutoParagraph

  • \ElggCache перемещён в \Elgg\Cache\BaseCache

  • \ElggDiskFilestore перемещён в \Elgg\Filesystem\Filestore\DiskFilestore

  • \ElggFilestore перемещён в \Elgg\Filesystem\Filestore

  • \ElggRewriteTester перемещён в \Elgg\Router\RewriteTester

  • \ElggTempDiskFilestore перемещён в \Elgg\Filesystem\Filestore\TempDiskFilestore

  • \Elgg\Database\SiteSecret перемещён в \Elgg\Security\SiteSecret

Устаревшие API

  • elgg_clear_plugin_hook_handlers используйте elgg_clear_event_handlers

  • elgg_register_plugin_hook_handler используйте elgg_register_event_handler

  • elgg_trigger_plugin_hook используйте elgg_trigger_event_results

  • elgg_unregister_plugin_hook_handler используйте elgg_unregister_event_handler

  • get_user_by_email используйте elgg_get_user_by_email

  • get_user_by_username используйте elgg_get_user_by_username

Удалённые классы

  • Elgg\WebServices\ApiKeyForm

  • Loggable этот интерфейс был объединён с классом ElggData

Удалённые функции

  • blog_prepare_form_vars

  • bookmarks_prepare_form_vars

  • discussion_prepare_form_vars

  • elgg_get_breadcrumbs

  • elgg_pop_breadcrumb

  • elgg_set_email_transport используйте _elgg_services()->set('mailer', ...)

  • elgg_trigger_deprecated_plugin_hook

  • elgg_ws_expose_function используйте elgg-plugin.php или событие 'register', 'api_methods'

  • file_prepare_form_vars

  • get_user_by_email используйте elgg_get_user_by_email

  • get_user_by_username используйте elgg_get_user_by_username

  • groups_prepare_form_vars

  • messages_prepare_form_vars

  • pages_prepare_form_vars

  • thewire_latest_guid

Удалённые функции классов

  • \ElggWidget::saveSettings()

Удалённые события

  • access:collections:addcollection, collection используйте последовательность create, access_collection

  • access:collections:deletecollection, collection используйте последовательность delete, access_collection

  • prepare, breadcrumbs используйте register, menu:breadcrumbs

  • widget_settings, <widget_handler>

Удалённые исключения

  • \Elgg\Exceptions\InvalidParameterException

Константы

  • Неправильно написанная константа REFERER была удалена. Используйте REFERRER.

  • Константа REFERRER изменена на строку со значением __elgg_referrer