De 2.x à 3.0
Contenu
Conteneur d’injection de dépendance - DI = Dependency Injection
Fonctions plugin qui nécessitent maintenant un
$plugin_idexpliciteConstructeurs de classes qui n’acceptent désormais qu’un objet
stdClassounullAuto-complétion / saisie automatique (sélecteurs d’utilisateurs et de contacts)
Les réponses aux discussions ont été converties en commentaires
Les nouvelles fonctionnalités du schéma MySQL ne sont pas appliquées
PHP 7.0 est désormais requis
5.6 atteint sa fin de vie. PHP 7.0 est maintenant nécessaire pour installer et exécuter Elgg.
$CONFIG est supprimé !
Pas exactement, cependant vous devez auditer cet usage et devriez le remplacer par elgg_get_config() et elgg_set_config(), comme recommandé depuis Elgg 1.9.
La variable globale $CONFIG est maintenant un proxy pour le conteneur de configuration de Elgg, et les modifications échoueront si vous essayez de modifier directement les propriétés du tableau. Par exemple, $CONFIG->cool_fruit[] = 'Poire';. Le bon côté est que ces échecs émettront des NOTICEs.
Vues supprimées
forms/account/settings: l’extension de usersettings peut désormais étendre la vueforms/usersettings/save
forms/admin/site/advanced/system
resources/file/download
output/checkboxes: utilisezoutput/tagssi vous voulez le même comportement
input/write_access: mod/pages utilise désormais le hook de plugin access:collections:write.
invitefriends/form
page/layouts/content: utilisezpage/layouts/default
page/layouts/one_column: utilisezpage/layouts/default
page/layouts/one_sidebar: utilisezpage/layouts/default
page/layouts/two_sidebar: utilisezpage/layouts/default
page/layouts/walled_garden: utilisezpage/layouts/default
page/layouts/walled_garden/cancel_button
page/layouts/two_column_left_sidebar
page/layouts/widgets/add_panel
page/elements/topbar_wrapper: mettez à jour votre utilisation depage/elements/topbarpour inclure une vérification si l’utilisateur est connecté
pages/icon
groups/group_sort_menu: utilisez le hook pluginregister, filter:menu:groups/all
groups/my_status
groups/profile/stats
subscriptions/form/additions: étendez plutôtnotifications/parameters/other
likes/count: des modifications peuvent désormais être apportées à l’élément de menulikes_count
likes/css: les likes utilisent désormaiselgg/likes.css
resources/members/index
messageboard/css
notifications/subscriptions/personal
notifications/subscriptions/collections
notifications/subscriptions/form
notifications/subscriptions/jsfuncs
notifications/subscriptions/forminternals
notifications/css
pages/input/parent
river/item: utilisez elgg_view_river_item() pour afficher des éléments de la rivière
river/user/default/profileupdate
admin.js
aalborg_theme/homepage.png
aalborg_theme/css
resources/avatar/view: Utilisez l’API des icônes d’entités
ajax_loader.gif
button_background.gif
button_graduation.png
elgg_toolbar_logo.gif
header_shadow.png
powered_by_elgg_badge_drk_bckgnd.gif
powered_by_elgg_badge_light_bckgnd.gif
sidebar_background.gif
spacer.gif
toptoolbar_background.gif
two_sidebar_background.gif
ajax_loader_bw.gif: utilisezgraphics/ajax_loader_bw.gif
elgg_logo.png: utilisezgraphics/elgg_logo.png
favicon-128.png: utilisezgraphics/favicon-128.png
favicon-16.png: utilisezgraphics/favicon-16.png
favicon-32.png: utilisezgraphics/favicon-32.png
favicon-64.png: utilisezgraphics/favicon-64.png
favicon.ico: utilisezgraphics/favicon.ico
favicon.svg: utilisezgraphics/favicon.svg
friendspicker.png: utilisezgraphics/friendspicker.png
walled_garden.jpg: utilisezgraphics/walled_garden.jpg
core/friends/collection
core/friends/collections
core/friends/collectiontabs
core/friends/tablelist
core/friends/talbelistcountupdate
lightbox/elgg-colorbox-theme/colorbox-images/*`
navigation/menu/page: utilise désormaisnavigation/menu/defaultet un hook de préparation - prepare
navigation/menu/site: utilise désormais la vue par défaut
page/elements/by_line: Utilisezobject/elements/imprint
forms/admin/site/advanced/security: l’information du secret du site a été déplacé versforms/admin/security/settings
river/object/file/create: regardez Rivière - Flux d’activité
river/object/page/create: regardez Rivière - Flux d’activité
river/object/page_top/create: regardez Rivière - Flux d’activité
river/relationship/member: regardez Rivière - Flux d’activité
object/page_top: utilisezobject/page
ajax/discussion/reply/edit: Voyez Les réponses aux discussions ont été converties en commentaires
discussion/replies: Voyez Les réponses aux discussions ont été converties en commentaires
object/discussion_reply: Voyez Les réponses aux discussions ont été converties en commentaires
resources/discussion/reply/edit: Voyez Les réponses aux discussions ont été converties en commentaires
resources/elements/discussion_replies: Voyez Les réponses aux discussions ont été converties en commentaires
river/elements/discussion_replies: Voyez Les réponses aux discussions ont été converties en commentaires
river/object/discussion/create
river/object/discussion_reply/create: Voyez Les réponses aux discussions ont été converties en commentaires
search/object/discussion_reply/entity: Voyez Les réponses aux discussions ont été converties en commentaires
rss/discussion/replies: Voyez Les réponses aux discussions ont été converties en commentaires
search/header
search/layoutdans les deux types de vuesdefaultetrss
search/no_results
search/object/comment/entity
search/css: Déplacé verssearch/search.css
search/startblurb
bookmarks/bookmarklet.gif
blog_get_page_content_list
blog_get_page_content_archive
blog_get_page_content_edit
forms/invitefriends/invite: utilisezforms/friends/invite
resources/invitefriends/invite: utilisezresources/friends/invite
resources/reportedcontent/add
resources/reportedcontent/add_form
resources/site_notifications/view: Utilisezresources/site_notifications/owner
resources/site_notifications/everyone: Utilisezresources/site_notifications/all
Fonctions/méthodes supprimées
Toutes les fonctions dans engine/lib/deprecated-1.9.php ont été supprimées. Voir https://github.com/Elgg/Elgg/blob/2.0/engine/lib/deprecated-1.9.php pour ces fonctions. Chaque déclaration @deprecated comprend des instructions sur ce qu’il faut utiliser à la place. Toutes les fonctions de engine/lib/deprecated-1.10.php ont été supprimées. Voir https://github.com/Elgg/Elgg/blob/2.0/engine/lib/deprecated-1.10.php pour ces fonctions. Chaque déclaration @deprecated comprend des instructions sur ce qu’il faut utiliser à la place.
elgg_register_library: exigez - require - vos bibliothèques afin qu’elles soient disponibles globalement pour d’autres plugins
elgg_load_library
activity_profile_menu
can_write_to_container: UtilisezElggEntity->canWriteToContainer()
create_metadata_from_array
metadata_array_to_values
datalist_get
datalist_set
detect_extender_valuetype
developers_setup_menu
elgg_disable_metadata
elgg_enable_metadata
elgg_get_class_loader
elgg_get_metastring_id
elgg_get_metastring_map
elgg_register_class
elgg_register_classes
elgg_register_viewtype
elgg_is_registered_viewtype
file_delete: UtilisezElggFile->deleteIcon()
file_get_type_cloud
file_type_cloud_get_url
get_default_filestore
get_site_entity_as_row
get_group_entity_as_row
get_missing_language_keys
get_object_entity_as_row
get_user_entity_as_row
update_river_access_by_object
garbagecollector_orphaned_metastrings
groups_access_collection_override
groups_get_group_tool_options: Utilisezelgg()->group_tools->all()
groups_join_group: UtilisezElggGroup::join
groups_prepare_profile_buttons: Utilisez le hookregister, menu:title
groups_register_profile_buttons: Utilisez le hookregister, menu:title
groups_setup_sidebar_menus
groups_set_icon_url
groups_setup_sidebar_menus
messages_notification_msg
set_default_filestore
generate_user_password: UtilisezElggUser::setPassword
row_to_elggrelationship
run_function_once: Utilisez l’interfaceElgg\Upgrade\Batch
system_messages
notifications_plugin_pagesetup
elgg_format_url: Utilisez elgg_format_element() ou la vue « output/text » pour échapper le HTML.
get_site_by_url
elgg_override_permissions: N’est plus utilisé comme gestionnaire pour les hookspermissions_checketcontainer_permissions_check
elgg_check_access_overrides
AttributeLoaderest devenu obsolète et a été supprimé
Application::loadSettings
ElggEntity::addToSite
ElggEntity::disableMetadata
ElggEntity::enableMetadata
ElggEntity::getSites
ElggEntity::removeFromSite
ElggEntity::isFullyLoaded
ElggEntity::clearAllFiles
ElggPlugin::getFriendlyName: UtilisezElggPlugin::getDisplayName()
ElggPlugin::setID
ElggPlugin::unsetAllUsersSettings
ElggFile::setFilestore: les objets ElggFile ne peuvent plus utiliser de répertoire de fichiers personnalisé.
ElggFile::size: UtilisezgetSize
ElggDiskFilestore::makeFileMatrix: UtilisezElgg\EntityDirLocator
ElggData::get: Peut habituellement être remplacé par la lecture de la propriété
ElggData::getClassName: Utilisezget_class()
ElggData::set: Peut habituellement être remplacé par l’écriture de propriété
ElggEntity::setURL: VoyezgetURLpour plus de détails sur le hook plugin
ElggMenuBuilder::compareByWeight: UtilisezcompareByPriority
ElggMenuItem::getWeight: UtilisezgetPriority
ElggMenuItem::getContent: Utilisezelgg_view_menu_item()
ElggMenuItem::setWeight: UtilisezsetPriority
ElggRiverItem::getPostedTime: UtilisezgetTimePosted
ElggSessiona supprimé toutes les méthodes dépréciées
ElggSite::addEntity
ElggSite::addObject
ElggSite::addUser
ElggSite::getEntities: Utilisezelgg_get_entities()
ElggSite::getExportableValues: UtiliseztoObject
ElggSite::getMembers: Utilisezelgg_get_entities()
ElggSite::getObjects: Utilisezelgg_get_entities()
ElggSite::listMembers: Utilisezelgg_list_entities()
ElggSite::removeEntity
ElggSite::removeObject
ElggSite::removeUser
ElggSite::isPublicPage: Logique déplacée vers le routeur et qui ne devrait pas être consultée directement
ElggSite::checkWalledGarden: Logique déplacée vers le routeur et qui ne devrait pas être accédée directement
ElggUser::countObjects: Utilisezelgg_get_entities()
Logger::getClassName: Utilisezget_class()
Elgg\Application\Database::getTablePrefix: Lisez la propriétéprefix
elgg_view_access_collections()
ElggSession::get_ignore_access: UtilisezgetIgnoreAccess
ElggSession::set_ignore_access: UtilisezsetIgnoreAccess
profile_pagesetup
pages_can_delete_page: Utilisez$entity->canDelete()
pages_search_pages
pages_is_page: utilisez$entity instanceof ElggPage
discussion_comment_override: Voyez Les réponses aux discussions ont été converties en commentaires
discussion_can_edit_reply: Voyez Les réponses aux discussions ont été converties en commentaires
discussion_reply_menu_setup: Voyez Les réponses aux discussions ont été converties en commentaires
discussion_reply_container_logic_override: Voyez Les réponses aux discussions ont été converties en commentaires
discussion_reply_container_permissions_override: Voyez Les réponses aux discussions ont été converties en commentaires
discussion_update_reply_access_ids: Voyez Les réponses aux discussions ont été converties en commentaires
discussion_search_discussion: Voyez Les réponses aux discussions ont été converties en commentaires
discussion_add_to_river_menu: Voyez Les réponses aux discussions ont été converties en commentaires
discussion_prepare_reply_notification: Voyez Les réponses aux discussions ont été converties en commentaires
discussion_redirect_to_reply: Voyez Les réponses aux discussions ont été converties en commentaires
discussion_ecml_views_hook: Voyez Les réponses aux discussions ont été converties en commentaires
search_get_where_sql
search_get_ft_min_max
search_get_order_by_sql
search_consolidate_substrings
search_remove_ignored_words
search_get_highlighted_relevant_substrings
search_highlight_words
search_get_search_view
search_custom_types_tags_hook
search_tags_hook
search_users_hook
search_groups_hook
search_objects_hook
members_list_popular
members_list_newest
members_list_online
members_list_alpha
members_nav_popular
members_nav_newest
members_nav_online
members_nav_alpha
uservalidationbyemail_generate_code
- Toutes les fonctions liées à la table des sous-types d’entités :
add_subtype: Utilisezelgg_set_entity_classlors de l’exécutionupdate_subtype: Utilisezelgg_set_entity_classlors de l’exécutionremove_subtypeget_subtype_idget_subtype_from_idget_subtype_class: Utilisezelgg_get_entity_classget_subtype_class_from_id
- Tous les caches ont été consolidés en une seule couche d’API. Les fonctions et méthodes suivantes ont été supprimées :
is_memcache_available_elgg_get_memcache_elgg_invalidate_memcache_for_entityElggMemcacheElggFileCacheElggStaticVariableCacheElggSharedMemoryCacheL’interface
Elgg\Cache\Poolet toutes les classes d’extension
- À la suite des modifications apportées au journal du système - system log :
system_log_default_logger: déplacé dans le pluginsystem_logsystem_log_listener: déplacé dans le pluginsystem_logsystem_log: déplacé dans le pluginsystem_logget_system_log: renommésystem_log_get_loget déplacé dans le pluginsystem_logget_log_entry: renommésystem_log_get_log_entryet déplacé dans le pluginsystem_logget_object_from_log_entry: renommésystem_log_get_object_from_log_entryet déplacé dans le pluginsystem_logarchive_log: renommésystem_log_archive_loget déplacé dans le pluginsystem_loglogbrowser_user_hover_menu: renommésystem_log_user_hover_menuet déplacé dans le pluginsystem_loglogrotate_archive_cron: renommésystem_log_archive_cronet déplacé dans le pluginsystem_loglogrotate_delete_cron: renommésystem_log_delete_cronet déplacé dans le pluginsystem_loglogrotate_get_seconds_in_period: renommésystem_log_get_seconds_in_periodet déplacé dans le pluginsystem_loglog_browser_delete_log: renommésystem_log_browser_delete_loget déplacé dans le pluginsystem_log
APIs dépréciées
ban_user: UtilisezElggUser->ban()
create_metadata: Utilisez la définition avecElggEntityouElggEntity->setMetadata()
update_metadata: UtilisezElggMetadata->save()
get_metadata_url
create_annotation: UtilisezElggEntity->annotate()
update_metadata: UtilisezElggAnnotation->save()
elgg_get_user_validation_status: UtilisezElggUser->isValidated()
make_user_admin: UtilisezElggUser->makeAdmin()
remove_user_admin: UtilisezElggUser->removeAdmin()
unban_user: UtilisezElggUser->unban()
elgg_get_entities_from_attributes: Utilisezelgg_get_entities()
elgg_get_entities_from_metadata: Utilisezelgg_get_entities()
elgg_get_entities_from_relationship: Utilisezelgg_get_entities()
elgg_get_entities_from_private_settings: Utilisezelgg_get_entities()
elgg_get_entities_from_access_id: Utilisezelgg_get_entities()
elgg_list_entities_from_metadata: Utilisezelgg_list_entities()
elgg_list_entities_from_relationship: Utilisezelgg_list_entities()
elgg_list_entities_from_private_settings: Utilisezelgg_list_entities()
elgg_list_entities_from_access_id: Utilisezelgg_list_entities()
elgg_list_registered_entities: Utilisezelgg_list_entities()
elgg_batch_delete_callback
\Elgg\Project\Paths::sanitize: Utilisez\Elgg\Project\Paths::sanitize()
elgg_group_gatekeeper: Utilisezelgg_entity_gatekeeper()
get_entity_dates: Utilisezelgg_get_entity_dates()
messages_set_url: UtilisezElggEntity::getURL()
Variables globales supprimées
$CURRENT_SYSTEM_VIEWTYPE
$DEFAULT_FILE_STORE
$ENTITY_CACHE
$SESSION: Utilisez l’API fournie parelgg_get_session()
$CONFIG->site_id: Utilisez1
$CONFIG->search_info
$CONFIG->input: Utilisezset_inputetget_input
Classes/interfaces supprimées
FilePluginFile: remplacez parElggFile(ou chargez avecget_entity())
Elgg_Notifications_Notification
Elgg\Database\EntityTable\UserFetchResultException.php
Elgg\Database\MetastringsTable
Elgg\Database\SubtypeTable
Exportableet ses méthodesexportetgetExportableValues: UtiliseztoObject
ExportException
Importableet sa méthodeimport.
ImportException
ODDet toutes les classes commençant parODD*.
XmlElement
Elgg_Notifications_Event: Utilisez\Elgg\Notifications\Event
Elgg\Mail\Address: utilisezElgg\Email\Address
ElggDiscussionReply: utilisezElggCommentvoyez Les réponses aux discussions ont été converties en commentaires
Modifications de schéma
Le moteur de stockage des tables de la base de données a été changé de MyISAM à InnoDB. Vous devrez peut-être optimiser les paramètres de votre base de données pour cette modification. La table datalists a été supprimée. Tous les paramètres de la table datalists ont été fusionnés dans la table config.
Les chaînes de métadonnées - metastrings - de la base de données ont été dénormalisées à des fins de performance. Nous avons supprimé la table metastrings et mis toutes les valeurs de chaîne directement dans les tables de métadonnées et d’annotation. Vous devez mettre à jour vos requêtes personnalisées pour refléter ces modifications. Les alias de table msv et msn ne sont plus disponibles. Il est préférable de ne pas s’appuyer sur les alias de table utilisés dans les requêtes du noyau. Si vous avez besoin d’utiliser des clauses personnalisées, vous devriez faire vos propres jointures.
Dans la table users_entity, les colonnes password et hash ont été supprimées.
La table geocode_cache a été supprimée car elle n’était plus utilisée.
La colonne subtype dans la table entities ne contient plus d’ID de sous-type, mais une chaîne avec le sous-type. La table entity_subtypes a été supprimée.
les colonnes type, subtype et access_id de la table river ont été abandonnées. Pour les requêtes sans elgg_get_river() joignez la table entities sur object_guid pour vérifier le type et le sous-type de l’entité. La colonne d’accès n’est plus utilisée depuis un certain temps : les requêtes sont conçues pour garantir l’accès aux trois entités (subject, object et target).
Changements dans les fonctions de récupération elgg_get_entities, elgg_get_metadata et elgg_get_annotations
elgg_get_entities accepte désormais toutes les options qui étaient auparavant réparties entre elgg_get_entities_from_metadata, elgg_get_entities_from_annotations, elgg_get_entities_from_relationship, elgg_get_entities_from_private_settings et elgg_get_entities_from_access_id. Ces dernières ont été dépréciées.
La transmission d’instructions MySQL brutes aux options est obsolète. Il est conseillé d’utiliser des Closures qui reçoivent une instance de \Elgg\Database\QueryBuilder et de préparer l’instruction à l’aide de la couche d’abstraction de la base de données. D’une part, cela permettra de s’assurer que toutes les instructions sont correctement aseptisées à l’aide du pilote de base de données, d’autre part, il nous permettra de passer à une construction de requête orientée objet qui soit testable.
Les instructions wheres ne devraient pas utiliser de chaînes SQL brutes, et plutôt passer une instance de \Elgg\Database\Clauses\WhereClause ou une Closure qui renvoie une instance de \Doctrine\DBAL\Query\Expression\CompositeExpression :
elgg_get_entities([
'wheres' => [
function(\Elgg\Database\QueryBuilder $qb, $alias) {
$joined_alias = $qb->joinMetadataTable($alias, 'guid', 'status');
return $qb->compare("$joined_alias.name", 'in', ['draft', 'unsaved_draft'], ELGG_VALUE_STRING);
}
]
]);
Les clauses joins, order_by, group_by, selects ne devraient pas utiliser de chaînes SQL brutes. Utilisez les Closures qui reçoivent une instance de \Elgg\Database\QueryBuilder et renvoyez une instruction préparée - prepared statement.
L’option reverse_order_by a été supprimée.
Les plugins ne devraient pas s’appuyer sur des alias de table jointes et sélectionnées. Les Closures transmises au tableau d’options recevront un deuxième argument correspondant à l’alias de table sélectionné. Les plugins doivent effectuer leurs propres jointures et utiliser des alias de jointure en conséquence.
Notez que toute l’API privée autour de la construction de chaînes SQL brutes a également été supprimée. Si vous l’utilisiez dans vos plugins, soyez informé que tout ce qui est marqué comme @access private ou @internal dans le noyau peut être modifié et supprimé à tout moment, et que nous ne garantissons aucune compatibilité arrière pour ces fonctions. NE LES UTILISEZ PAS. Si vous avez besoin de les utiliser, ouvrez un ticket sur Github et nous envisagerons d’ajouter un équivalent public.
Propriétés de l’entité booléenne
Le stockage des métadonnées, des annotations et des valeurs de paramètres privés a été aligné.
Les valeurs booléennes sont transformées en entiers lorsqu’elles sont enregistrées : false est stocké comme 0 et true est stocké comme 1. Cela a des implications non rétro-compatibles pour les paramètres privés, qui étaient précédemment stockés comme des chaînes vides pour les valeurs false. Les plugins doivent écrire leurs propres scripts de migration pour modifier les valeurs de la BD des chaînes vides à 0 (pour les paramètres privés qui sont censés stocker des valeurs booléennes) afin de s’assurer que elgg_get_entities() peut récupérer ces valeurs avec private_setting_name_value_pairs contenant des valeurs false. Cela s’applique aux paramètres de plugin, ainsi qu’à tous les paramètres privés ajoutés aux entités.
Modifications des métadonnées
Les métadonnées ne sont plus contrôlées par accès. Si votre plugin a créé des métadonnées avec un accès restreint, ces restrictions ne seront pas respectées. Vous devez utiliser des annotations ou des entités à la place, qui fournissent un contrôle d’accès.
Ne lisez pas ou n’écrivez pas la propriété access_id sur les objets ElggMetadata.
Les métadonnées ne sont plus activées ou désactivées. Vous ne pouvez plus effectuer les appels API enable et disable sur les métadonnées.
Les métadonnées n’ont plus de owner_guid. Il n’est plus possible d’interroger les métadonnées sur la base de leur owner_guids. Par conséquence, ElggMetadata::canEdit() renvoie toujours true indépendamment de l’utilisateur connecté, à moins que cela soit explicitement remplacé par un hook de plugin.
Permissions et droits d’accès
Le service des capacités de l’utilisateur ne déclenche plus les hooks de vérification des autorisations lorsque :
les autorisations sont vérifiées pour un utilisateur administrateur
les autorisations sont vérifiées lorsque l’accès est ignoré avec
elgg_set_ignore_access()
Cela signifie que les plugins ne peuvent plus modifier les autorisations dans les cas mentionnés ci-dessus.
elgg_check_access_overrides() a été supprimé, car les plugins n’auront plus besoin de valider les remplacements d’accès.
Les traductions pour les niveaux d’accès de Elgg par défaut ont de nouvelles clefs de traduction.
Modifications Multisite
Avant la version 3.0, Elgg disposait d’une certaine prise en charge (partielle) afin de pouvoir avoir plusieurs sites dans la même base de données. Ce concept multisite a été complètement supprimé dans la version 3.0. Les entités n’ont plus l’attribut site_guid. Cela signifie qu’il n’y a plus la possibilité d’avoir des entités sur différents sites. Si vous avez actuellement plusieurs sites dans votre base de données, la mise à niveau de Elgg vers Elgg 3.0 échouera. Vous devez séparer les différents sites en bases de données/tables distinctes.
En lien avecla suppression du concept multisite de Elgg, il n’est plus nécessaire que les entités aient une relation “member_of_site” avec l’entité du site. Toutes les fonctions liées à l’ajout/suppression de cette relation ont été supprimées. Toutes les relations existantes seront supprimées dans le cadre de cette mise à niveau.
La définition de ElggSite::$url n’a aucun effet. La lecture de l’URL du site est toujours faite depuis la valeur définie par $CONFIG->wwwroot dans settings.php, ou calculée par Symphony Request.
ElggSite::save() échouera si ce n’est pas le site principal.
Modifications de la sous-table des entités
La sous-table sites_entity pour ElggSite n’existe plus. Tous les attributs ont été déplacés vers les métadonnées. La sous-table groups_entity pour ElggGroup n’existe plus. Tous les attributs ont été déplacés vers les métadonnées. La sous-table objects_entity pour ElggObject n’existe plus. Tous les attributs ont été déplacés vers les métadonnées. La sous-table users_entity pour ElggUser n’existe plus. Tous les attributs ont été déplacés vers les métadonnées.
Si vous avez des requêtes personnalisées faisant référence à cette table, vous devez les mettre à jour. Si vous avez une fonction qui s’appuie sur Entity->getOriginalAttributes(), sachez que cela ne renvoie que les attributs de base d’une ElggEntity et ne contient plus les attributs secondaires.
Collection d’accès des Contacts et des Groupes
La table des collections d’accès dispose maintenant d’une colonne de sous-type. Ces données supplémentaires permettent d’identifier le but de l’ACL. Les collections d’accès appartenant à l’utilisateur sont supposées être utilisées comme collections de contacts - Friends Collections - et ont le sous-type “friends_collection”. L’information de collection d’accès des groupes était auparavant conservée dans la métadonnée group_acl. Avec l’introduction du sous-type ACL, cette information a été déplacée vers l’attribut de sous-type ACL.
L’access_id ACCESS_FRIENDS a été migré vers une collection d’accès réelle (avec le sous-type friends). Toutes les entités et annotations ont été mises à jour pour utiliser le nouvel id de collection d’accès. La collection d’accès est créée lors de la création d’un utilisateur. Lorsqu’une relation du type friends est créée, le guid associé sera également ajouté à la collection d’accès. Vous ne pouvez plus enregistrer ou mettre à jour les entités avec l’id d’accès ACCESS_FRIENDS.
Les sous-types n’ont plus d’ID
Les sous-types d’entités ont été dénormalisés. La table entity_subtypes a été supprimée et la colonne subtype dans la table entités contient simplement la représentation sous forme de chaîne du sous-type.
Par conséquent, toutes les API relatives à l’ajout et la mise à jour des sous-types et des classes d’entités ont été supprimées.
Les plugins peuvent désormais utiliser elgg_set_entity_class() et elgg_get_entity_class() pour enregistrer une classe d’entité personnalisée au moment de l’exécution (par exemple dans le gestionnaire d’initialisation du système).
Toutes les entités DOIVENT maintenant avoir un sous-type. Par défaut, les sous-types suivants sont ajoutés et réservés :
userpour les utilisateurs
grouppour les groupes
sitepour les sites
Chargement de classe personnalisée
Elgg ne fournit plus de fonctions API pour enregistrer des classes personnalisées. Si vous avez besoin de classes personnalisées, vous pouvez utiliser des classes PSR-0 dans le dossier /classes de votre plugin ou utiliser composer pour charger automatiquement des classes supplémentaires.
Les fonctions suivantes liées à l’enregistrement des classes ont été supprimées :
elgg_get_class_loader
elgg_register_class
elgg_register_classes
Conteneur d’injection de dépendance - DI = Dependency Injection
Les plugins peuvent maintenant définir leurs services et les attacher au conteneur public DI de Elgg en fournissant des définitions dans elgg-services.php dans la racine du répertoire de plugin.
elgg() ne renvoie plus une instance d’application Elgg, mais une instance de conteneur DI.
Modifications de la recherche
Nous avons ajouté un service de recherche dans le noyau, par conséquent, le plugin search fournit désormais uniquement une interface utilisateur pour afficher les formulaires et afficher les résultats de recherche. Beaucoup des vues du plugin search ont été affectées par ce changement.
Les indices FULLTEXT ont été supprimés sur différentes tables. Le plugin de recherche utilise désormais toujours une requête LIKE lors de l’exécution d’une recherche.
Voir la documentation Search Service et Search hooks pour des informations détaillées sur les nouvelles fonctionnalités de recherche.
Bibliothèques supprimées
elgg_register_library et elgg_load_library ont été supprimées. Ces fonctions ont eu peu d’impact sur les performances (en particulier avec OPCache activé), et il a été difficile pour d’autres plugins de travailler avec les APIs contenues dans les bibliothèques. En outre, il était difficile pour les développeurs de savoir que les APIs étaient contenues dans une bibliothèque alors qu’il y a une autocomplétion par l’IDE.
Si vous êtes concerné par les performances, déplacez la logique vers les classes et laissez PHP les charger automatiquement au besoin, sinon utilisez require_once et exigez vos bibliothèques.
Gestionnaires de pages supprimés
file/download
file/search
groupicon
twitterservice
collections/pickercallback
discussion/reply: Voyez Les réponses aux discussions ont été converties en commentaires
expages
invitefriends: Utilisezfriends/{username}/invite
messages/compose: Utilisezmessages/add
reportedcontent
Actions supprimées
file/download: Utilisezelgg_get_inline_urlouelgg_get_download_url
file/delete: Utilisez l’actionentity/delete
import/opendd
discussion/reply/save: Voyez Les réponses aux discussions ont été converties en commentaires
discussion/reply/delete: Voyez Les réponses aux discussions ont été converties en commentaires
comment/delete: Utilisez l’actionentity/delete
uservalidationbyemail/bulk_action: utilisezadmin/user/bulk/validateouadmin/user/bulk/delete
uservalidationbyemail/delete: utilisezadmin/user/bulk/delete
uservalidationbyemail/validate: utilisezadmin/user/bulk/validate
invitefriends/invite: utilisezfriends/invite
Modifications de l’héritage
ElggData(et donc la plupart des objets du domaine Elgg) n’implémente plusExportable
ElggEntityn’implémente plusImportable
ElggGroupn’implémente plusFriendable
ElggRelationshipn’implémente plusImportable
ElggSessionn’implémente plusArrayAccess
Elgg\Application\Databasen’étend plusElgg\Database
APIs JavaScript supprimées
admin.js
elgg.widgets: Utilisez le moduleelgg/widgets. Les dispositions « widgets » chargent ce module automatiquement
lightbox.js: Utilisez le moduleelgg/lightboxau besoin
lightbox/settings.js: Utilisez le hook JSgetOptions, ui.lightboxou l’attributdata-colorbox-opts
elgg.ui.popupClose: Utilisez le moduleelgg/popup
elgg.ui.popupOpen: Utilisez le moduleelgg/popup
elgg.ui.initAccessInputs
elgg.ui.river
elgg.ui.initDatePicker: Utilisez le moduleinput/date
elgg.ui.likesPopupHandler
elgg.embed: Utilisez le moduleelgg/embed
elgg.discussion: Utilisez le moduleelgg/discussion
embed/custom_insert_js: Utilisez le hook JSembed, editor
elgg/ckeditor.js: remplacé parelgg-ckeditor.js
elgg/ckeditor/set-basepath.js
elgg/ckeditor/insert.js
jQuery.cookie: Utilisezelgg.session.cookie
jquery.jeditable
likes.js: Le moduleelgg/likesest chargé automatiquement
messageboard.js
elgg.autocompleten’est plus défini.
elgg.messageboardn’est plus défini.
jQuery.fn.friendsPicker
elgg.ui.toggleMenun’est plus défini
elgg.ui.toggleMenuItems: Utilisez l’attributdata-togglelorsque vous enregistrez des éléments de menu basculables
uservalidationbyemail/js.php: Utilisez le moduleelgg/uservalidationbyemail
discussion.js: Voyez Les réponses aux discussions ont été converties en commentaires
Hooks/événements retirés
Événement login, user : Utilisez login:before ou login:after. Notez que l’utilisateur n’est pas connecté pendant l’événement login:before
Événement delete, annotations : Utilisez delete, annotation
Événement pagesetup, system : Utilisez plutôt les hook de menu ou de coquille depage
Événement upgrade, upgrade : Utilisez upgrade, system à la place
Hook index, system : Remplacez la vue
resources/indexHook object:notifications, <type> : Utilisez le hook send:before, notifications
Hook output:before, layout : Utilisez view_vars, page/layout/<layout_name>
Hook output:after, layout : Utilisez view, page/layout/<layout_name>
Hook email, system : Utilisez les hooks plus granulaires <hook>, system:email
Hook email:message, system : Utilisez le hook zend:message, system:email
Hook members:list, <page> : Utilisez le hook de route ou votre propre gestionnaire de page
Hook members:config, <page> : Utilisez register, menu:filter:members
Hook profile_buttons, group : Utilisez register, menu:title
Formulaires/actions supprimés
formulaire et action
notificationsettings/saveformulaire et action
notificationssettings/groupsaveformulaire et action
discussion/reply/save
APIs qui n’acceptent plus qu’un tableau $options
ElggEntity::getAnnotations
ElggEntity::getEntitiesFromRelationship
ElggEntity::getEntitiesFromRelationship
ElggUser::getGroups
ElggUser::getFriends(en tant queFriendable)
ElggUser::getFriendsOf(dans le cadre deFriendable)
ElggUser::getFriendsObjects(dans le cadre deFriendable)
ElggUser::getObjects(dans le cadre deFriendable)
find_active_users
elgg_get_admin_notices
Fonctions plugin qui nécessitent maintenant un $plugin_id explicite
elgg_get_all_plugin_user_settings
elgg_set_plugin_user_setting
elgg_unset_plugin_user_setting
elgg_get_plugin_user_setting
elgg_set_plugin_setting
elgg_get_plugin_setting
elgg_unset_plugin_setting
elgg_unset_all_plugin_settings
Constructeurs de classes qui n’acceptent désormais qu’un objet stdClass ou null
ElggAnnotation: N’accepte plus un ID d’annotation
ElggGroup: N’accepte plus un GUID
ElggMetadata: N’accepte plus un ID de métadonnées
ElggObject: N’accepte plus un GUID
ElggRelationship: N’accepte plus un ID de relation ninull
ElggSite: N’accepte plus un GUID ni une URL
ElggUser: N’accepte plus un GUID ni un nom d’utilisateur
ElggPlugin: N’accepte plus un GUID ni un chemin. UtilisezElggPlugin::fromIdpour construire un plugin à partir de son chemin
Modifications d’API diverses
ElggBatch: Vous ne pouvez accéder qu’aux propriétés publiques
ElggEntity: Les propriétéstables_splitettables_loadedont été supprimées
ElggEntity: Les URL vides ne seront plus normalisées. Cela signifie que les entités sans URL ne correpondront plus à l’URL de base du site
ElggGroup::removeObjectFromGroupnécessite de passer unElggObject(n’accepte plus un GUID)
ElggUser::$saltn’existe plus en tant qu’attribut, et n’est plus utilisé pour l’authentification
ElggUser::$passwordn’existe plus en tant qu’attribut, et n’est plus utilisé pour l’authentification
elgg_get_widget_typesne prend plus en charge$exactcomme 2ème argument
elgg_instanceofne prend plus en charge le quatrième argumentclass
elgg_view: Les 3ème et 4ème arguments (inutilisés) ont été supprimés. Si vous utilisiez l’argument$viewtype, vous devez mettre à jour votre utilisation.
elgg_view_iconne prend plus en chargetruecomme 2e argument
elgg_list_entitiesne prend plus en charge l’optionview_type_toggle
elgg_list_registered_entitiesne prend plus en charge l’optionview_type_toggle
elgg_logn’accepte plus le niveau"DEBUG"
elgg_dumpn’accepte plus d’argument$to_screen.
elgg_gatekeeperetelgg_admin_gatekeeperne signalent plusloginouadmincomme motif de redirection, mais403
Application::getDb()ne renvoie plus une instance deElgg\Database, mais deElgg\Application\Database
$CONFIGn’est plus disponible en tant que variable locale dans les fichiersstart.phpdes plugins.
elgg_get_config('siteemail')n’est plus disponible. Utilisezelgg_get_site_entity()->email.
ElggEntity::saveIconFromUploadedFileenregistre uniquement la taille master, les autres tailles sont créées sur demande parElggEntity::getIcon()à partir de la taille master
ElggEntity::saveIconFromLocalFileenregistre uniquement la taille master, les autres tailles sont créées sur demande parElggEntity::getIcon()à partir de la taille master
ElggEntity::saveIconFromElggFileenregistre uniquement la taille master`, les autres tailles sont créées sur demande parElggEntity::getIcon()à partir de la taillemasterLes entités de groupe n’ont plus l’attribut magique
username.Le gestionnaire de page ne détecte plus
group:<guid>dans l’URLL’intervalle CRON
rebootest supprimé.Les points de terminaison d’URL
js/etcss/ne sont plus pris en charge. Utilisezelgg_get_simplecache_url().L’action générique d’enregistrement de commentaire n’envoie plus la notification directement, cela a été déchargé vers le système de notification.
Le script
engine/start.phpest supprimé.Les fonctions
set_config,unset_configetget_configont été dépréciées et remplacées parelgg_set_config,elgg_remove_configetelgg_get_config.Les valeurs de configuration
path,wwwrootetdatarootne sont pas lues dans la base de données. Les valeurs du fichier settings.php sont toujours utilisées.Les fonctions de configuration telles que
elgg_get_confign’émondent plus - trim - les clefs.Si vous remplacez la vue
navigation/menu/user_hover/placeholder, vous devez modifier la clef de configurationlazy_hover:menusenelgg_lazy_hover_menus.La valeur de configuration
entity_typesn’est plus présente ni utilisée.Les images téléchargées sont auto-pivotées en fonction de leurs métadonnées d’orientation.
La vue
object/widget/edit/num_displayutilise désormais un champinput/numberau lieu deinput/select; vous pourriez avoir besoin de mettre à jour vos vues de configuration des widgets en conséquence.Les noms d’annotation ne sont plus émondés - trim - lors de l’enregistrement
Le comportement d’extension des vues a été modifié
Une vue étendue recevra désormais tous les hooks classiques (comme le hook view_vars). Il est désormais également possible d’étendre les extensions de vue. Avec ce changement de comportement, tous les rendus de vue se comporteront de la même façon. Cela n’a plus d’importance si une vue est utilisée comme une extension ou non.
L’ordre d’appel des hooks JavaScript pourrait changer
Lors de l’enregistrement pour des hooks, le mot clef all pour la correspondance générique n’a plus aucun effet sur l’ordre dans lequel les gestionnaires sont appelés. Pour vous assurer que votre gestionnaire est appelé en dernier, vous devez lui donner la plus haute priorité de tous les gestionnaires correspondants, ou pour vous assurer que votre gestionnaire est appelé en premier, vous devez lui donner la plus faible priorité de tous les gestionnaires correspondants.
Si les gestionnaires ont été enregistrés avec la même priorité, ceux-ci sont appelés dans l’ordre où ils ont été enregistrés.
Pour émuler le comportement antérieur, les gestionnaires du noyau Elgg enregistrés avec le mot clé all ont été élevés en priorité. Certains de ces gestionnaires seront très probablement appelés dans un ordre différent.
Routage
La gestion des pages à l’aide de elgg_register_page_handler() est devenue obsolète.
Nous avons ajouté une nouvelle API de routage utilisant elgg_register_route(), qui permet aux plugins de définir des routes nommées, en utilisant par la suite des noms de routes pour générer des URLs à l’aide de elgg_generate_url().
Pour plus d’informations, consultez les documentations sur le routage.
À la suite de cette modification, tous les gestionnaires de pages de base ont été supprimés et toute la logique contenue dans ces gestionnaires de pages a été déplacée vers les vues de ressources respectives.
elgg_generate_entity_url() a été ajouté comme raccourci pour générer des URLs à partir de routes nommées qui dépendent du type d’entité et du sous-type.
L’utilisation du paramètre handler dans les menus des entités a été dépréciée au profit des routes d’entités nommées.
Les fonctions Gatekeeper ont été refactorisées pour servir de middleware dans le processus de routage, et en tant que tel, elles ne retournent plus de valeurs. Ces fonctions lancent des exceptions HTTP qui sont ensuite acheminées vers des pages d’erreur et peuvent être redirigées vers d’autres pages via des hooks.
Nommage
Les conventions de nommage des entités et des collections ont changé pour se conformer aux nouveaux schémas de routage :
return [
'item:object:blog' => 'Blog',
'collection:object:blog' => 'Blogs',
'collection:object:blog:all' => 'All site blogs',
'collection:object:blog:owner' => '%s\'s blogs',
'collection:object:blog:group' => 'Group blogs',
'collection:object:blog:friends' => 'Friends\' blogs',
'add:object:blog' => 'Add blog post',
'edit:object:blog' => 'Edit blog post',
];
Ces conventions sont utilisées dans les systèmes de routage et de navigation, de sorte que les plugins sont invités à les suivre.
Filtrage des valeurs de la requête
set_input() et get_input() ne suppriment plus les espaces - trim - des valeurs.
Réponses des actions
Toutes les actions du noyau et des plugins du noyau utilisent maintenant toutes les nouvelles fonctions de Http Response comme elgg_ok_response et elgg_error_response au lieu de forward(). L’effet de ce changement est que dans la plupart des cas le hook “forward”, “system” n’est plus déclenché. Si vous souhaitez modifier les réponses, vous pouvez maintenant utiliser le hook “response”,”action:<name/of/action>”. Cela vous donne plus de contrôle sur la réponse et permet de cibler une action spécifique très facilement.
HtmLawed n’est plus un plugin
N’appelez pas
elgg_load_library('htmlawed').Dans les paramètres du hook pour
'config', 'htmlawed', le nom de la fonctionhook_taga changé.
Nouvelle approche des mises en page - layouts
Les dispositions one_column, one_sidebar, two_sidebar et content ont été supprimées - au lieu de cela, le rendu de la disposition a été centralisé dans default. La mise à jour de la disposition default permet de contrôler pleinement les éléments de mise en page via $vars. Pour obtenir une compatibilité descendante maximale, les appels à elgg_view_layout() avec ces noms de disposition donneront toujours la sortie attendue, mais les plugins doivent commencer à utiliser la disposition default avec un ensemble de paramètres mis à jour.
Les mises en page ont été découpées en éléments plus petits, ce qui devrait faciliter le ciblage d’éléments de mise en page spécifiques par les thèmes sans avoir à remplacer les dispositions en général.
À la suite de ces changements :
toutes les dispositions sont cohérentes dans la façon dont elles gèrent les menus de titre et de filtre, le fil d’Ariane et les sous-vues de mise en page
toutes les dispositions peuvent maintenant être facilement étendues pour avoir plusieurs onglets. Les plugins peuvent passer le paramètre
filter_idqui permettra à d’autres plugins de s’accrocher au hookregister, menu:filter:<filter_id>et d’ajouter de nouveaux onglets. Si aucunfilter_idn’est fourni, le hook par défautregister, menu:filterpeut être utilisé.les vues de mise en page et les sous-vues reçoivent désormais les
identifieretsegmentsde la page en cours de rendules paramètres de mise en page sont disponibles pour les hooks de menu de titre et de filtre, ce qui permet aux ressources de fournir des informations de contexte supplémentaires, par exemple
$entitydans cas d’une ressource pour le profil
Les plugins et thèmes devraient :
Mettez à jour les appels à
elgg_view_layout ()pour utiliser la dispositiondefaultMettez à jour et remplacez le paramètre
navdans les vues de disposition par le paramètrebreadcrumbsMettez à jour leur utilisation du paramètre
filterdans les vues de disposition - layouts, soit en fournissant un ensemble par défaut d’onglets de filtre, soit en définissant un paramètrefilter_idet en utilisant des hooksSupprimez la vue
page/layouts/one_columnSupprimez la vue
page/layouts/one_sidebarSupprimez la vue
page/layouts/two_sidebarSupprimez la vue
page/layouts/contentMettez à jour leur utilisation de
page/layouts/defaultMettez à jour leur utilisation de
page/layouts/errorMettez à jour leur utilisation de
page/layouts/elements/filterMettez à jour leur utilisation de
page/layouts/elements/headerMettez à jour leur utilisation de
page/layouts/elements/footerMettez à jour leur utilisation de
page/elements/titleMettez à jour leur utilisation de
navigation/breadcrumbpour passer$vars ['breadcrumb']àelgg_get_breadcrumbs()Mettez à jour les enregistrements du hook
output:before, layoutversview_vars, page/layout/<layout_name>Mettez à jour les enregistrements du hook
output:after, layoutversview, page/layout/<layout_name>
Plugin Likes
La fonctionnalité Likes n’utilise plus l’API de bascule « toggle » de Elgg, de sorte qu’un seul élément de menu likes est utilisé. Les actions d’ajout/suppression « add » et « remove » ne renvoient plus directement les valeurs Ajax, car les données d’état des mentions J’aime sont maintenant renvoyées avec chaque requête Ajax qui envoie un « guid ». Lorsque le nombre de mentions J’aime est nul, l’élément de menu likes_count est maintenant masqué en ajoutant .hidden à l’élément LI, au lieu de le faire sur l’ancre. De plus, l’élément de menu likes_count est un lien classique, et n’est plus créé par la vue likes/count.
Plugin Notifications
Le plugin Notifications a été réécrit en abandonnant de nombreuses vues et actions. Le but de cette réécriture était de mettre en œuvre une interface plus efficace, extensible et évolutive pour la gestion des préférences de notifications. Nous avons mis en œuvre un balisage beaucoup plus simple, supprimé les styles en excès et le javascript qui était nécessaire pour faire fonctionner l’ancienne interface.
Si votre plugin étend l’une des vues ou s’appuie sur des actions du plugin notifications, il doit être mis à jour.
Plugin Pages
Le sous-type page_top a été migré dans le sous-type page. Le sous-type page dispose de sa propre classe, à savoir ElggPage. Pour vérifier si une ElggPage est une page de premier niveau, la fonction de classe ElggPage->isTopPage() a été ajoutée.
Toutes les pages ont une valeur de métadonnée pour parent_guid, pour les pages de premier niveau celle-ci est 0.
Plugin Profile
Toutes les fonctionnalités liées au profil ont été déplacées hors du noyau dans ce plugin. Les plus remarquables sont l’utilitaire d’administration des champs de profil et le hook pour définir les données de configuration des champs de profil.
Vues de données « Plugin Data Views »
Le plugin Data Views n’est plus distribué avec le noyau.
Plugin de l’API Twitter
Le plugin twitter_api a été retiré du noyau de Elgg. Le plugin est toujours disponible sous forme de package Composer elgg/twitter_api. Pour l’installer, ajoutez ce qui suit à la section require de votre composer.json :
{
"require": {
"elgg/twitter_api": "~1.9"
}
}
Plugin de support des URLs d’origine
Le plugin legacy_urls a été retiré du noyau de Elgg. Le plugin est toujours disponible sous la forme du package Composer elgg/legacy_urls. Pour l’installer, ajoutez ce qui suit à la section require de votre composer.json :
{
"require": {
"elgg/legacy_urls": "~2.3"
}
}
Plugin de validation par e-mail de l’utilisateur
La vue qui liste les utilisateurs non validés a été déplacée du plugin vers le noyau de Elgg. Certaines actions génériques (par exemple valider et supprimer) ont également été déplacées vers le noyau de Elgg.
Expédition d’e-mail
Pour prévoir plus de granularité dans la gestion et la livraison des e-mails, le hook email, system a été supprimé. Le nouveau service de messagerie fournit plusieurs autres hooks de remplacement qui permettent aux plugins de contrôler le contenu, le format et l’agent de transport de messagerie utilisés pour la livraison.
elgg_set_email_transport() peut désormais être utilisé pour remplacer l’agent de transport Sendmail par défaut par une autre instance de \Zend\Mail\Transport\TransportInterface, par exemple SMTP, in-memory, ou le transport de fichiers. Notez que cette fonction doit être appelée tôt dans le processus de démarrage. Notez que si vous appelez cette fonction sur chaque requête, l’utilisation des paramètres du plugin pour déterminer la configuration de transport peut ne pas être très efficace - stockez ces paramètres sous forme de liste de données « datalist » ou dans les valeurs de configuration du site, de sorte qu’ils soient chargés à partir du cache de démarrage.
Changements de thème et de style
Le thème Aalborg n’est plus distribué avec Elgg. Le thème du noyau par défaut est maintenant basé sur Aalborg, mais avec des changements majeurs.
Évolutions notables dans les plugins :
La barre supérieure -topbar-, la barre de navigation -navbar- et l’entête -header- ont été combinés en un seul composant de barre supérieure responsive - topbar
La largeur intérieure par défaut est maintenant 1280px (80rem * 16px/1rem)
L’unité de mesure préférée est maintenant rem et non px
Le thème utilise un système de grille à 8 points <https://builttoadapt.io/intro-to-the-8-point-grid-system-d2573cde8632>
Les menus, éléments de mise en page -layouts- et autres composants utilisent maintenant flexbox
La réinitialisation se fait à l’aide d’un système de grille à 8 points <https://necolas.github.io/normalize.css/>
Les requêtes multimédias ont été réécrites pour une expérience mobile-first
Les éléments de formulaire (entrées de texte, boutons et sélecteurs) ont maintenant tous une hauteur identique de 2.5rem
L’entête -header- de la disposition -layout- est maintenant positionné à l’extérieur des colonnes de la disposition, qui ont été enveloppées dans
elgg-layout-columnsles propriétés z-index ont été examinées et empilées avec une itération simple au lieu de 9999999 <https://hackernoon.com/my-approach-to-using-z-index-eca67feb079c>.
Le schéma de couleurs a été modifié pour mettre en évidence les éléments exploitables et réduire l’abondance des nuances de gris
le plugin de recherche n’étend plus
page/elements/header, et au lieu de celapage/elements/topbaraffiche la vuesearch/search_box
.elgg-iconn’a plus defont-size,line-heightoucolorglobal : ces valeurs seront héritées des éléments parentsLe support de
.elgg-icon-hovera été abandonnéLes icônes « hover » de l’utilisateur ne sont plus recouvertes par une icône « caret »
Pour en savoir plus au sujet des Principes de création de thèmes
Notez également que les vues CSS servies via les URL /cache sont pré-traitées à l’aide de CSS Crush <http://the-echoplex.net/csscrush/>. Si vous faites des références à des variables CSS ou à d’autres éléments, la définition doit être située dans la même vue d’affichage. Par exemple, une variable définie dans elgg.css ne peut pas être référencée dans un fichier CSS distinct comme colorbox.css.
Vues de listing d’objets
object/elements/full/bodyenveloppe maintenant l’ensemble du corps du listing dans un emballage -wrapper-.elgg-listing-full-body
object/elements/fullsupporte désormaisattachmentsetresponsesqui sont affichés après le corps du listingDans les plugins du noyau, les vues des ressources n’affichent plus comments/replies - au lieu de cela, elles transmettent un indicateur
show_responsesà la vue de l’entité, ce qui génère les réponses et les transmet à la vue de la liste complète. Les plugins tiers devront mettre à jour leurs utilisations des vuesobject/<subtype>etressources/<handler>/view.La vue de la discussion complète est désormais affichée en utilisant la vue
object/elements/full
object/filepasse désormais la vue image (specialcontent) sous la forme d’une pièce jointeattachmentà la vue listing complète
Icônes des entités
Les fichiers images des icônes par défaut ont été déplacés et re-mappés comme suit :
Icônes par défaut :
views/default/icon/default/$size.pngIcônes utilisateur :
views/default/icon/user/default/$size.gifIcônes de groupe :
views/default/icon/group/default/$size.gifdans le plugin groups
Les fichiers d’icônes des groupes ont été déplacés de groups/<guid><size>.jpg relativement au répertoire du propriétaire du groupe dans le répertoire de fichiers, vers un emplacement indiqué par le service d’icône d’entité. Les plugins doivent cesser d’accéder directement aux fichiers du répertoire de fichiers et utiliser l’API de l’icône de l’entité. Le script de mise à niveau est disponible via l’interface d’administration.
La génération d’icônes des entités a été modifiée. Toutes les dimensions configurées ne seront plus générées lors de l’appel de l’une des fonctions de l’icône de l’entité (ElggEntity::saveIconFromUploadedFile, ElggEntity:::saveIconFromLocalFile ou ElggEntity::saveIconFromElggFile), mais seulement la taille master. Les autres dimensions configurées seront générées à partir de l’icône master lorsque cette dimension est demandée.
Glyphes d’icône
FontAwesome a été mis à niveau vers la version 5.0+. Il y a eu certains changements dans la façon dont les glyphes FontAwesome sont rendus. Le noyau s’occupera de la plupart des changements (par ex. mappage des anciens noms d’icônes à de nouveaux, et en utilisant le préfixe correct pour les icônes de marques et les icônes solides).
Auto-complétion / saisie automatique (sélecteurs d’utilisateurs et de contacts)
Le sélecteur de contacts « Friends Picker » est désormais affiché en utilisant input/userpicker.
Les plugins devraient :
Mettre à jour le paramètre
input/userpickerpour prendre en charge le nouveau paramètreonly_friendsSupprimer le CSS du sélecteur de contacts - « friends picker » - de leurs feuilles de style
Collections de Contacts
L’UI des collections de contacts a été déplacée vers son propre plugin - friends_collections.
Mise en page des éléments .elgg-body
Dans 3.0, ces éléments par défaut ne s’étirent plus pour remplir l’espace disponible dans un contexte de bloc. Ils continuent de supprimer les floats et permettent la césure des mots pour envelopper le texte.
Les modules du noyau et les mises en page qui reposaient sur le remplissage de l’espace ont été retravaillés pour Flexbox, et nous encourageons les développeurs à faire de même, plutôt que d’utiliser la technique problématique overflow:hidden.
Supprimer des éléments de la rivière
La fonction elgg_delete_river(), qui avait été dépréciée dans la version 2.3, a été rétablie. Des changements notables internes à cette fonction sont ;
Elle accepte toutes les
$optionsdeelgg_get_river(), mais exige qu’au moins l’un des paramètres suivants soit défini : id(s), annotation_id(s), subject_guid(s), object_guid(s), target_guid(s) ou view(s)Étant donné que
elgg_get_rivera par défaut une limite sur le nombre d’éléments de la rivière qu’elle récupère, si vous souhaitez supprimer tous les éléments de la rivière, vous devez définirlimitàfalseL’accès est ignoré lors de la suppression d’éléments de la rivière
Les événements sont déclenchés juste avant et après qu’un élément de la rivière a été effacé
Les réponses aux discussions ont été converties en commentaires
Dans la mesure où les réponses aux discussion étaient quasiment une copie des commentaires, toutes les réponses aux discussions ont été migrées vers les commentaires. Toutes les actions, hooks, événements et clefs de traduction associés ont été supprimés.
Note
Les commentaires des discussions apparaîtront désormais dans la section Commentaires de la recherche, et plus dans la section Discussion.
Nettoyage des traductions
Tous les plugins ont été scannés à la recherche des clefs de traduction inutilisées. Les clefs inutilisées ont été supprimées. S’il existait une traduction générique disponible pour la clef de traduction personnalisée, celles-ci ont également été mises à jour.
Journal système
L’API du journal système a été déplacée hors du noyau dans un plugin system_log. Les plugins logbrowser et logrotate ont été fusionnés dans le plugin system_log.
Journalisation des erreurs
L’affichage des messages d’erreur de elgg_log() et de PHP n’est plus désormais possible que via le paramètre « Afficher à l’écran » du plugin des développeurs. Consultez le fichier settings.example.php pour plus d’informations sur l’utilisation de $CONFIG->debug dans votre fichier settings.php. Le débogage doit généralement se faire via l’extension xdebug ou via tail -f /chemin/du/fichier/error.log sur votre serveur.
Le plugin des actifs de composer n’est plus requis
Les actifs sont maintenant chargés à partir de https://asset-packagist.org. Le plugin FXP composer n’est plus nécessaire lors de l’installation de Elgg ni lors de la mise à jour des dépendances de composer.
Journaux du Cron
Les journaux du Cron ne sont plus conservés dans la base de données, mais sur le système de fichiers (dans la racine du répertoire des données). Ceci va permettre de conserver des sorties plus longues. Un script de migration a été ajouté pour migrer les anciens paramètres de la base de données vers le nouvel emplacement et supprimer les anciennes valeurs de la base de données.
Clefs de traduction supprimées / modifiées
Les clefs de traduction relatives aux notifications des commentaires ont changé. Vérifiez les clefs de traduction
generic_comment:notification:owner:
Les nouvelles fonctionnalités du schéma MySQL ne sont pas appliquées
Les nouvelles installations 3.0 nécessitent MySQL 5.5.3 (ou plus) et utilisent le jeu de caractères utf8mb4 et les colonnes de contenu LONGTEXT (ce qui permet notamment le stockage d’un contenu plus long et des caractères étendus comme les emoji).
Changements divers
Les paramètres « Permettre aux visiteurs de s’inscrire » et « Restreindre les pages aux utilisateurs connectés » apparaissent désormais sur la page admin des paramètres de base - « Basic Settings ».
Plugin de l’API Twitter
Le plugin twitter_api n’est plus distribué avec Elgg.
Tests Unitaires et d’Intégration
L’amorçage du PHPUnit de Elgg peut désormais gérer à la fois les tests unitaires et d’intégration. Veuillez noter que vous ne devriez pas exécuter de test sur un site de production, car cela peut endommager l’intégrité des données. Pour éviter les pertes de données, vous devez spécifier les paramètres de la base de données via les variables d’environnement. Vous pouvez faire cela via le fichier d’amorçage phpunit.xml.
Les plugins peuvent désormais implémenter leurs propres tests PHPUnit en étendant les classes \Elgg\UnitTestCase et \Elgg\IntegrationTestCase. La suite de test plugins va automatiquement charger les tests PHPUnit depuis mod/<plugin_id>/tests/phpunit/unit et mod/<plugin_id>/tests/phpunit/integration.
Avant d’exécuter des tests d’intégration, vous devez activer les plugins que vous souhaitez tester en même temps que l’API du noyau.
\Elgg\IntegrationTestCase utilise le trait \Elgg\Seeding, qui peut être utilisé pour construire aisément de nouvelles entités et les enregistrer dans la base de données.
\Elgg\UnitTestCase n’utilise pas la base de données, mais fournit une interface de base de données factice, qui permet aux tests de définir des spécifications de requête avec des retours prédéfinis.
Par défaut, les tests unitaires et d’intégration seront exécutés à chaque fois que phpunit est appelé. Vous pouvez utiliser le drapeau --testsuite pour n’exécuter qu’une suite de tests spécifique : phpunit --testsuite unit ou phpunit --testsuite integration ou phpunit --testsuite plugins.
Pour que les tests d’intégration s’exécutent correctement, il est recommandé que les plugins ne placent aucune logique de fonctionnement dans la racine de start.php, et renvoient plutôt une Closure à la place. Ceci permet à la suite de test de construire une nouvelle instance Application sans perdre la logique d’initialisation du plugin.
Les plugins avec simpletests vont continuer à fonctionner comme précédemment. Cependant, les méthodes de signature dans la classe abstraite ElggCoreUnitTest ont changé et vous allez avoir besoin de mettre à jour vos tests en conséquence. En particulier, il est déconseillé d’utiliser des méthodes __construct et __destruct. setUp et tearDown ont été marquées comme privées et sont utilisées pour amorcer des tests cohérents et pour déclarer des conditions pre et post ; votre cas de test devrait utiliser à la place les méthodes up et down.
Simpletests ne peut plus être exécuté depuis l’interface admin du plugin developers. Utilisez la commande Elgg cli : elgg-cli simpletest
Commentaires
L’envoi des commentaires est maintenant AJAXifié. Après un envoi réussi, la liste des commentaires sera mise à jour automatiquement.
Les modifications suivantes ont été apportées aux notifications des commentaires.