Conseil pour manipulation de clefs

  • Posts: 246
  • Thank you received: 5
7 years 7 months ago #266500

-- HikaShop version -- : 3.0.1
-- HikaSerial version -- : 1.10.4
-- Joomla version -- : 3.6.5
-- PHP version -- : 5.6

Bonjour,

Nous utilisons HikaShop Business+Hikaserial avec un plugin "generator" que j'ai créé. Le site vend un logiciel et des licences d'utilisation. Pour chaque commande, celui-ci interroge une API externe qui fournit une clef logiciel. Le client peut copier cette clef et la coller dans son logiciel pour activer sa licence. Cela fonctionne très bien.

Le mécanisme de l'API consiste à générer une clef puis il y a une notion d'activation et de désactivation. L'exemple type est de permettre à l'utilisateur de désactiver sa clef afin qu'elle puisse être réactivée sur une autre machine (crash DD par exemple).

A l'heure actuelle, le plugin génère la clef, celle-ci s'affiche dans le menu "my serials" pour l'utilisateur où il peut voir toutes les clefs qu'il a achetées. S'il veut les activer, il le fait depuis son logiciel par l'intermédiaire du web. Sans passer par hikashop.

L'idée serait d'offrir la possibilité à l'utilisateur d'aller sur son compte Joomla, d'afficher la liste de ses clefs et d'avoir un bouton "désactiver ma clef". Cela lui permettrait de la réactiver sur une autre machine. C'est parfaitement géré par l'API de gestion des clefs/licences (serveur externe).

Est-ce prévu dans HikaSerial via les mécanismes de "consommation" ? En pratique, quand l'utilisateur consulte la liste de ses clefs, il faut interroger le serveur via l'API pour savoir s'il a activé ses clefs (HikaShop ne le sait pas). Faut-il le faire via un plugin ? lequel ? Sur quel événement ? Où mettre puis afficher l'information résultante (statut d'activation) pour l'utilisateur ? Un bouton doit être présenté à l'utilisateur permettant de désactiver une clef donnée (événement déclenchant un nouvel accès à l'API) avec affichage du résultat (nouveau statut).

Il y a-t-il un mécanisme dans HikaSerial prêt à être utilisé pour cela ? Ou bien faut-il tout gérer "à la main" dans la vue qui affiche le listing des clefs (ce qui n'est pas très MVC compatible....).

Merci de votre éclairage,

Laurent

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

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
7 years 7 months ago #266514

Bonjour,

En effet, il n'y a pas de fonctionnalité de "unconsume" dans HikaSerial et même si la structure est entièrement MVC et propose de nombreux "triggers", un ajout nécessiterait la modification de fichiers "core".
Contrairement à HikaMarket, HikaSerial ne possède pas la fonctionnalité "plugin controller" qui va permettre de rajouter des contrôleurs (et des vues) via plugins.

Maintenant, même si une telle fonctionnalité est ajoutée dans HikaSerial, cela reste très spécifique, proche du "sur mesure".
Un nouveau trigger pourrait être proposé dans HikaSerial mais je ne vois aucunement ce qui serait possible de proposer comme "plugin de base" permettant d'utiliser une telle fonctionnalité (et donc justifiant son implementation sans passer par du développement sur mesure).

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: 246
  • Thank you received: 5
7 years 7 months ago #266664

Je m'en doutais un peu...

Voici comment j'ai fait. Il y a peut-être mieux (suggestions bienvenues ! :-).

J'ai enrichi mon plugin "générateur" d'une fonction "OnDisplaySerials" en faisant en sorte qu'elle ne se déclenche que pour mon plugin et que sur le front. Cela ne semble être déclenché que par le menu "display my own serials" dans l'espace de l'utilisateur. Parfait.

Dans ce plugin j'interroge le serveur de clefs pour chaque clef de l'utilisateur et j'enrichi l'objet $serial avec les données d'activation.

J'ai modifié la vue "listing" pour afficher sous chaque serial ces informations et un lien pour chaque ligne qui correspond à l'affichage de ce tableau plus une variable "&deactivateid=xxx" dans l'url avec l'id de la clef que l'utilisateur souhaite désactiver.

Cela redéclenche le "onDisplaySerials". Je détecte la présence de la variable et j'appelle le serveur pour désactiver la clef avant de reconstruire les données qui vont être à nouveau affichées et actualisées..... c'est lourdingue mais cela ne modifie par les fichiers Hika (en dehors de la vue listing).

Le résultat est plutôt sympathique :-)

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

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
7 years 7 months ago #266666

