format('Y-m-d H:i:s'); // Insert invitation (role 'secretaire') $ins = $pdo->prepare("INSERT INTO invitations (email, role, praticien_id, token, status, expires_at, invited_by) VALUES (:email,'secretaire',:pid,:tk,'envoyee',:exp,:by)"); $ins->execute([ 'email'=>$email, 'pid'=>$praticien_id, 'tk'=>$token, 'exp'=>$expires, 'by'=> (int)($_SESSION['compte_id'] ?? 0), ]); // Stocker droits sélectionnés côté "mémo" (façon simple : dans token via table dédiée ?) // Ici on ajoute un petit "mémo" côté invitations.meta_json si tu souhaites : // Si tu veux, ajoute une colonne meta_json JSON dans invitations. Sinon, on appliquera des droits par défaut à l'acceptation, et on pourra basculer ensuite. // Pour rester 100% compatible avec ta structure actuelle, on applique par défaut can_manage_rdv=1, can_edit_slots=0, puis on laisse l'UI permettre de modifier après acceptation. // Envoi email (si tu as un mailer) if (function_exists('uslugi_mail')) { $acceptUrl = sprintf( '%s/public/cabinet/accepter_invitation.php?token=%s', rtrim((isset($_SERVER['REQUEST_SCHEME']) ? $_SERVER['REQUEST_SCHEME'].'://' : '').($_SERVER['HTTP_HOST']??''), '/'), $token ); $subject = $translations['inv_mail_sujet'] ?? 'Invitation à rejoindre un cabinet sur uslugi.fr'; $body = '
uslugi.fr

'.h($translations['inv_mail_bonjour'] ?? 'Bonjour,').'

'. h($translations['inv_mail_intro'] ?? 'Vous avez été invité(e) à rejoindre le secrétariat d’un praticien sur uslugi.fr. Grâce à cet accès, vous pourrez gérer les rendez-vous et organiser l’agenda du cabinet.'). '

'.h($translations['inv_mail_btn'] ?? 'Accepter l’invitation').'

'. h($translations['inv_mail_validite'] ?? 'Ce lien est valide pendant 10 jours. Passé ce délai, il expirera automatiquement.'). '

'.h($translations['inv_mail_ignore'] ?? 'Si vous n’êtes pas concerné(e) par cette invitation, vous pouvez ignorer cet email.').'

'.h($translations['inv_mail_footer'] ?? ('© '.date('Y').' uslugi.fr – Tous droits réservés')).'
'; uslugi_mail($email, $subject, $body); } $msg = $translations['invitation_envoyee'] ?? 'Invitation envoyée.'; } } if (isset($_POST['action']) && $_POST['action']==='toggle_rights') { $spid = (int)($_POST['spid'] ?? 0); $field = ($_POST['field'] ?? ''); if ($spid>0 && in_array($field,['can_manage_rdv','can_edit_slots','is_active'],true)) { // secure update scoped to this praticien $upd = $pdo->prepare("UPDATE secretaire_praticien SET $field = 1 - $field WHERE id=:id AND praticien_id=:pid"); $upd->execute(['id'=>$spid,'pid'=>$praticien_id]); $msg = $translations['droits_mis_a_jour'] ?? 'Droits mis à jour.'; } } } // DATA: invitations + secretaire_praticien liés à CE praticien $invitations = $pdo->prepare("SELECT id,email,status,expires_at,created_at FROM invitations WHERE praticien_id=:pid ORDER BY created_at DESC"); $invitations->execute(['pid'=>$praticien_id]); $invRows = $invitations->fetchAll(PDO::FETCH_ASSOC); // secrétaires liées $secs = $pdo->prepare(" SELECT sp.id, sp.secretaire_user_id, sp.can_manage_rdv, sp.can_edit_slots, sp.is_active, sp.created_at, c.email FROM secretaire_praticien sp JOIN compte c ON c.id = sp.secretaire_user_id WHERE sp.praticien_id = :pid ORDER BY sp.created_at DESC "); $secs->execute(['pid'=>$praticien_id]); $secRows = $secs->fetchAll(PDO::FETCH_ASSOC); require_once __DIR__ . '/../includes/header.php'; ?>

Email

Email