diff --git a/htdocs/admin/mailman.php b/htdocs/admin/mailman.php
index 34d0fae56e5..eaca2cb998a 100644
--- a/htdocs/admin/mailman.php
+++ b/htdocs/admin/mailman.php
@@ -30,6 +30,7 @@
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/mailmanspip.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
$langs->load("admin");
$langs->load("members");
diff --git a/htdocs/admin/spip.php b/htdocs/admin/spip.php
index ae7601fb611..755ab8670e1 100644
--- a/htdocs/admin/spip.php
+++ b/htdocs/admin/spip.php
@@ -30,6 +30,7 @@
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/mailmanspip.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
$langs->load("admin");
$langs->load("members");
diff --git a/htdocs/core/lib/admin.lib.php b/htdocs/core/lib/admin.lib.php
index 6e302fa9806..d399256dc0e 100644
--- a/htdocs/core/lib/admin.lib.php
+++ b/htdocs/core/lib/admin.lib.php
@@ -1082,6 +1082,7 @@ function form_constantes($tableau,$strictw3c=0)
print '
';
print 'mymailmanlist
';
print 'mymailmanlist1,mymailmanlist2
';
+ print 'TYPE:Type1:mymailmanlist1,TYPE:Type2:mymailmanlist2
';
if ($conf->categorie->enabled) print 'CATEG:Categ1:mymailmanlist1,CATEG:Categ2:mymailmanlist2
';
print '
';
//print 'http://lists.domain.com/cgi-bin/mailman/admin/%LISTE%/members/remove?adminpw=%MAILMAN_ADMINPW%&unsubscribees=%EMAIL%';
diff --git a/htdocs/mailmanspip/class/mailmanspip.class.php b/htdocs/mailmanspip/class/mailmanspip.class.php
index 26c9cb3a24b..e0add082e71 100644
--- a/htdocs/mailmanspip/class/mailmanspip.class.php
+++ b/htdocs/mailmanspip/class/mailmanspip.class.php
@@ -395,17 +395,22 @@ class MailmanSpip
foreach ($lists as $list)
{
- // Filter on type something (ADHERENT_MAILMAN_LISTS = "filtervalue:mailinglist1,filtervalue2:mailinglist2,mailinglist3")
- $tmp=explode(':',$list);
- if (! empty($tmp[1]))
- {
- $list=$tmp[1];
- if ($object->element == 'member' && $object->type != $tmp[1]) // Filter on member type label
- {
- dol_syslog("We ignore list ".$list." because object member type ".$object->type." does not match ".$tmp[0], LOG_DEBUG);
- continue;
- }
- }
+ // Filter on type something (ADHERENT_MAILMAN_LISTS = "mailinglist0,TYPE:typevalue:mailinglist1,CATEG:categvalue:mailinglist2")
+ $tmp=explode(':',$list);
+ if (! empty($tmp[2]))
+ {
+ $list=$tmp[2];
+ if ($object->element == 'member' && $tmp[0] == 'TYPE' && $object->type != $tmp[1]) // Filter on member type label
+ {
+ dol_syslog("We ignore list ".$list." because object member type ".$object->type." does not match ".$tmp[1], LOG_DEBUG);
+ continue;
+ }
+ if ($object->element == 'member' && $tmp[0] == 'CATEG' && ! in_array($tmp[1], $categstatic->containing($object->id, 'member', 'label'))) // Filter on member category
+ {
+ dol_syslog("We ignore list ".$list." because object member is not into category ".$tmp[1], LOG_DEBUG);
+ continue;
+ }
+ }
//We call Mailman to unsubscribe the user
$result = $this->callMailman($object, $conf->global->ADHERENT_MAILMAN_UNSUB_URL, $list);