Bonjour,

Je ne trouve pas votre solution "lourdingue", au contraire, elle est bien propre !
Passer via le trigger "onDisplaySerials" est en effet une très bonne solution afin de pouvoir interagir avec l'affichage, aussi bien pour ne pas tout afficher à l'utilisateur qu'ajouter du contenu HTML pour les éléments adéquats (pas dans les emails, par exemple).

Je suppose que vous utilisez le "serial extra data" pour stocker vos informations supplémentaires

Le fait de passer par "onDisplaySerials" pour gérer le paramètre "deactivateid" me fait un peu mal au coeur, mais j'avoue que c'est aujourd'hui le plus adapté, donc c'est un bon choix.
Ce que je peux vous proposer c'est de passer via "onHikaserialBeforeDisplayView(&$view)".

Pour cela il faut simplement modifier le fichier "components/com_hikaserial/views/serial/view.html.php" et rajouter une variable à la classe:

protected $triggerView = true;
Ainsi les triggers d'affichage (before & after) seront appelés et vous aurez plus de souplesse dans la vérification du contexte et de l'appel de la vue.
(Sachant que vous avez l'object "$view" en paramètre avec tous les éléments accessible par "$this" dans les vues, incluant les serials, etc)

En espérant que cela vous aide.

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.
The following user(s) said Thank You: laurent

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

  • Posts: 246
  • Thank you received: 5
7 years 7 months ago #267933

Bonjour,

Tout se passe bien avec la solution adoptée. Il a fallu ajuster les situations ou plusieurs clefs étaient achetées par l'utilisateur avec plusieurs activations et empêcher le hack (la première solution passait l'id à désactiver dans l'url ce qui présentait un risque qu'un utilisateur tente de désactiver des clefs tierces. Maintenant on passe l'index random d'un tableau stocké en variable de sessions).

J'ai juste une question sur la vue et la construction de l'url permettant de réafficher la liste des serials. Vous utilisez un "helper" dans votre code (hikashop_completeLink) :

<td class="hikaserial_serial_ordernumber_value">
				<a href="<?php echo hikashop_completeLink('order&task=show&cid='.(int)$serial->serial_order_id); ?>"><?php
					echo $serial->order_number;
				?></a>
			</td>

Mais je n'ai pas réussi à le faire fonctionner pour mon override du listing qui est codé "en dur" :
          <td colspan="2">
            <?php if ($act[1] !== 0) : ?>
				<a href="<?php echo 'index.php?option=com_hikaserial&view=serial&layout=listing&deactid='.$act[1]; ?>"><?php
					echo JText::_('HIKASERIAL_LIMELM_DEACTIVATE_LINK');
				?></a>
            <?php endif; ?>
          </td>

Cela fonctionne bien mais l'url SEF n'est pas construite de la même façon. Je préfèrerais utiliser le helper (ou un autre ?). Une suggestion ?

Cordialement,

Laurent

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

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
7 years 7 months ago #267941

Bonjour,

Cela va dépendre du context.
Pour générer un lien HikaShop (sur le composant hikashop, via option=com_hikashop)

hikashop_completeLink('controllerName&task=TaskName...');
Idem pour HikaSerial (mais pour option=com_hikaserial)
hikaserial::completeLink('controllerName&task=TaskName...');
Voir juste utiliser le routeur de Joomla
JRoute::_('index.php?option=com_hikaserial&view=serial&layout=listing...);
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.

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