53 $this->module_position =
'06';
55 $this->
name = preg_replace(
'/^mod/i',
'', get_class($this));
56 $this->
description =
"Management of members of a foundation or association";
58 $this->version =
'dolibarr';
59 $this->const_name =
'MAIN_MODULE_'.strtoupper($this->
name);
60 $this->picto =
'member';
65 "/doctemplates/members",
69 $this->config_page_url = array(
"member.php@adherents");
72 $this->hidden =
false;
73 $this->depends = array();
74 $this->requiredby = array();
75 $this->conflictwith = array(
'modMailmanSpip');
76 $this->langfiles = array(
"members",
"companies");
77 $this->phpmin = array(7, 0);
80 $this->
const = array();
83 $this->
const[$r][0] =
"ADHERENT_ADDON_PDF";
84 $this->
const[$r][1] =
"chaine";
85 $this->
const[$r][2] =
"standard";
86 $this->
const[$r][3] =
'Name of PDF model of member';
87 $this->
const[$r][4] = 0;
91 $this->
const[$r][0] =
"ADHERENT_MAIL_FROM";
92 $this->
const[$r][1] =
"chaine";
93 $this->
const[$r][2] =
"";
94 $this->
const[$r][3] =
"From des mails";
95 $this->
const[$r][4] = 0;
98 $this->
const[$r][0] =
"ADHERENT_EMAIL_TEMPLATE_AUTOREGISTER";
99 $this->
const[$r][1] =
"emailtemplate:member";
100 $this->
const[$r][2] =
"(SendingEmailOnAutoSubscription)";
101 $this->
const[$r][3] =
"";
102 $this->
const[$r][4] = 0;
105 $this->
const[$r][0] =
"ADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION";
106 $this->
const[$r][1] =
"emailtemplate:member";
107 $this->
const[$r][2] =
"(SendingEmailOnNewSubscription)";
108 $this->
const[$r][3] =
"";
109 $this->
const[$r][4] = 0;
112 $this->
const[$r][0] =
"ADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION";
113 $this->
const[$r][1] =
"emailtemplate:member";
114 $this->
const[$r][2] =
"(SendingReminderForExpiredSubscription)";
115 $this->
const[$r][3] =
"";
116 $this->
const[$r][4] = 0;
119 $this->
const[$r][0] =
"ADHERENT_EMAIL_TEMPLATE_CANCELATION";
120 $this->
const[$r][1] =
"emailtemplate:member";
121 $this->
const[$r][2] =
"(SendingEmailOnCancelation)";
122 $this->
const[$r][3] =
"";
123 $this->
const[$r][4] = 0;
127 $this->
const[$r][0] =
"ADHERENT_CARD_HEADER_TEXT";
128 $this->
const[$r][1] =
"chaine";
129 $this->
const[$r][2] =
"__YEAR__";
130 $this->
const[$r][3] =
"Texte imprimé sur le haut de la carte adhérent";
131 $this->
const[$r][4] = 0;
134 $this->
const[$r][0] =
"ADHERENT_CARD_FOOTER_TEXT";
135 $this->
const[$r][1] =
"chaine";
136 $this->
const[$r][2] =
"__COMPANY__";
137 $this->
const[$r][3] =
"Texte imprimé sur le bas de la carte adhérent";
138 $this->
const[$r][4] = 0;
141 $this->
const[$r][0] =
"ADHERENT_CARD_TEXT";
142 $this->
const[$r][1] =
"texte";
143 $this->
const[$r][2] =
"__FULLNAME__\r\nID: __ID__\r\n__EMAIL__\r\n__ADDRESS__\r\n__ZIP__ __TOWN__\r\n__COUNTRY__";
144 $this->
const[$r][3] =
"Text to print on member cards";
145 $this->
const[$r][4] = 0;
148 $this->
const[$r][0] =
"ADHERENT_MAILMAN_ADMIN_PASSWORD";
149 $this->
const[$r][1] =
"chaine";
150 $this->
const[$r][2] =
"";
151 $this->
const[$r][3] =
"Mot de passe Admin des liste mailman";
152 $this->
const[$r][4] = 0;
155 $this->
const[$r][0] =
"ADHERENT_ETIQUETTE_TYPE";
156 $this->
const[$r][1] =
"chaine";
157 $this->
const[$r][2] =
"L7163";
158 $this->
const[$r][3] =
"Type of address sheets";
159 $this->
const[$r][4] = 0;
162 $this->
const[$r][0] =
"ADHERENT_ETIQUETTE_TEXT";
163 $this->
const[$r][1] =
"texte";
164 $this->
const[$r][2] =
"__FULLNAME__\n__ADDRESS__\n__ZIP__ __TOWN__\n__COUNTRY__";
165 $this->
const[$r][3] =
"Text to print on member address sheets";
166 $this->
const[$r][4] = 0;
170 $this->
const[$r][0] =
"ADHERENT_BANK_ACCOUNT";
171 $this->
const[$r][1] =
"chaine";
172 $this->
const[$r][2] =
"";
173 $this->
const[$r][3] =
"ID of bank account to use";
174 $this->
const[$r][4] = 0;
177 $this->
const[$r][0] =
"ADHERENT_BANK_CATEGORIE";
178 $this->
const[$r][1] =
"chaine";
179 $this->
const[$r][2] =
"";
180 $this->
const[$r][3] =
"ID of bank transaction category to use";
181 $this->
const[$r][4] = 0;
184 $this->
const[$r][0] =
"MEMBER_ADDON_PDF_ODT_PATH";
185 $this->
const[$r][1] =
"chaine";
186 $this->
const[$r][2] =
"DOL_DATA_ROOT/doctemplates/members";
187 $this->
const[$r][3] =
"";
188 $this->
const[$r][4] = 0;
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'
349 if (isModEnabled(
"societe")) {
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,".$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',
366 'class'=>(empty($conf->global->MEMBER_ADDON) ?
'mod_member_simple' : $conf->global->MEMBER_ADDON),
367 'path'=>
"/core/modules/member/".(empty($conf->global->MEMBER_ADDON) ?
'mod_member_simple' : $conf->global->MEMBER_ADDON).
'.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'
384 if (isModEnabled(
"societe")) {
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",
398 if (isModEnabled(
"societe")) {
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 $datestart =
dol_mktime(22, 0, 0, $arraydate[
'mon'], $arraydate[
'mday'], $arraydate[
'year']);
406 $this->cronjobs = array(
408 'label'=>
'SendReminderForExpiredSubscriptionTitle',
409 'jobtype'=>
'method',
'class'=>
'adherents/class/adherent.class.php',
410 'objectname'=>
'Adherent',
411 'method'=>
'sendReminderForExpiredSubscription',
412 'parameters'=>
'10;0',
413 'comment'=>
'SendReminderForExpiredSubscription',
415 'unitfrequency'=> 3600 * 24,
418 'test'=>
'$conf->adherent->enabled',
419 'datestart'=>$datestart