L’affichage du bouton se trouve ici.
Le boolean de condition requirements.needRenew
se trouve là :
requirements.needRenew = (!requirements.needMembership && !requirements.revoked &&
requirements.membershipExpiresIn <= csSettings.data.timeWarningExpireMembership &&
requirements.membershipPendingExpiresIn <= 0) ||
(requirements.wasMember && !requirements.revoked && requirements.membershipExpiresIn === 0 &&
requirements.membershipPendingExpiresIn === 0);
Les valeurs de base de requirements
sont définit ici:
requirements: get('/wot/requirements/:pubkey?pubkey=true')
Dont voici la requête pour Veronique: https://g1v1.p2p.legal/wot/requirements/6uJHfgrTM2amzkVXwfUP7dn8SdzAkW72XzQ9D3f3bj93?pubkey=true
Si on décortique needRenew :
Vaut true si
Soit:
needMembership == false
revoked == false
membershipExpiresIn <= 2592000 * 2 (2 mois)
membershipPendingExpiresIn <= 0 (En l’occurrence peut valoir 0 mais pas inférieur à 0, donc revient à vérifié si == 0, je pense que c’est une coquille n’entraînant pas de bug)
Soit:
wasMember == true
revoked == false
membershipExpiresIn == 0
membershipPendingExpiresIn == 0
Le boolean needMembership
est définit juste au dessus de needRenew
:
requirements.needMembership = (!requirements.revoked && requirements.membershipExpiresIn <= 0 && requirements.membershipPendingExpiresIn <= 0 && !requirements.wasMember);
Tous le reste des valeurs provient de la requête BMA wot/requirements
ci-dessus.
Ce qui donne pour Véronique:
Soit:
false == false (car
wasMember
== true)
false == false
0 <= 2592000 * 2
0 <= 0
Soit:
true == true
false == false
0 == 0
0 == 0
Conclusion: Les deux conditions sont positives, donc je ne comprends pas pourquoi ce bouton ne s’affiche pas dans ce cas.
Le soucis vient soit d’une autre condition ailleurs lié à l’interface, soit de l’utilisateur.
Peut être que
loading
vaut true ici: ng-if="!loading && formData.requirements.needRenew
" et ng-disabled="loading"
lors de l’affichage du bouton, ça pourrait expliquer. Mais là on s’enfonce trop dans le fonctionnement d’angular 1 pour moi. (je ne crois pas en cette possibilité)
Ca peut être un soucis de cache de Cesium:
requirements: function(params, cache) {
// No cache by default
if (cache !== true) return exports.raw.wot.requirements(params);
return exports.raw.wot.requirementsWithCache(params);
},
[...]
requirementsWithCache: get('/wot/requirements/:pubkey?pubkey=true', csCache.constants.LONG)
Si le cache est définit (je ne sais pas où), mais le commentaire indique qu’il n’y en a pas par défaut.
Ou bien simplement le Cesium de Véronique connecté à un mauvais nœud Duniter.
J’ai légèrement refactoré les conditions de needRenew dans une MR dans le but de simplifier un peu la lecture en évitant des redondances, même si c’est léger.