Capacité de restauration
Contenu
Depuis Elgg 6.0, il est possible de définir la capacité restorable sur une ElggEntity. L’activation de cette fonctionnalité marquera une entité comme supprimée dans la base de données lorsque la fonction ElggEntity::delete() est appelée. L’entité n’apparaîtra alors plus dans les listes et ne sera plus accessible lors d’une tentative de consultation directe.
Paramètre du site
L’administrateur du site peut activer ou désactiver toutes les fonctionnalités de restauration. Par défaut, cette fonctionnalité est désactivée. Cela signifie que même si une entité a la capacité restorable, elle sera toujours définitivement supprimée de la base de données.
Inscription
Tout comme toute autre capacité d’entité, vous pouvez activer la capacité restorable dans le fichier elgg-plugin.php
'entities' => [
[
'type' => 'object',
'subtype' => 'my_custom_subtype',
'capabilities' => [
'restorable' => true,
],
],
]
Voir les éléments supprimés
Une fois qu’une entité a été marquée comme supprimée, elle n’apparaîtra plus dans les fonctionnalités normales de votre site web Elgg.
Pour qu’un utilisateur puisse voir les entités qui ont été supprimées, il existe un lien dans les paramètres utilisateur vers une liste de tous les éléments supprimés appartenant à l’utilisateur donné.
Les propriétaires de groupe peuvent également consulter le contenu supprimé de leur groupe. Cette option est accessible depuis la page de profil du groupe. La liste répertorie tout le contenu supprimé de leur groupe.
Note
La liste n’affichera que les entités supprimées avec la capacité restorable. Par exemple, si un blog contenant uniquement des commentaires a été supprimé, il apparaîtra dans la liste des éléments supprimés du propriétaire (et dans la liste des éléments supprimés du groupe si le blog a été publié dans un groupe).
Les commentaires n’apparaîtront dans aucune liste d’éléments supprimés.
Vues personnalisées
Lorsqu’un développeur a besoin d’avoir une vue personnalisée d’un élément supprimé, une vue trash/<entity_type>/<entity_subtype> peut être créée, qui recevra l’entité supprimée dans $vars['entity']. En guise de solution de secours, trash/<entity_type>/default sera essayé, et en dernier recours trash/entity/default qui est fourni par le noyau Elgg.
Différents sous-éléments peuvent être trouvés dans les vues trash/elements/*.
Note
Lorsque vous créez une vue personnalisée pour une entité, assurez-vous qu’elle n’inclut pas de liens vers l’entité supprimée, car ces liens ne fonctionneront pas. Gardez également à l’esprit les autres liens vers des entités qui auraient pu être supprimées.
Restaurer un élément supprimé
À partir de la liste des éléments supprimés, l’utilisateur (ou le propriétaire du groupe) peut restaurer l’élément supprimé à son état d’origine. Si l’entité appartenait à un groupe supprimé, l’utilisateur peut la restaurer dans un autre conteneur.
Événements
Lorsqu’une entité est marquée comme supprimée, il existe une séquence d’événement 'trash', '<entity_type>' avec laquelle un développeur peut programmer une action ou une logique supplémentaire.
Fonctions ElggEntity
Il existe dans une ElggEntity 3 fonctions relatives à la suppression de cette entité :
public function delete(bool $recursive = true, ?bool $persistent = null): boolprotected function persistentDelete(bool $recursive = true): boolprotected function trash(bool $recursive = true): boolpublic function isDeleted(): bool
Fonction : delete
Il s’agit de la seule fonction publique permettant de supprimer une entité. Le paramètre $recursive déterminera si d’autres entités qui ont cette entité comme propriétaire ou conteneur seront également supprimées (true par défaut).
Le paramètre $persistent peut forcer une suppression définitive de la base de données ou son marquage comme supprimé. La valeur par défaut est``null``, ce qui signifie que la capacité restorable sera vérifiée.
Avertissement
Il n’est pas recommandé qu’un développeur annule cette fonction car il devra gérer une partie de la logique permettant de déterminer la valeur correcte du paramètre $persistent.
Fonction : persistentDelete
Cette fonction est appelée lorsque le paramètre $persistent vaut true dans la fonction delete(). Elle doit gérer les cas où l’entité est définitivement supprimée de la base de données. Un développeur pourrait par exemple ignorer cette fonction dans un ElggFile où le fichier physique sur le disque doit être supprimé lorsque l’entité est supprimée de la base de données, mais où le fichier physique ne doit pas être supprimé du disque lorsque l’entité est simplement marquée comme étant supprimée dans la base de données.
Ceci déclenchera la séquence d’événement 'delete', '<entity_type>'.
Fonction : trash
Cette fonction est appelée lorsque le paramètre $persistent vaut false dans la fonction delete(). Elle doit gérer les cas où l’entité est marquée comme étant supprimée dans la base de données.
Ceci déclenchera la séquence d’événement 'trash', '<entity_type>'.
Fonction : isDeleted
Pour indiquer qu’une entité est marquée comme supprimée.
Montrer les éléments supprimés
Lorsqu’un développeur veut s’assurer d’inclure les entités supprimées lors de la récupération/liste des entités, le code doit être enveloppé dans un elgg_call() avec le drapeau ELGG_SHOW_DELETED_ENTITIES.
La même chose s’applique lorsque le développeur doit s’assurer d’exclure tous les éléments supprimés en définissant le drapeau ELGG_HIDE_DELETED_ENTITIES.
Nettoyage des entités supprimées
Afin de nettoyer la base de données des entités supprimées, une tâche cron s’exécute toutes les heures. Elle nettoie toutes les entités supprimées après l’expiration d’une période de conservation. L’administrateur du site peut définir cette période de conservation (par défaut : 30 jours).
Afin de ne pas surcharger le système, la tâche cron ne s’exécutera que 5 minutes par heure au maximum. Les entités qui n’ont pas pu être supprimées pendant cette période le seront lors de la période suivante. L’entité supprimée la plus ancienne (à la date de suppression) sera supprimée en premier.
Plus d’informations
Voir aussi
Consultez la documentation Capacités