[FR] hikasubscription groupsubscriber plugin multiple subscription problem

  • Posts: 31
  • Thank you received: 0
7 months 4 weeks ago #336780

-- HikaShop version -- : 4.4.4
-- HikaSerial version -- : 4.0.0
-- Joomla version -- : 3.10
-- PHP version -- : 7.4
-- Browser(s) name and version -- : firefox 94
-- Error-message(debug-mod must be tuned on) -- : no error

Bonjour,

J'utilise le plugin groupsubscriber avec hikasubscription.
Dans mon cas de figure, on peut acheter des produits sur la boutique hikashop qui correspondent à des abonnements donnant accès à des contenus du site privés.
Il y a par exemple un abonnement 1 an et un abonnement 2 ans. Les deux produits passent l'utilisateur dans un groupe utilisateur joomla "abonnés".
Le problème que je rencontre est que certain utilisateurs achètent un abonnement 1 an, ils sont bien passés dans le groupe "abonnés". Puis a l'approche de l'expiration au lieu de renouveler, ils achètent l'abonnement deux ans. Ils sont déjà dans le groupe "abonnés" donc ils y reste c'est normal.
Mais ça leur créé deux abonnements, et quand le premier (1an) expire, ils sont retirés du groupe "Abonnés" . Alors que l'autre abonnement (2 ans) est toujours actif. Je comprend bien la logique du plugin mais en pratique pour les utilisateurs ce n'est pas logique.
Comment faire pour garder les utilisateurs dans le groupe malgré un abonnement qui prend fin alors qu'un autre abonnement est toujours actif.
J'ai regardé le code du fichier groupsubscriber.php mais j'avoue être un peu perdu, a mon avis il faudrait que ce script vérifie l’existence d'autres abonnements actifs de l'utilisateur et qui ont la même assignation de groupe, pour dans ce cas empêcher de désinscrire l'utilisateur du groupe.
Il y a peut-être une autre solution....
Merci !

Please Log in or Create an account to join the conversation.

  • Posts: 25338
  • Thank you received: 3922
  • MODERATOR
7 months 4 weeks ago #336808

Bonjour,

Vu ce que vous me décrivez, il s'agit d'un bug car le plugin "groupsubscriber" doit prendre en compte les abonnements actifs et ne pas supprimer un groupe si une autre souscription active y donne accès.
Pouvez-vous me fournir la configuration de ces deux plans afin que je puisse vérifier et reproduire votre souci ?

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 31
  • Thank you received: 0
7 months 4 weeks ago #336819

Bonjour,
En pièces jointes les différents paramètres utilisés
Dans mon cas Il n'y a qu'un seul plan et plusieurs produits. ( peut-être que le problème vient de là, il faudrait des plans différents pour que le plugin sache qu'il y a un autre plan actif, et non pas qu'il y a un autre produit avec le même plan ? )
Merci !

Please Log in or Create an account to join the conversation.

  • Posts: 31
  • Thank you received: 0
7 months 4 weeks ago #336831

Après avoir re-regardé le code du fichier groupsubscriber.php, pour moi la fonction onSubscriptionExpiration (utilisée lorsque on change le statut d'un abonnement en admin):
public function onSubscriptionExpiration(&$subscription, $user, $status) (ligner 48)
fait bien la vérification des autre plans (si je change le statut d'un abonnement en admin l'utilisateur garde bien le groupe de l'autre abonnement.

Par contre la fonction onAfterSubscriptionsExpire (utilisée lorsque l'utilisateur se connecte):
public function onAfterSubscriptionsExpire(&$expired_subscriptions, $plans, $users) { (ligne 109)
ne fait pas de check des autres abonnements du coup il est retiré du groupe.

Je ne propose pas de solution car je ne sais pas les implications qu'il peut y avoir derrière.... aussi pourquoi ces deux fonctions sont différentes, ne devrait elle pas faire la même chose ?

Merci de votre aide.

Please Log in or Create an account to join the conversation.

  • Posts: 25338
  • Thank you received: 3922
  • MODERATOR
7 months 4 weeks ago #336840

Bonjour,

Merci pour votre retour.

Effectivement, il manque une vérification pour votre cas.
Je suis en train de faire différents tests afin de proposer une solution optimisée pour assurer un maximum de vérification sans avoir à faire trop de requêtes en base de données (qui peut poser soucis lors que nous sommes dans une tâche Cron).
J'aurais actuellement un correctif "simple" pour votre cas très précis ou l'utilisateur possède une autre souscription active pour le même plan que celui qui expire ; pour l'ensemble des scénarii de tests unitaires que rédigé, le correctif complet va être plus long à valider mais c'est en cours.

Pour répondre à votre question ; les fonctions doivent faire le même genre de vérifications mais leur context d'appel est très différent ; le trigger "onAfterSubscriptionsExpire" peut prendre un grand nombre de souscription pour une multitude d'utilisateur.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 31
  • Thank you received: 0
7 months 4 weeks ago #336848

Bonjour,

Ok merci !
j'attends donc le correctif. et / ou si vous pouvez, le correctif "simple" peut déjà être bien en attendant...

Merci encore.

Please Log in or Create an account to join the conversation.

  • Posts: 25338
  • Thank you received: 3922
  • MODERATOR
7 months 3 weeks ago #336856

Bonjour,

J'ai un correctif plus complet qui sera intégré dans la prochaine version.
En attendant, vous que vous n'avez qu'un seul plan, vous pouvez utiliser ce code :

	// Check if the user have an active subscription in the same plan
	$other = false;
	foreach($users[$user_id]->subscriptions as $sub) {
		if((int)$sub->subscription_pack_id == $plan_id) {
			$other = true;
			break;
		}
	}
	if($other)
		continue;
Que vous pouvez placer juste avant la ligne
$supported_subscriptions[$key] =& $expired_subscription;
afin de ne pas faire l'ajout de la souscription (et de l'utilisateur) si jamais l'utilisateur possède actuellement une souscription active pour le même plan.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 31
  • Thank you received: 0
7 months 3 weeks ago #336860

Bonjour et merci,

Je viens de tester, ça fonctionne pour moi.

Merci encore !

Please Log in or Create an account to join the conversation.

Moderators: Obsidev
Time to create page: 0.070 seconds
Powered by Kunena Forum