Accéder au contenu.
Menu Sympa

fr - [sympa-fr] fonction invite depuis wwsympa

Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa

Archives de la liste

Chronologique Discussions  
  • From: Alban Rodriguez <adresse@cachée>
  • To: adresse@cachée
  • Subject: [sympa-fr] fonction invite depuis wwsympa
  • Date: Thu, 20 Jun 2019 11:16:40 +0200

Bonjour,

Je me suis rendu compte que la commande invite n’était possible que par mail et pas via l’interface web de Sympa.

J’ai seulement retrouvé ce message d’un autre utilisateur, posté sur sympa-users, avec la même question :

De: Matt Taggart <adresse@cachée>
Objet: Rép : [sympa-users] Has Sympa GDPR ready subscription function?
Date: 25 mai 2018 à 01:42:21 UTC+2
Répondre à: Matt Taggart <adresse@cachée>

On 05/20/2018 04:46 PM, adresse@cachée wrote:
[snip]
Of course, I can ask to my software guy to code something like this for our
lists, but as this is required for all the lists arround the world with at
least one European subscriber, wouldn't it not be easyier to ad this kind of
GDPR check boxes to Sympa once for all?

Some other questions wrt GDPR compliance on a public sympa instance:

* Are list admins allowed to "add" subscribers to their lists or only
"invite"?
* The list admin interface has an area for adding a single subscriber
and also multiple add. If I want to restrict "add" to listmaster those
are still shown (and possibly still work?) for list admins but they
shouldn't be.
* Is there a way in the list admin web interface to "invite"? (I know it
exists in the mail interface)

* Should other subscribers be allowed to "review" the list of
subscribers? I can understand why this should be off for large
newsletter lists, but I definitely know of small lists where everyone on
the list wants the ability to do this. Maybe subscribers to lists with
"review" enabled would need to opt-in? But then "review" shouldn't ever
be adjusted? This sounds like a nightmare to manage....

-- 
Matt Taggart
adresse@cachée

En toute logique, cette fonction devrait se trouver sur la page review avec celles permettant d’abonner un ou plusieurs utilisateurs et listant les abonnés.

J’ai donc naïvement tenté d’ajouter la fonction invite sans rien connaître du code de Sympa (ni Perl en fait); j’ai donc probablement fait un truc un peu pourri. Mais cela me laisse penser que la solution propre n’est pas loin.
Tout ce qui est nécessaire existe déjà dans le code de Sympa.

Pour le template de la page web, j’ai juste surchargé review.tt2 en en mettant une copie modifiée de la version ‘default’ dans etc. C’est juste de la personnalisation.
En gros il suffit d’ajouter un bloc similaire à celui de la fonction permettant d’ajouter un abonné en modifiant (en gras) le texte, les id et valeur des éléments et l’action du formulaire

<hr>
  <h3>[%|loc%]Invite[%END%]</h3>
    <form action=""[%" path_cgi %]" method="POST">
    <h4>[%|loc%]To invite a user to subscribe:[%END%]</h4>
    <fieldset>
    <input type="hidden" name="previous_action" value="review" />
    <input type="hidden" name="list" value="[% list %]" />
    <input type="hidden" name="action" value="invite" />
    <div>
      <label for=""email_search2">[%|loc%]Email address:[%END%]</label>
      <input id="email_search2" type="text" name="email" size="35" />
    </div>
    <div>
      <input class="MainMenuLinks" type="submit" name="action_invite"
       value="[%|loc%]Invite[%END%]" />
    </div>
    </fieldset>
    </form>

Mais ensuite, il faut quand même modifier quelque trucs dans wwsympa.fcgi:

Il faut ajouter une ’subroutine’ pour l’action ‘invite’ :

## subroutines
our %comm = (
    'confirm_action' => 'do_confirm_action',
    'home'           => 'do_home',
    'logout'         => 'do_logout',
...
   'add'              => 'do_add',
    'invite'       => 'do_invite',
    'auth_add'         => 'do_auth_add',
...
);

Ensuite il faut créer une fonction do_invite qui un copier-coller de la fonction do_add en changeant quelques trucs (en gras).
A noter que le code de confirmation est commenté car sinon l’invitation n’est pas envoyée et ne comprenant pas trop comment cela fonctionne, je ne sais pas pourquoi

# Invite a user to a list
sub do_invite {
    wwslog('info', '(%s)', $in{'email'});

    # Access control.
    return undef unless defined check_authz('do_invite', 'invite');

    my @emails =
        grep {$_} map { Sympa::Tools::Text::canonic_email($_) }
        split /\0/, $in{'email'};
    return $in{'previous_action'} || 'review' unless @emails;

    $param->{'email'} = [@emails];
    #$param->{'quiet'} = $in{'quiet'};

    # Action confirmed?
    #my $next_action = $session->confirm_action(
    #    $in{'action'}, $in{'response_action'},
    #    arg             => join(',', sort @emails),
    #    previous_action => ($in{'previous_action'} || 'review')
    #);
    #return $next_action unless $next_action eq '1';

    my $stash     = [];
    my $processed = 0;
    foreach my $email (@emails) {
        my $spindle = Sympa::Spindle::ProcessRequest->new(
            context          => $list,
            action           => 'invite',
            email            => $email,
            sender           => $param->{'user'}{'email'},
            #quiet            => $param->{'quiet'},
            md5_check        => 1,
            scenario_context => {
                email       => $email,
                sender      => $param->{'user'}{'email'},
                remote_host => $param->{'remote_host'},
                remote_addr => $param->{'remote_addr'}
            },
            stash => $stash,
        );
        $spindle and $processed += $spindle->spin;
    }

    unless ($processed) {
        return $in{'previous_action'} || 'review';
    }

    foreach my $report (@$stash) {
        if ($report->[1] eq 'notice') {
            Sympa::WWW::Report::notice_report_web(@{$report}[2, 3],
                $param->{'action'});
        } else {
            Sympa::WWW::Report::reject_report_web(@{$report}[1 .. 3],
                $param->{action});
        }
    }
    unless (@$stash) {
        Sympa::WWW::Report::notice_report_web('performed', {},
            $param->{'action'});
    }

    return $in{'previous_action'} || 'review';
}


Et je crois que c’est tout en fait. Comme j’ai utilisé des chaines qui ne sont pas dans les tables de traduction, tout reste en anglais. C’est aussi modifiable.


Ma question finalement: est-ce selon vous une fonction utile qui devrait être de base ?

Comme pour l’utilisateur que j’ai cité au début, tout ceci est en rapport avec des modifications de paramètres de nos listes pour être en accord avec le RGPD.
Nous retirons donc pour quasiment toutes les listes le droit 'add’ aux propriétaires => tous les abonnements doivent être volontaires.
Mais lorsqu’il s’agit de liste cachées, il faut un moyen d’inciter (inviter) les utilisateurs à s’inscrire et selon nous la fonction d’invitation de Sympa convient pour cela.

Votre avis ?

Alban Rodriguez
La Rochelle Université


  • [sympa-fr] fonction invite depuis wwsympa, Alban Rodriguez, 20/06/2019

Archives gérées par MHonArc 2.6.19+.

Haut de le page