Skip to content

#1152 [Pocket] feat: a Pocket account per user, and "I just hung up" picks the last recording of the folder - #1153

Merged
evarisk-kilyan merged 1 commit into
Eoxia:developfrom
evarisk-kilyan:feat/1152-pocket-per-user
Oct 22, 2026
Merged

evarisk-kilyan merged 1 commit into
Eoxia:developfrom
evarisk-kilyan:feat/1152-pocket-per-user

Conversation

@evarisk-kilyan

Copy link
Copy Markdown
Contributor

Changements

Compte Pocket par utilisateur

  • Nouvelle classe PocketAccount (class/pocketaccount.class.php) : le compte personnel d'un utilisateur (llx_user_param, entité courante, clé chiffrée avec dolEncrypt) ou le compte partagé (constantes de la configuration du module).
    • getForUser() : le compte personnel s'il a une clé, sinon le compte partagé. Une clé personnelle sans dossier ne retombe pas sur le partagé, pour ne jamais rattacher les appels de quelqu'un d'autre.
    • getForRecording() : le compte dont vient un enregistrement.
    • getAllConfigured() : le compte partagé et les comptes personnels qui ont une clé et un dossier.
  • Onglet « Pocket » sur la fiche utilisateur (view/pocketrecording/pocketrecording_user.php) : clé, dossier, test de connexion, synchronisation manuelle. Il est accessible à l'utilisateur lui-même s'il a le droit d'écriture sur les enregistrements Pocket, et pour les autres fiches à ceux qui peuvent modifier les utilisateurs. Un encart indique si l'utilisateur travaille sur le compte partagé.
  • Les formulaires de l'admin et de l'onglet passent par un tpl commun (core/tpl/reedcrm_pocket_account_setup.tpl.php) et un seul gestionnaire d'actions (reedcrm_pocket_process_account_action()). La page d'admin présente la clé du module comme le « Compte Pocket partagé » et liste les comptes personnels.
  • PocketApi n'a plus de repli implicite sur la clé partagée : l'appelant choisit le compte.
  • PocketSync travaille sur un compte. PocketSync::syncAllAccounts() parcourt tous les comptes configurés, et un compte en erreur n'arrête pas les autres. Le cron l'utilise et rend un rapport par nombre de comptes.
  • Colonne fk_user_pocket sur llx_reedcrm_pocket_recording (NULL = compte partagé), posée à la création seulement : un même compte Pocket configuré deux fois ne se « vole » pas ses enregistrements. La fiche de l'enregistrement affiche le compte. Le rafraîchissement et l'audio utilisent le compte de l'enregistrement, parce que Pocket ne les fournit qu'à lui.

« Je viens de raccrocher » limité au dossier

  • findLastRecording() ne prend plus que les enregistrements rangés dans le dossier du compte de l'utilisateur. Les non rangés sont exclus.
  • importLastRecording() refuse un enregistrement plus vieux que REEDCRM_POCKET_HANGUP_MAX_AGE (240 min par défaut) : rien n'est rattaché, et le message demande de ranger l'appel dans le dossier depuis l'application Pocket. L'ancien avertissement affiché après le rattachement disparaît.
  • L'infobulle du bouton nomme le dossier.

Migration (sql/migration/llx_migration_reedcrm_pocket_personal_accounts.sql)

  • Ajoute fk_user_pocket (et son index dans le .key.sql).
  • Retire la clé partagée du test du cron de synchronisation, figé dans llx_cronjob à l'activation : une équipe où chacun a sa clé laisse la clé partagée vide.
  • ⚠️ Le module doit être réactivé : sans la colonne, les fiches des enregistrements répondent « Record not found ».

Vérifié en local

Sur une instance de test (base clonée), avec le vrai compte Pocket en lecture seule :

  • Clé personnelle enregistrée chiffrée (dolcrypt:) et relue. Sans clé, l'utilisateur retombe sur le partagé. Avec une clé sans dossier, pas de bouton.
  • Synchronisation : 81 enregistrements du dossier importés, aucun d'un autre dossier. Les 41 importés par le compte personnel gardent leur propriétaire après le passage du compte partagé.
  • Bouton sur une fiche tiers : le dernier enregistrement rangé date du 17/09, il est refusé avec le message, et rien n'est rattaché.
  • Fiche d'un enregistrement personnel : « Compte Pocket : demo », URL audio signée, rafraîchissement OK.
  • Pages admin et onglet utilisateur : rendues sans erreur ni avertissement PHP.
  • PHPStan : aucune erreur nouvelle par rapport à develop. En local, dolEncrypt/dolDecrypt sortent en « not found » parce que le cœur 24 les a déplacées dans blockedlog/lib/securitycore.lib.php. Le cœur 23.0.0 de la CI les a dans core/lib/security.lib.php, qui est scanné.

Fichiers modifiés

  • class/pocketaccount.class.php (nouveau)
  • view/pocketrecording/pocketrecording_user.php (nouveau)
  • core/tpl/reedcrm_pocket_account_setup.tpl.php (nouveau)
  • sql/migration/llx_migration_reedcrm_pocket_personal_accounts.sql (nouveau)
  • class/pocketapi.class.php, class/pocketsync.class.php, class/pocketcron.class.php, class/pocketrecording.class.php
  • lib/reedcrm_pocketrecording.lib.php
  • admin/pocket.php, view/pocketrecording/pocketrecording_card.php, ajax/pocket_audio_url.php
  • core/modules/modReedCRM.class.php
  • sql/pocket/llx_reedcrm_pocket_recording.sql, sql/pocket/llx_reedcrm_pocket_recording.key.sql
  • langs/fr_FR/reedcrm.lang, langs/en_US/reedcrm.lang

Close #1152

… up" picks the last recording of the folder

Each user can now enter their own Pocket key and folder on a Pocket tab of their user card.
The key of the module setup becomes the shared account, used by whoever has no key of their own.
The synchronisation walks every configured account, and each mirrored recording remembers the
account it comes from, since Pocket only signs its detail and audio for that account.

"I just hung up" now only takes recordings filed in the folder of the user's account. When the
last one is older than REEDCRM_POCKET_HANGUP_MAX_AGE, nothing is attached and the user is asked
to file the call in the folder first.

The migration adds llx_reedcrm_pocket_recording.fk_user_pocket and drops the shared key from the
test of the synchronisation job. The module has to be activated again.
@evarisk-kilyan
evarisk-kilyan merged commit 76553fb into Eoxia:develop Oct 22, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Pocket] Un compte Pocket par utilisateur, et « Je viens de raccrocher » limité au dossier

1 participant