Modification de l’ordre de prise en compte des propriétés d’un objet

Je reprends progressivement le développement de nebule pour corriger le bugg de klicty et améliorer dans sylabe le module correspondant.
Et je tombe sur un problème non dans l’implémentation mais dans la façon dont on prend en compte les propriétés d’un objet, ou plutôt l’ordre de prise en compte lorsque cela est fait plusieurs fois. C’est à dire, quel propriété retient-on en priorité lorsqu’il y a plusieurs liens d’un objet vers plusieurs propriétés.
Le problème n’a pas une solution difficile en soi mais le fait qu’il concerne une brique importante de nebule me freine à le modifier sans plus de réflexion. Les implications que cela engendre peuvent être très importantes dans pleins d’endroits du code de la bibliothèque de nebule et des applications.

Le code concerné se trouve dans la fonction getPropertiesLinks() de la classe Objets, un peu simplifiée :

public function getPropertiesLinks($type, $socialClass = '')
{
...
$list = $this->readLinksFilterFull(
  '',
  '',
  'l',
  $this->_id,
  '',
  $this->_crypto->hash($type)
);
...
// Fait un tri par pertinence sociale.
$this->_social->arraySocialFilter($list, $socialClass);
// Trie la liste.
$date = array();
foreach ( $list as $k => $r )
{
  $date[$k] = $r->getDate();
}
array_multisort($date, SORT_DESC, $list);
array_reverse($list);
...
}

Le tri par pertinence sociale est fait avant le tri par date suivi d’une inversion pour présenter le lien le plus récent à la fin du tableau. Le tri est obligatoire puisque les liens ne sont pas forcément rangés par date et encore moins par score social. Dans cette façon de faire, le tri par date est prioritaire sur le tri social.

Après réflexion le code est modifié pour déplacer le tri social entre le tri par date et l’inversion du tableau. Aujourd’hui, le tri social ne réorganise pas le tableau des liens, il en enlève tout au plus. Les fonctions de tri sociales plus complexes à implémenter devront tenir compte de l’ordre pour fonctionner comme le tri par date.

Comments are closed.