54 $this->module_position =
'06';
56 $this->
name = preg_replace(
'/^mod/i',
'', get_class($this));
57 $this->
description =
"Management of members of a foundation or association";
59 $this->version =
'dolibarr';
60 $this->const_name =
'MAIN_MODULE_'.strtoupper($this->
name);
61 $this->picto =
'member';
66 "/doctemplates/members",
70 $this->config_page_url = array(
"member.php@adherents");
73 $this->hidden =
false;
74 $this->depends = array();
75 $this->requiredby = array();
76 $this->conflictwith = array(
'modMailmanSpip');
77 $this->langfiles = array(
"members",
"companies");
78 $this->phpmin = array(7, 0);
86 'Name of PDF model of member',
98 "ADHERENT_EMAIL_TEMPLATE_AUTOREGISTER",
99 "emailtemplate:member",
100 "(SendingEmailOnAutoSubscription)",
105 "ADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION",
106 "emailtemplate:member",
107 "(SendingEmailOnNewSubscription)",
112 "ADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION",
113 "emailtemplate:member",
114 "(SendingReminderForExpiredSubscription)",
119 "ADHERENT_EMAIL_TEMPLATE_CANCELATION",
120 "emailtemplate:member",
121 "(SendingEmailOnCancelation)",
127 "ADHERENT_CARD_HEADER_TEXT",
130 "Texte imprimé sur le haut de la carte adhérent",
134 "ADHERENT_CARD_FOOTER_TEXT",
137 "Texte imprimé sur le bas de la carte adhérent",
141 "ADHERENT_CARD_TEXT",
143 "__FULLNAME__\r\nID: __ID__\r\n__EMAIL__\r\n__ADDRESS__\r\n__ZIP__ __TOWN__\r\n__COUNTRY__",
144 "Text to print on member cards",
148 "ADHERENT_MAILMAN_ADMIN_PASSWORD",
151 "Password admin mailman lists",
155 "ADHERENT_ETIQUETTE_TYPE",
158 "Type of address sheets",
162 "ADHERENT_ETIQUETTE_TEXT",
164 "__FULLNAME__\n__ADDRESS__\n__ZIP__ __TOWN__\n__COUNTRY__",
165 "Text to print on member address sheets",
170 "ADHERENT_BANK_ACCOUNT",
173 "ID of bank account to use",
177 "ADHERENT_BANK_CATEGORIE",
180 "ID of bank transaction category to use",
184 "MEMBER_ADDON_PDF_ODT_PATH",
186 "DOL_DATA_ROOT".($conf->entity > 1 ?
'/'.$conf->entity :
'').
"/doctemplates/members",
194 $this->boxes = array(
195 0 => array(
'file' =>
'box_members.php',
'enabledbydefaulton' =>
'Home'),
196 2 => array(
'file' =>
'box_birthdays_members.php',
'enabledbydefaulton' =>
'Home'),
197 3 => array(
'file' =>
'box_members_last_modified.php',
'enabledbydefaulton' =>
'membersindex'),
198 4 => array(
'file' =>
'box_members_last_subscriptions.php',
'enabledbydefaulton' =>
'membersindex'),
199 5 => array(
'file' =>
'box_members_subscriptions_by_year.php',
'enabledbydefaulton' =>
'membersindex'),
200 6 => array(
'file' =>
'box_members_by_type.php',
'enabledbydefaulton' =>
'membersindex'),
201 7 => array(
'file' =>
'box_members_by_tags.php',
'enabledbydefaulton' =>
'membersindex'),
206 $this->rights = array();
207 $this->rights_class =
'adherent';
218 $this->rights[$r][0] = 71;
219 $this->rights[$r][1] =
'Read members\' card';
220 $this->rights[$r][2] =
'r';
221 $this->rights[$r][3] = 0;
222 $this->rights[$r][4] =
'lire';
225 $this->rights[$r][0] = 72;
226 $this->rights[$r][1] =
'Create/modify members (need also user module permissions if member linked to a user)';
227 $this->rights[$r][2] =
'w';
228 $this->rights[$r][3] = 0;
229 $this->rights[$r][4] =
'creer';
232 $this->rights[$r][0] = 74;
233 $this->rights[$r][1] =
'Remove members';
234 $this->rights[$r][2] =
'd';
235 $this->rights[$r][3] = 0;
236 $this->rights[$r][4] =
'supprimer';
239 $this->rights[$r][0] = 76;
240 $this->rights[$r][1] =
'Export members';
241 $this->rights[$r][2] =
'r';
242 $this->rights[$r][3] = 0;
243 $this->rights[$r][4] =
'export';
246 $this->rights[$r][0] = 75;
247 $this->rights[$r][1] =
'Setup types of membership';
248 $this->rights[$r][2] =
'w';
249 $this->rights[$r][3] = 0;
250 $this->rights[$r][4] =
'configurer';
253 $this->rights[$r][0] = 78;
254 $this->rights[$r][1] =
'Read membership fees';
255 $this->rights[$r][2] =
'r';
256 $this->rights[$r][3] = 0;
257 $this->rights[$r][4] =
'cotisation';
258 $this->rights[$r][5] =
'lire';
261 $this->rights[$r][0] = 79;
262 $this->rights[$r][1] =
'Create/modify/remove membership fees';
263 $this->rights[$r][2] =
'w';
264 $this->rights[$r][3] = 0;
265 $this->rights[$r][4] =
'cotisation';
266 $this->rights[$r][5] =
'creer';
286 $this->export_code[$r] = $this->rights_class.
'_'.$r;
287 $this->export_label[$r] =
'MembersAndSubscriptions';
288 $this->export_permission[$r] = array(array(
"adherent",
"export"));
289 $this->export_fields_array[$r] = array(
290 'a.rowid' =>
'MemberId',
'a.ref' =>
'MemberRef',
'a.civility' =>
"UserTitle",
'a.lastname' =>
"Lastname",
'a.firstname' =>
"Firstname",
'a.login' =>
"Login",
'a.gender' =>
"Gender",
'a.morphy' =>
'MemberNature',
291 'a.societe' =>
'Company',
'a.address' =>
"Address",
'a.zip' =>
"Zip",
'a.town' =>
"Town",
'd.code_departement' =>
'StateCode',
'd.nom' =>
"State",
'co.code' =>
"CountryCode",
'co.label' =>
"Country",
292 'a.phone' =>
"PhonePro",
'a.phone_perso' =>
"PhonePerso",
'a.phone_mobile' =>
"PhoneMobile",
'a.email' =>
"Email",
'a.birth' =>
"Birthday",
'a.statut' =>
"Status",
293 'a.photo' =>
"Photo",
'a.note_public' =>
"NotePublic",
'a.note_private' =>
"NotePrivate",
'a.datec' =>
'DateCreation',
'a.datevalid' =>
'DateValidation',
294 'a.tms' =>
'DateLastModification',
'a.datefin' =>
'DateEndSubscription',
'ta.rowid' =>
'MemberTypeId',
'ta.libelle' =>
'MemberTypeLabel',
295 'c.rowid' =>
'SubscriptionId',
'c.dateadh' =>
'DateSubscription',
'c.datef' =>
'DateEndSubscription',
'c.subscription' =>
'Amount'
297 $this->export_TypeFields_array[$r] = array(
298 'a.civility' =>
"Text",
'a.lastname' =>
"Text",
'a.firstname' =>
"Text",
'a.login' =>
"Text",
'a.gender' =>
'Text',
'a.morphy' =>
'Text',
'a.societe' =>
'Text',
'a.address' =>
"Text",
299 'a.zip' =>
"Text",
'a.town' =>
"Text",
'd.nom' =>
"Text",
'co.code' =>
'Text',
'co.label' =>
"Text",
'a.phone' =>
"Text",
'a.phone_perso' =>
"Text",
'a.phone_mobile' =>
"Text",
300 'a.email' =>
"Text",
'a.birth' =>
"Date",
'a.statut' =>
"Status",
'a.note_public' =>
"Text",
'a.note_private' =>
"Text",
'a.datec' =>
'Date',
'a.datevalid' =>
'Date',
301 'a.tms' =>
'Date',
'a.datefin' =>
'Date',
'ta.rowid' =>
'List:adherent_type:libelle::member_type',
'ta.libelle' =>
'Text',
302 'c.rowid' =>
'Numeric',
'c.dateadh' =>
'Date',
'c.datef' =>
'Date',
'c.subscription' =>
'Numeric'
304 $this->export_entities_array[$r] = array(
305 'a.rowid' =>
'member',
'a.ref' =>
'member',
'a.civility' =>
"member",
'a.lastname' =>
"member",
'a.firstname' =>
"member",
'a.login' =>
"member",
'a.gender' =>
'member',
'a.morphy' =>
'member',
306 'a.societe' =>
'member',
'a.address' =>
"member",
'a.zip' =>
"member",
'a.town' =>
"member",
'd.nom' =>
"member",
'co.code' =>
"member",
'co.label' =>
"member",
307 'a.phone' =>
"member",
'a.phone_perso' =>
"member",
'a.phone_mobile' =>
"member",
'a.email' =>
"member",
'a.birth' =>
"member",
'a.statut' =>
"member",
308 'a.photo' =>
"member",
'a.note_public' =>
"member",
'a.note_private' =>
"member",
'a.datec' =>
'member',
'a.datevalid' =>
'member',
'a.tms' =>
'member',
309 'a.datefin' =>
'member',
'ta.rowid' =>
'member_type',
'ta.libelle' =>
'member_type',
310 'c.rowid' =>
'subscription',
'c.dateadh' =>
'subscription',
'c.datef' =>
'subscription',
'c.subscription' =>
'subscription'
313 $keyforselect =
'adherent';
314 $keyforelement =
'member';
315 $keyforaliasextra =
'extra';
316 include DOL_DOCUMENT_ROOT.
'/core/extrafieldsinexport.inc.php';
318 $this->export_sql_start[$r] =
'SELECT DISTINCT ';
319 $this->export_sql_end[$r] =
' FROM ('.MAIN_DB_PREFIX.
'adherent_type as ta, '.MAIN_DB_PREFIX.
'adherent as a)';
320 $this->export_sql_end[$r] .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'adherent_extrafields as extra ON a.rowid = extra.fk_object';
321 $this->export_sql_end[$r] .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'subscription as c ON c.fk_adherent = a.rowid';
322 $this->export_sql_end[$r] .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_departements as d ON a.state_id = d.rowid';
323 $this->export_sql_end[$r] .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_country as co ON a.country = co.rowid';
324 $this->export_sql_end[$r] .=
' WHERE a.fk_adherent_type = ta.rowid AND ta.entity IN ('.getEntity(
'member_type').
') ';
325 $this->export_dependencies_array[$r] = array(
'subscription' =>
'c.rowid');
332 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
335 $this->import_code[$r] = $this->rights_class.
'_'.$r;
336 $this->import_label[$r] =
"Members";
337 $this->import_icon[$r] = $this->picto;
338 $this->import_entities_array[$r] = array();
339 $this->import_tables_array[$r] = array(
'a' => MAIN_DB_PREFIX.
'adherent',
'extra' => MAIN_DB_PREFIX.
'adherent_extrafields');
340 $this->import_tables_creator_array[$r] = array(
'a' =>
'fk_user_author');
341 $this->import_fields_array[$r] = array(
342 'a.ref' =>
'MemberRef*',
343 'a.civility' =>
"UserTitle",
'a.lastname' =>
"Lastname*",
'a.firstname' =>
"Firstname",
'a.gender' =>
"Gender",
'a.login' =>
"Login*",
"a.pass" =>
"Password",
344 "a.fk_adherent_type" =>
"MemberTypeId*",
'a.morphy' =>
'MemberNature*',
'a.societe' =>
'Company',
'a.address' =>
"Address",
'a.zip' =>
"Zip",
'a.town' =>
"Town",
345 'a.state_id' =>
'StateId|StateCode',
'a.country' =>
"CountryId|CountryCode",
'a.phone' =>
"PhonePro",
'a.phone_perso' =>
"PhonePerso",
'a.phone_mobile' =>
"PhoneMobile",
346 'a.email' =>
"Email",
'a.birth' =>
"Birthday",
'a.statut' =>
"Status*",
'a.photo' =>
"Photo",
'a.note_public' =>
"NotePublic",
'a.note_private' =>
"NotePrivate",
347 'a.datec' =>
'DateCreation',
'a.datefin' =>
'DateEndSubscription'
350 $this->import_fields_array[$r][
'a.fk_soc'] =
"ThirdParty";
353 $sql =
"SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX.
"extrafields WHERE type <> 'separate' AND elementtype = 'adherent' AND entity IN (0,".((int)
$conf->entity).
")";
354 $resql = $this->db->query($sql);
356 while ($obj = $this->db->fetch_object($resql)) {
357 $fieldname =
'extra.'.$obj->name;
358 $fieldlabel = ucfirst($obj->label);
359 $this->import_fields_array[$r][$fieldname] = $fieldlabel.($obj->fieldrequired ?
'*' :
'');
363 $this->import_convertvalue_array[$r] = array(
365 'rule' =>
'getrefifauto',
367 'path' =>
"/core/modules/member/".
getDolGlobalString(
'MEMBER_ADDON',
'mod_member_simple').
'.php'
369 'a.state_id' => array(
370 'rule' =>
'fetchidfromcodeid',
371 'classfile' =>
'/core/class/cstate.class.php',
374 'dict' =>
'DictionaryStateCode'
376 'a.country' => array(
377 'rule' =>
'fetchidfromcodeid',
378 'classfile' =>
'/core/class/ccountry.class.php',
379 'class' =>
'Ccountry',
381 'dict' =>
'DictionaryCountry'
385 $this->import_convertvalue_array[$r][
'a.fk_soc'] = array(
'rule' =>
'fetchidfromref',
'classfile' =>
'/societe/class/societe.class.php',
'class' =>
'Societe',
'method' =>
'fetch',
'element' =>
'ThirdParty');
387 $this->import_fieldshidden_array[$r] = array(
'extra.fk_object' =>
'lastrowid-'.MAIN_DB_PREFIX.
'adherent');
388 $this->import_regex_array[$r] = array(
389 'a.civility' =>
'code@'.MAIN_DB_PREFIX.
'c_civility',
'a.fk_adherent_type' =>
'rowid@'.MAIN_DB_PREFIX.
'adherent_type',
'a.morphy' =>
'(phy|mor)',
390 'a.statut' =>
'^[0|1]',
'a.datec' =>
'^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$',
'a.datefin' =>
'^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$');
391 $this->import_examplevalues_array[$r] = array(
392 'a.ref' =>
"auto or MEM2010-1234",
393 'a.civility' =>
"MR",
'a.lastname' =>
'Smith',
'a.firstname' =>
'John',
'a.gender' =>
'man or woman',
'a.login' =>
'jsmith',
'a.pass' =>
'passofjsmith',
'a.fk_adherent_type' =>
'1',
394 'a.morphy' =>
'"mor" or "phy"',
'a.societe' =>
'JS company',
'a.address' =>
'21 jump street',
'a.zip' =>
'55000',
'a.town' =>
'New York',
'a.country' =>
'1',
395 'a.email' =>
'jsmith@example.com',
'a.birth' =>
'1972-10-10',
'a.statut' =>
"0 or 1",
'a.note_public' =>
"This is a public comment on member",
399 $this->import_examplevalues_array[$r][
'a.fk_soc'] =
"rowid or name";
401 $this->import_updatekeys_array[$r] = array(
'a.ref' =>
'MemberRef',
'a.login' =>
'Login');
405 $this->import_code[$r] = $this->rights_class.
'_'.$r;
406 $this->import_label[$r] =
"Subscriptions";
407 $this->import_icon[$r] = $this->picto;
408 $this->import_entities_array[$r] = array();
409 $this->import_tables_array[$r] = array(
'c' => MAIN_DB_PREFIX.
'subscription');
410 $this->import_fields_array[$r] = array(
411 'c.fk_adherent' =>
'MemberRef*',
412 'c.note' =>
'Note',
'c.dateadh' =>
'DateSubscription',
'c.datef' =>
'DateEndSubscription',
'c.subscription' =>
'Amount',
'c.fk_type' =>
'MemberType',
'c.fk_bank' =>
'Bank'
414 $this->import_convertvalue_array[$r] = array(
415 'c.fk_adherent' => array(
416 'rule' =>
'fetchidfromref',
417 'classfile' =>
'/adherents/class/adherent.class.php',
418 'class' =>
'Adherent',
420 'element' =>
'member'
423 $this->import_examplevalues_array[$r] = array(
424 'c.fk_adherent' =>
'member ref',
425 'c.note' =>
'Subscription #33',
'c.dateadh' =>
'2025-09-01',
'c.datef' =>
'2026-08-31',
'c.subscription' =>
'50'
430 $datestart =
dol_mktime(22, 0, 0, $arraydate[
'mon'], $arraydate[
'mday'], $arraydate[
'year']);
431 $this->cronjobs = array(
433 'label' =>
'SendReminderForExpiredSubscriptionTitle',
434 'jobtype' =>
'method',
'class' =>
'adherents/class/adherent.class.php',
435 'objectname' =>
'Adherent',
436 'method' =>
'sendReminderForExpiredSubscription',
437 'parameters' =>
'10;0',
438 'comment' =>
'SendReminderForExpiredSubscription',
440 'unitfrequency' => 3600 * 24,
443 'test' =>
'isModEnabled("member")',
444 'datestart' => $datestart