De 2.x à 3.0
Contenu
Conteneur d’injection de dépendance - DI = Dependency Injection
Fonctions plugin qui nécessitent maintenant un
$plugin_id
expliciteConstructeurs de classes qui n’acceptent désormais qu’un objet
stdClass
ounull
Auto-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/tags
si 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/topbar
pour 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/default
et 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/layout
dans les deux types de vuesdefault
etrss
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_check
etcontainer_permissions_check
elgg_check_access_overrides
AttributeLoader
est 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
: VoyezgetURL
pour 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
ElggSession
a 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_class
lors de l’exécutionupdate_subtype
: Utilisezelgg_set_entity_class
lors de l’exécutionremove_subtype
get_subtype_id
get_subtype_from_id
get_subtype_class
: Utilisezelgg_get_entity_class
get_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_entity
ElggMemcache
ElggFileCache
ElggStaticVariableCache
ElggSharedMemoryCache
L’interface
Elgg\Cache\Pool
et 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_log
system_log_listener
: déplacé dans le pluginsystem_log
system_log
: déplacé dans le pluginsystem_log
get_system_log
: renommésystem_log_get_log
et déplacé dans le pluginsystem_log
get_log_entry
: renommésystem_log_get_log_entry
et déplacé dans le pluginsystem_log
get_object_from_log_entry
: renommésystem_log_get_object_from_log_entry
et déplacé dans le pluginsystem_log
archive_log
: renommésystem_log_archive_log
et déplacé dans le pluginsystem_log
logbrowser_user_hover_menu
: renommésystem_log_user_hover_menu
et déplacé dans le pluginsystem_log
logrotate_archive_cron
: renommésystem_log_archive_cron
et déplacé dans le pluginsystem_log
logrotate_delete_cron
: renommésystem_log_delete_cron
et déplacé dans le pluginsystem_log
logrotate_get_seconds_in_period
: renommésystem_log_get_seconds_in_period
et déplacé dans le pluginsystem_log
log_browser_delete_log
: renommésystem_log_browser_delete_log
et déplacé dans le pluginsystem_log
APIs dépréciées
ban_user
: UtilisezElggUser->ban()
create_metadata
: Utilisez la définition avecElggEntity
ouElggEntity->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_input
etget_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
Exportable
et ses méthodesexport
etgetExportableValues
: UtiliseztoObject
ExportException
Importable
et sa méthodeimport
.
ImportException
ODD
et toutes les classes commençant parODD*
.
XmlElement
Elgg_Notifications_Event
: Utilisez\Elgg\Notifications\Event
Elgg\Mail\Address
: utilisezElgg\Email\Address
ElggDiscussionReply
: utilisezElggComment
voyez 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 de rupture 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) pour 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 :
user
pour les utilisateurs
group
pour les groupes
site
pour 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_url
ouelgg_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/validate
ouadmin/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
ElggEntity
n’implémente plusImportable
ElggGroup
n’implémente plusFriendable
ElggRelationship
n’implémente plusImportable
ElggSession
n’implémente plusArrayAccess
Elgg\Application\Database
n’é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/lightbox
au besoin
lightbox/settings.js
: Utilisez le hook JSgetOptions, ui.lightbox
ou 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/likes
est chargé automatiquement
messageboard.js
elgg.autocomplete
n’est plus défini.
elgg.messageboard
n’est plus défini.
jQuery.fn.friendsPicker
elgg.ui.toggleMenu
n’est plus défini
elgg.ui.toggleMenuItems
: Utilisez l’attributdata-toggle
lorsque 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/index
Hook 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/save
formulaire et action
notificationssettings/groupsave
formulaire 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::fromId
pour 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_split
ettables_loaded
ont été supprimées
ElggEntity
: Les URL vides ne seront plus normalisées. Cela signifie que les entités sans URL ne vont plus avoir l’URL du site
ElggGroup::removeObjectFromGroup
nécessite de passer unElggObject
(n’accepte plus un GUID)
ElggUser::$salt
n’existe plus en tant qu’attribut, et n’est plus utilisé pour l’authentification
ElggUser::$password
n’existe plus en tant qu’attribut, et n’est plus utilisé pour l’authentification
elgg_get_widget_types
ne prend plus en charge$exact
comme 2ème argument
elgg_instanceof
ne 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_icon
ne prend plus en chargetrue
comme 2e argument
elgg_list_entities
ne prend plus en charge l’optionview_type_toggle
elgg_list_registered_entities
ne prend plus en charge l’optionview_type_toggle
elgg_log
n’accepte plus le niveau"DEBUG"
elgg_dump
n’accepte plus d’argument$to_screen
.
elgg_gatekeeper
etelgg_admin_gatekeeper
ne signalent pluslogin
ouadmin
comme motif de redirection, mais403
Application::getDb()
ne renvoie plus une instance deElgg\Database
, mais deElgg\Application\Database
$CONFIG
n’est plus disponible en tant que variable locale dans les fichiersstart.php
des plugins.
elgg_get_config('siteemail')
n’est plus disponible. Utilisezelgg_get_site_entity()->email
.
ElggEntity::saveIconFromUploadedFile
enregistre uniquement la taille master, les autres tailles sont créées sur demande parElggEntity::getIcon()
à partir de la taille master
ElggEntity::saveIconFromLocalFile
enregistre uniquement la taille master, les autres tailles sont créées sur demande parElggEntity::getIcon()
à partir de la taille master
ElggEntity::saveIconFromElggFile
enregistre uniquement la taille master`, les autres tailles sont créées sur demande parElggEntity::getIcon()
à partir de la taillemaster
Les 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
reboot
est 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.php
est supprimé.Les fonctions
set_config
,unset_config
etget_config
ont été dépréciées et remplacées parelgg_set_config
,elgg_remove_config
etelgg_get_config
.Les valeurs de configuration
path
,wwwroot
etdataroot
ne 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_config
n’émondent plus - trim - les clefs.Si vous remplacez la vue
navigation/menu/user_hover/placeholder
, vous devez modifier la clef de configurationlazy_hover:menus
enelgg_lazy_hover_menus
.La valeur de configuration
entity_types
n’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_display
utilise désormais un champinput/number
au 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_tag
a 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_id
qui permettra à d’autres plugins de s’accrocher au hookregister, menu:filter:<filter_id>
et d’ajouter de nouveaux onglets. Si aucunfilter_id
n’est fourni, le hook par défautregister, menu:filter
peut être utilisé.les vues de mise en page et les sous-vues reçoivent désormais les
identifier
etsegments
de 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
$entity
dans cas d’une ressource pour le profil
Les plugins et thèmes devraient :
Mettez à jour les appels à
elgg_view_layout ()
pour utiliser la dispositiondefault
Mettez à jour et remplacez le paramètre
nav
dans les vues de disposition par le paramètrebreadcrumbs
Mettez à jour leur utilisation du paramètre
filter
dans les vues de disposition - layouts, soit en fournissant un ensemble par défaut d’onglets de filtre, soit en définissant un paramètrefilter_id
et en utilisant des hooksSupprimez la vue
page/layouts/one_column
Supprimez la vue
page/layouts/one_sidebar
Supprimez la vue
page/layouts/two_sidebar
Supprimez la vue
page/layouts/content
Mettez à jour leur utilisation de
page/layouts/default
Mettez à jour leur utilisation de
page/layouts/error
Mettez à jour leur utilisation de
page/layouts/elements/filter
Mettez à jour leur utilisation de
page/layouts/elements/header
Mettez à jour leur utilisation de
page/layouts/elements/footer
Mettez à jour leur utilisation de
page/elements/title
Mettez à jour leur utilisation de
navigation/breadcrumb
pour passer$vars ['breadcrumb']
àelgg_get_breadcrumbs()
Mettez à jour les enregistrements du hook
output:before, layout
versview_vars, page/layout/<layout_name>
Mettez à jour les enregistrements du hook
output:after, layout
versview, 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-columns
les 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/topbar
affiche la vuesearch/search_box
.elgg-icon
n’a plus defont-size
,line-height
oucolor
global : ces valeurs seront héritées des éléments parentsLe support de
.elgg-icon-hover
a é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/body
enveloppe maintenant l’ensemble du corps du listing dans un emballage -wrapper-.elgg-listing-full-body
object/elements/full
supporte désormaisattachments
etresponses
qui 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/file
passe 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.png
Icônes utilisateur :
views/default/icon/user/default/$size.gif
Icônes de groupe :
views/default/icon/group/default/$size.gif
dans 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/userpicker
pour prendre en charge le nouveau paramètreonly_friends
Supprimer 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
$options
deelgg_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_river
a 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
àfalse
L’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 pour 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 les méthodes up
et down
à leur place.
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.