La gestion des groupes est entièrement revue et corrigée dans la bibliothèque nebule en PHP orienté objet et dans les applications (sylabe, klicty, messae).
Une fois les applications mises à jour, les groupes existants disparaîtront.
Cet article invalide la définition de groupe telle que définit dans l’article Définition des groupes du 14/01/2016.
Cette implémentation des groupes sera aussi utilisée pour les conversations contenant des messages.
OG / Groupe
Le groupe est un objet définit comme tel, c’est à dire qu’il doit avoir un type mime nebule/objet/groupe
.
Fondamentalement, le groupe est un ensemble de plusieurs objets. C’est à dire, c’est le regroupement d’au moins deux objets. Le lien peut donc à ce titre être vu comme la matérialisation d’un groupe. Mais la définition du groupe doit être plus restrictive afin que celui-ci soit utilisable. Pour cela, dans nebule, le groupe n’est reconnu comme tel uniquement si il est marqué de son type mime. Il est cependant possible d’instancier explicitement un objet comme groupe et de l’utiliser comme tel en cas de besoin.
Le groupe va permettre de regrouper, et donc d’associer et de retrouver, des objets. L’objet du groupe va avoir des liens vers d’autres objets afin de les définir comme membres du groupe.
Un groupe peut avoir des liens de membres vers des objets définis aussi comme groupes. Ces objets peuvent être vus comme des sous-groupes. La bibliothèque nebule ne prend en compte qu’un seul niveau de groupe, c’est à dire que les sous-groupes sont gérés simplement comme des objets.
OGO / Objet
L’objet du groupe peut être de deux natures.
Soit c’est un objet existant qui est en plus définit comme un groupe. L’objet peut avoir un contenu et a sûrement d’autres types mime propres. Dans ce cas l’identifiant de groupe est l’identifiant de l’objet utilisé.
Soit c’est un objet dit virtuel qui n’a pas et n’aura jamais de contenu. Cela n’empêche pas qu’il puisse avoir d’autres types mime. Dans ce cas l’identifiant de groupe a une forme commune aux objets virtuels.
La création d’un objet virtuel comme groupe se fait en créant pour identifiant la concaténation d’un hash (sha256) d’une valeur aléatoire de 128bits et de la chaîne 006e6562756c652f6f626a65742f67726f757065
. Soit un identifiant complet de la taille de 102 caractères.
OGN / Nommage
Le nommage à l’affichage du nom des groupes repose sur une seule propriété :
- nom
Cette propriété est matérialisée par un lien de type l
avec comme objets méta :
nebule/objet/nom
Par convention, voici le nommage des groupes :
nom
OGP / Protection
En tant que tel le groupe ne nécessite pas de protection puisque soit l’objet du groupe n’a pas de contenu soit on n’utilise pas son contenu directement.
La gestion de la protection est désactivée dans une instance de groupe.
OGD / Dissimulation
Le groupe peut en tant que tel être dissimulé, c’est à dire que l’on dissimule l’existence du groupe, donc sa création.
La dissimulation devrait se faire lors de la création du groupe.
L’annulation de la dissimulation d’un groupe revient à révéler le lien de création du groupe.
La dissimulation peut se (re)faire après la création du groupe mais son efficacité est incertaine si les liens de création ont déjà été diffusés. En cas de dissimulation à posteriori, il faut générer un lien de suppression du groupe puis générer un nouveau lien dissimulé de création du groupe à une date postérieure au lien de suppression.
OGF / Fermeture
Le groupe va contenir un certain nombre de membres ajouter par différentes entités. Il est possible de limiter le nombre des membres à utiliser dans un groupe en restreignant artificiellement les entités contributrices du groupe. Ainsi on marque le groupe comme fermé et on filtre sur les membres uniquement ajoutés par des entités définies.
Dans nebule, l’objet réservé nebule/objet/groupe/ferme
est dédié à la gestion des groupes fermés. Un groupe est considéré fermé quand on a l’objet réservé en champs méta, l’entité en cours en champs cible et l’ID du groupe en champs source. Si au lieu d’utiliser l’entité en cours pour le champs cible on utilise une autre entité, cela revient à prendre aussi en compte ses liens dans le groupe fermé. Dans ce cas c’est une entité contributrice.
C’est uniquement un affichage du groupe que l’on a et non la suppression de membres du groupe.
Lorsque l’on a marqué un groupe comme fermé, on doit explicitement ajouter des entités que l’on veut voir contribuer.
Il est possible indéfiniment de fermer et ouvrir un groupe.
Il est possible de fermer un groupe qui ne nous appartient afin par exemple de le rendre plus lisible.
Lorsque l’on a marqué un groupe comme fermé, on peut voir la liste des entités explicitement que l’on veut voir contribuer. On peut aussi voir les entités que les autres entités veulent voir contribuer et décider ou non de les ajouter.
Lorsqu’un groupe est marqué comme fermé, l’interface de visualisation du groupe peut permettre de le visualiser temporairement comme un groupe ouvert.
Le traitement des liens de fermeture d’un groupe doit être fait exclusivement avec le traitement social self.
OGPM / Protection des membres
Le groupe va contenir un certain nombre de membres ajouter par différentes entités. Il est possible de limiter la visibilité du contenu des membres utilisés dans un groupe en restreignant artificiellement les entités destinataires qui pourront les consulter.
Dans nebule, l’objet réservé nebule/objet/groupe/protege
est dédié à la gestion des groupes protégés. Un groupe est considéré protégé quand on a l’objet réservé en champs méta, l’entité en cours en champs cible et l’ID du groupe en champs source. Si au lieu d’utiliser l’entité en cours pour le champs cible on utilise une autre entité, cela revient à partager aussi les objets protégés créés pour ce groupe. Cela ne repartage pas la protection des objets déjà protégés.
Dans un groupe marqué protégé, tous les nouveaux membres ajoutés au groupe ont leur contenu protégé. Ce n’est valable que pour l’entité en cours et éventuellement celles qui lui font confiance.
Lorsque l’on a marqué un groupe comme protégé, on doit explicitement ajouter des entités avec qui on veut partager les contenus.
Il est possible indéfiniment de protéger et déprotéger un groupe.
Il est possible de protéger un groupe qui ne nous appartient afin de masquer le contenu des membres que l’on y ajoute.
Lorsque l’on a marqué un groupe comme protégé, on peut voir la liste des entités explicitement a qui on veut partager les contenus. On peut aussi voir les entités a qui les autres entités veulent partager les contenus et décider ou non de les ajouter.
Le traitement des liens de protection d’un groupe doit être fait exclusivement avec le traitement social self.
OGDM / Dissimulation des membres
Le groupe va contenir un certain nombre de membres ajouter par différentes entités. Il est possible de limiter la visibilité de l’appartenance des membres utilisés dans un groupe en restreignant artificiellement les entités destinataires qui pourront les voir.
Dans nebule, l’objet réservé nebule/objet/groupe/dissimule
est dédié à la gestion des groupes dissimulés. Un groupe est considéré dissimulé quand on a l’objet réservé en champs méta, l’entité en cours en champs cible et l’ID du groupe en champs source. Si au lieu d’utiliser l’entité en cours pour le champs cible on utilise une autre entité, cela revient à partager aussi les objets dissimulés créés pour ce groupe. Cela ne repartage pas la dissimulation des objets déjà dissimulés.
Dans un groupe marqué dissimulé, tous les nouveaux membres ajoutés au groupe sont dissimulés. Ce n’est valable que pour l’entité en cours et éventuellement celles qui lui font confiance.
Lorsque l’on a marqué un groupe comme dissimulé, on doit explicitement ajouter des entités avec qui on veut partager les membres du groupe.
Il est possible indéfiniment de dissimuler et dé-dissimuler un groupe.
Il est possible de dissimuler un groupe qui ne nous appartient afin de masquer le contenu des membres que l’on y ajoute.
Lorsque l’on a marqué un groupe comme dissimulé, on peut voir la liste des entités explicitement a qui on veut partager les contenus. On peut aussi voir les entités a qui les autres entités veulent partager les contenus et décider ou non de les ajouter.
Le traitement des liens de dissimulation d’un groupe doit être fait exclusivement avec le traitement social self.
OGL / Liens
Une entité doit être déverrouillée pour la création de liens.
Le lien de définition du groupe :
- action :
l
- source : ID du groupe
- cible : hash(‘nebule/objet/groupe’)
- méta : hash(‘nebule/objet/type’)
Le lien de suppression d’un groupe :
- action :
x
- source : ID du groupe
- cible : hash(‘nebule/objet/groupe’)
- méta : hash(‘nebule/objet/type’)
Le lien de dissimulation d’un groupe est le lien de définition caché dans une lien de type c
.
Le lien de rattachement d’un membre du groupe :
- action :
l
- source : ID du groupe
- cible :Â ID de l’objet
- méta : ID du groupe
Le lien de suppression de rattachement d’un membre du groupe :
- action :
x
- source : ID du groupe
- cible :Â ID de l’objet
- méta : ID du groupe
Le lien de fermeture d’un groupe :
- action :
l
- source : ID du groupe
- cible : ID de l’entité, par défaut l’entité signataire.
- méta : hash(‘nebule/objet/groupe/ferme’)
Le lien de suppression de fermeture d’un groupe :
- action :
x
- source : ID du groupe
- cible : ID de l’entité, par défaut l’entité signataire.
- méta : hash(‘nebule/objet/groupe/ferme’)
Le lien de protection des membres d’un groupe :
- action :
l
- source : ID du groupe
- cible : ID de l’entité, par défaut l’entité signataire.
- méta : hash(‘nebule/objet/groupe/protege’)
Le lien de suppression de protection des membres d’un groupe :
- action :
x
- source : ID du groupe
- cible : ID de l’entité, par défaut l’entité signataire.
- méta : hash(‘nebule/objet/groupe/protege’)
Le lien de dissimulation des membres d’un groupe :
- action :
l
- source : ID du groupe
- cible : ID de l’entité, par défaut l’entité signataire.
- méta : hash(‘nebule/objet/groupe/dissimule’)
Le lien de suppression de dissimulation des membres d’un groupe :
- action :
x
- source : ID du groupe
- cible : ID de l’entité, par défaut l’entité signataire.
- méta : hash(‘nebule/objet/groupe/dissimule’)
OGIV / Implémentation des Variables
Les variables spécifiques aux groupes :
permitWriteGroup
: permet toute écriture de groupes.
Les variables qui ont une influence sur les groupes :
permitWrite
: permet toute écriture d’objets et de liens ;permitWriteObject
: permet toute écriture d’objets ;permitCreateObject
: permet la création locale d’objets ;permitWriteLink
: permet toute écriture de liens ;permitCreateLink
: permet la création locale de liens.
Il est nécessaire à la création d’un groupe de pouvoir écrire des objets comme le nom du groupe, même si l’objet du groupe ne sera pas créé.
OGIA / Implémentation des Actions
Dans les actions, on retrouve les chaînes :
creagrp
: Crée un groupe.creagrpnam
: Nomme le groupe à créer.creagrpcld
: Marque fermé le groupe à créer.creagrpobf
: Dissimule les liens du groupe à créer.actdelgrp
: Supprime un groupe.actaddtogrp
: Ajoute l’objet courant membre à groupe.actremtogrp
: Retire l’objet courant membre d’un groupe.actadditogrp
: Ajoute un objet membre au groupe courant.actremitogrp
: Retire un objet membre du groupe courant.
OGIF / Implémentation des Fonctions
Dans la classe nebule
, on trouve :
- La fonction
getListGroupsLinks()
retourne la liste des liens définissants les groupes. - La fonction
getListGroupsID()
retourne la liste des identifiants des groupes.
Dans la classe Object
, on trouve :
- La fonction
getIsGroup()
retourne si l’objet est un groupe. - La fonction
getListIsMemberOnGroupLinks()
retourne la liste des identifiants des groupes desquels l’objet est membre. - La fonction
getListIsMemberOnGroupID()
retourne la liste des identifiants des groupes desquels l’objet est membre.
Dans la classe Group
, on trouve :
- La fonction
unsetGroup()
supprime la définition du groupe. - La fonction
getMarkClosed()
retourne si le groupe est marqué fermé ou si l’entité demandée est contributrice. - La fonction
setMarkClosed()
marque le groupe comme fermé ou marque l’entité demandée comme contributrice. - La fonction
unsetMarkClosed()
marque le groupe comme ouvert ou retire l’entité demandée comme contributrice. - La fonction
getMarkProtected()
retourne si le groupe est marqué protégé (ses membres). - La fonction
setMarkProtected()
marque le groupe comme protégé (ses membres). - La fonction
unsetMarkProtected()
marque le groupe comme non protégé (ses membres). - La fonction
getMarkObfuscated()
retourne si le groupe est marqué dissimulé (ses membres). C’est différent de la dissimulation de la création du groupe. - La fonction
setMarkObfuscated()
marque le groupe comme dissimulé (ses membres). - La fonction
unsetMarkObfuscated()
marque le groupe comme non dissimulé (ses membres). - La fonction
getIsMember()
retourne si un objet est membre du groupe. - La fonction
setMember()
ajout un objet comme membre. - La fonction
unsetMember()
retire l’objet comme membre. - La fonction
getListMembersLinks()
retourne les liens des objets définis comme membres. - La fonction
getListMembersID()
retourne les identifiants des objets définis comme membres. - La fonction
getCountMembers()
retourne le nombre d’objets définis comme membres.