<?php
// +-------------------------------------------------+
// | 2002-2025 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
// +-------------------------------------------------+
// $Id: mail_user_auth_token.class.php,v 1.1 2026/08/04 11:30:22 dgoron Exp $

if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");

/**
 * Envoi d'un lien de connexion a un utilisateur PMB (gestion).
 *
 * Ce mail remplace l'envoi d'un mot de passe provisoire en clair : il ne contient
 * aucun secret reutilisable au-dela de la duree de validite du lien, et le mot de
 * passe du compte n'est pas modifie. Le lien ouvre une session limitee a la
 * definition du mot de passe (cf. auth_token.php).
 *
 * Variables de substitution disponibles dans le corps du mail :
 *   !!auth_link!!            : le lien de connexion
 *   !!auth_link_expiration!! : date et heure de fin de validite du lien
 *   !!user_login!!           : le login de l'utilisateur
 *   !!user_name!!            : le nom complet de l'utilisateur (prenom nom)
 *
 * Parametres DB : type_param='pmb', sstype_param='send_auth_token_mail_obj' et 'send_auth_token_mail_text'
 */
class mail_user_auth_token extends mail_user {

    /** @var string Token de connexion en clair */
    protected $auth_token;

    /** @var string Date et heure de fin de validite, deja formatee */
    protected $auth_token_expiration = '';

    protected function _init_default_settings() {
        parent::_init_default_settings();
        $this->_init_setting_value('sender', 'user');
    }

    /**
     * @return string Objet du mail (issu du parametre pmb_send_auth_token_mail_obj)
     */
    protected function get_mail_object() {
        global $pmb_send_auth_token_mail_obj;
        return $pmb_send_auth_token_mail_obj;
    }

    /**
     * @return string Corps du mail avec les variables substituees
     */
    protected function get_mail_content() {
        global $pmb_send_auth_token_mail_text;

        return str_replace(
            ['!!auth_link!!', '!!auth_link_expiration!!', '!!user_login!!', '!!user_name!!'],
            [$this->get_auth_link(), $this->auth_token_expiration, $this->get_user_login(), $this->get_mail_to_name()],
            $pmb_send_auth_token_mail_text
        );
    }

    /**
     * @return string Lien de connexion complet
     */
    protected function get_auth_link() {
        global $pmb_url_base;

        return $pmb_url_base . 'auth_token.php?token=' . rawurlencode($this->auth_token);
    }

    protected function get_mail_headers() {
        global $charset;

        $headers  = "MIME-Version: 1.0\n";
        $headers .= "Content-type: text/html; charset=" . $charset . "\n";
        return $headers;
    }

    protected function get_mail_do_nl2br() {
        return 1;
    }

    /**
     * @param string $auth_token Token de connexion en clair
     * @return $this
     */
    public function set_auth_token($auth_token) {
        $this->auth_token = $auth_token;
        return $this;
    }

    /**
     * @param string $auth_token_expiration Date et heure de fin de validite, formatee
     * @return $this
     */
    public function set_auth_token_expiration($auth_token_expiration) {
        $this->auth_token_expiration = $auth_token_expiration;
        return $this;
    }
}
