52 $this->module_position =
'06';
54 $this->
name = preg_replace(
'/^mod/i',
'', get_class($this));
55 $this->
description =
"Management of members of a foundation or association";
57 $this->version =
'dolibarr';
58 $this->const_name =
'MAIN_MODULE_'.strtoupper($this->
name);
59 $this->picto =
'member';
64 "/doctemplates/members",
68 $this->config_page_url = array(
"member.php@adherents");
71 $this->hidden =
false;
72 $this->depends = array();
73 $this->requiredby = array();
74 $this->conflictwith = array(
'modMailmanSpip');
75 $this->langfiles = array(
"members",
"companies");
76 $this->phpmin = array(7, 0);
79 $this->
const = array();
82 $this->
const[$r][0] =
"ADHERENT_ADDON_PDF";
83 $this->
const[$r][1] =
"chaine";
84 $this->
const[$r][2] =
"standard";
85 $this->
const[$r][3] =
'Name of PDF model of member';
86 $this->
const[$r][4] = 0;
90 $this->
const[$r][0] =
"ADHERENT_MAIL_FROM";
91 $this->
const[$r][1] =
"chaine";
92 $this->
const[$r][2] =
"";
93 $this->
const[$r][3] =
"From des mails";
94 $this->
const[$r][4] = 0;
97 $this->
const[$r][0] =
"ADHERENT_EMAIL_TEMPLATE_AUTOREGISTER";
98 $this->
const[$r][1] =
"emailtemplate:member";
99 $this->
const[$r][2] =
"(SendingEmailOnAutoSubscription)";
100 $this->
const[$r][3] =
"";
101 $this->
const[$r][4] = 0;
104 $this->
const[$r][0] =
"ADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION";
105 $this->
const[$r][1] =
"emailtemplate:member";
106 $this->
const[$r][2] =
"(SendingEmailOnNewSubscription)";
107 $this->
const[$r][3] =
"";
108 $this->
const[$r][4] = 0;
111 $this->
const[$r][0] =
"ADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION";
112 $this->
const[$r][1] =
"emailtemplate:member";
113 $this->
const[$r][2] =
"(SendingReminderForExpiredSubscription)";
114 $this->
const[$r][3] =
"";
115 $this->
const[$r][4] = 0;
118 $this->
const[$r][0] =
"ADHERENT_EMAIL_TEMPLATE_CANCELATION";
119 $this->
const[$r][1] =
"emailtemplate:member";
120 $this->
const[$r][2] =
"(SendingEmailOnCancelation)";
121 $this->
const[$r][3] =
"";
122 $this->
const[$r][4] = 0;
126 $this->
const[$r][0] =
"ADHERENT_CARD_HEADER_TEXT";
127 $this->
const[$r][1] =
"chaine";
128 $this->
const[$r][2] =
"__YEAR__";
129 $this->
const[$r][3] =
"Texte imprimé sur le haut de la carte adhérent";
130 $this->
const[$r][4] = 0;
133 $this->
const[$r][0] =
"ADHERENT_CARD_FOOTER_TEXT";
134 $this->
const[$r][1] =
"chaine";
135 $this->
const[$r][2] =
"__COMPANY__";
136 $this->
const[$r][3] =
"Texte imprimé sur le bas de la carte adhérent";
137 $this->
const[$r][4] = 0;
140 $this->
const[$r][0] =
"ADHERENT_CARD_TEXT";
141 $this->
const[$r][1] =
"texte";
142 $this->
const[$r][2] =
"__FULLNAME__\r\nID: __ID__\r\n__EMAIL__\r\n__ADDRESS__\r\n__ZIP__ __TOWN__\r\n__COUNTRY__";
143 $this->
const[$r][3] =
"Text to print on member cards";
144 $this->
const[$r][4] = 0;
147 $this->
const[$r][0] =
"ADHERENT_MAILMAN_ADMIN_PASSWORD";
148 $this->
const[$r][1] =
"chaine";
149 $this->
const[$r][2] =
"";
150 $this->
const[$r][3] =
"Password admin mailman lists";
151 $this->
const[$r][4] = 0;
154 $this->
const[$r][0] =
"ADHERENT_ETIQUETTE_TYPE";
155 $this->
const[$r][1] =
"chaine";
156 $this->
const[$r][2] =
"L7163";
157 $this->
const[$r][3] =
"Type of address sheets";
158 $this->
const[$r][4] = 0;
161 $this->
const[$r][0] =
"ADHERENT_ETIQUETTE_TEXT";
162 $this->
const[$r][1] =
"texte";
163 $this->
const[$r][2] =
"__FULLNAME__\n__ADDRESS__\n__ZIP__ __TOWN__\n__COUNTRY__";
164 $this->
const[$r][3] =
"Text to print on member address sheets";
165 $this->
const[$r][4] = 0;
169 $this->
const[$r][0] =
"ADHERENT_BANK_ACCOUNT";
170 $this->
const[$r][1] =
"chaine";
171 $this->
const[$r][2] =
"";
172 $this->
const[$r][3] =
"ID of bank account to use";
173 $this->
const[$r][4] = 0;
176 $this->
const[$r][0] =
"ADHERENT_BANK_CATEGORIE";
177 $this->
const[$r][1] =
"chaine";
178 $this->
const[$r][2] =
"";
179 $this->
const[$r][3] =
"ID of bank transaction category to use";
180 $this->
const[$r][4] = 0;
183 $this->
const[$r][0] =
"MEMBER_ADDON_PDF_ODT_PATH";
184 $this->
const[$r][1] =
"chaine";
185 $this->
const[$r][2] =
"DOL_DATA_ROOT/doctemplates/members";
186 $this->
const[$r][3] =
"";
187 $this->
const[$r][4] = 0;
193 $this->boxes = array(
194 0 => array(
'file'=>
'box_members.php',
'enabledbydefaulton'=>
'Home'),
195 2 => array(
'file'=>
'box_birthdays_members.php',
'enabledbydefaulton'=>
'Home'),
196 3 => array(
'file'=>
'box_members_last_modified.php',
'enabledbydefaulton'=>
'membersindex'),
197 4 => array(
'file'=>
'box_members_last_subscriptions.php',
'enabledbydefaulton'=>
'membersindex'),
198 5 => array(
'file'=>
'box_members_subscriptions_by_year.php',
'enabledbydefaulton'=>
'membersindex'),
199 6 => array(
'file'=>
'box_members_by_type.php',
'enabledbydefaulton'=>
'membersindex'),
200 7 => array(
'file'=>
'box_members_by_tags.php',
'enabledbydefaulton'=>
'membersindex'),
205 $this->rights = array();
206 $this->rights_class =
'adherent';
217 $this->rights[$r][0] = 71;
218 $this->rights[$r][1] =
'Read members\' card';
219 $this->rights[$r][2] =
'r';
220 $this->rights[$r][3] = 0;
221 $this->rights[$r][4] =
'lire';
224 $this->rights[$r][0] = 72;
225 $this->rights[$r][1] =
'Create/modify members (need also user module permissions if member linked to a user)';
226 $this->rights[$r][2] =
'w';
227 $this->rights[$r][3] = 0;
228 $this->rights[$r][4] =
'creer';
231 $this->rights[$r][0] = 74;
232 $this->rights[$r][1] =
'Remove members';
233 $this->rights[$r][2] =
'd';
234 $this->rights[$r][3] = 0;
235 $this->rights[$r][4] =
'supprimer';
238 $this->rights[$r][0] = 76;
239 $this->rights[$r][1] =
'Export members';
240 $this->rights[$r][2] =
'r';
241 $this->rights[$r][3] = 0;
242 $this->rights[$r][4] =
'export';
245 $this->rights[$r][0] = 75;
246 $this->rights[$r][1] =
'Setup types of membership';
247 $this->rights[$r][2] =
'w';
248 $this->rights[$r][3] = 0;
249 $this->rights[$r][4] =
'configurer';
252 $this->rights[$r][0] = 78;
253 $this->rights[$r][1] =
'Read membership fees';
254 $this->rights[$r][2] =
'r';
255 $this->rights[$r][3] = 0;
256 $this->rights[$r][4] =
'cotisation';
257 $this->rights[$r][5] =
'lire';
260 $this->rights[$r][0] = 79;
261 $this->rights[$r][1] =
'Create/modify/remove membership fees';
262 $this->rights[$r][2] =
'w';
263 $this->rights[$r][3] = 0;
264 $this->rights[$r][4] =
'cotisation';
265 $this->rights[$r][5] =
'creer';
285 $this->export_code[$r] = $this->rights_class.
'_'.$r;
286 $this->export_label[$r] =
'MembersAndSubscriptions';
287 $this->export_permission[$r] = array(array(
"adherent",
"export"));
288 $this->export_fields_array[$r] = array(
289 'a.rowid'=>
'MemberId',
'a.ref'=>
'MemberRef',
'a.civility'=>
"UserTitle",
'a.lastname'=>
"Lastname",
'a.firstname'=>
"Firstname",
'a.login'=>
"Login",
'a.gender'=>
"Gender",
'a.morphy'=>
'MemberNature',
290 '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",
291 'a.phone'=>
"PhonePro",
'a.phone_perso'=>
"PhonePerso",
'a.phone_mobile'=>
"PhoneMobile",
'a.email'=>
"Email",
'a.birth'=>
"Birthday",
'a.statut'=>
"Status",
292 'a.photo'=>
"Photo",
'a.note_public'=>
"NotePublic",
'a.note_private'=>
"NotePrivate",
'a.datec'=>
'DateCreation',
'a.datevalid'=>
'DateValidation',
293 'a.tms'=>
'DateLastModification',
'a.datefin'=>
'DateEndSubscription',
'ta.rowid'=>
'MemberTypeId',
'ta.libelle'=>
'MemberTypeLabel',
294 'c.rowid'=>
'SubscriptionId',
'c.dateadh'=>
'DateSubscription',
'c.datef'=>
'DateEndSubscription',
'c.subscription'=>
'Amount'
296 $this->export_TypeFields_array[$r] = array(
297 'a.civility'=>
"Text",
'a.lastname'=>
"Text",
'a.firstname'=>
"Text",
'a.login'=>
"Text",
'a.gender'=>
'Text',
'a.morphy'=>
'Text',
'a.societe'=>
'Text',
'a.address'=>
"Text",
298 '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",
299 'a.email'=>
"Text",
'a.birth'=>
"Date",
'a.statut'=>
"Status",
'a.note_public'=>
"Text",
'a.note_private'=>
"Text",
'a.datec'=>
'Date',
'a.datevalid'=>
'Date',
300 'a.tms'=>
'Date',
'a.datefin'=>
'Date',
'ta.rowid'=>
'List:adherent_type:libelle::member_type',
'ta.libelle'=>
'Text',
301 'c.rowid'=>
'Numeric',
'c.dateadh'=>
'Date',
'c.datef'=>
'Date',
'c.subscription'=>
'Numeric'
303 $this->export_entities_array[$r] = array(
304 'a.rowid'=>
'member',
'a.ref'=>
'member',
'a.civility'=>
"member",
'a.lastname'=>
"member",
'a.firstname'=>
"member",
'a.login'=>
"member",
'a.gender'=>
'member',
'a.morphy'=>
'member',
305 'a.societe'=>
'member',
'a.address'=>
"member",
'a.zip'=>
"member",
'a.town'=>
"member",
'd.nom'=>
"member",
'co.code'=>
"member",
'co.label'=>
"member",
306 'a.phone'=>
"member",
'a.phone_perso'=>
"member",
'a.phone_mobile'=>
"member",
'a.email'=>
"member",
'a.birth'=>
"member",
'a.statut'=>
"member",
307 'a.photo'=>
"member",
'a.note_public'=>
"member",
'a.note_private'=>
"member",
'a.datec'=>
'member',
'a.datevalid'=>
'member',
'a.tms'=>
'member',
308 'a.datefin'=>
'member',
'ta.rowid'=>
'member_type',
'ta.libelle'=>
'member_type',
309 'c.rowid'=>
'subscription',
'c.dateadh'=>
'subscription',
'c.datef'=>
'subscription',
'c.subscription'=>
'subscription'
312 $keyforselect =
'adherent';
313 $keyforelement =
'member';
314 $keyforaliasextra =
'extra';
315 include DOL_DOCUMENT_ROOT.
'/core/extrafieldsinexport.inc.php';
317 $this->export_sql_start[$r] =
'SELECT DISTINCT ';
318 $this->export_sql_end[$r] =
' FROM ('.MAIN_DB_PREFIX.
'adherent_type as ta, '.MAIN_DB_PREFIX.
'adherent as a)';
319 $this->export_sql_end[$r] .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'adherent_extrafields as extra ON a.rowid = extra.fk_object';
320 $this->export_sql_end[$r] .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'subscription as c ON c.fk_adherent = a.rowid';
321 $this->export_sql_end[$r] .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_departements as d ON a.state_id = d.rowid';
322 $this->export_sql_end[$r] .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_country as co ON a.country = co.rowid';
323 $this->export_sql_end[$r] .=
' WHERE a.fk_adherent_type = ta.rowid AND ta.entity IN ('.getEntity(
'member_type').
') ';
324 $this->export_dependencies_array[$r] = array(
'subscription'=>
'c.rowid');
331 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
334 $this->import_code[$r] = $this->rights_class.
'_'.$r;
335 $this->import_label[$r] =
"Members";
336 $this->import_icon[$r] = $this->picto;
337 $this->import_entities_array[$r] = array();
338 $this->import_tables_array[$r] = array(
'a'=>MAIN_DB_PREFIX.
'adherent',
'extra'=>MAIN_DB_PREFIX.
'adherent_extrafields');
339 $this->import_tables_creator_array[$r] = array(
'a'=>
'fk_user_author');
340 $this->import_fields_array[$r] = array(
341 'a.ref' =>
'MemberRef*',
342 'a.civility'=>
"UserTitle",
'a.lastname'=>
"Lastname*",
'a.firstname'=>
"Firstname",
'a.gender'=>
"Gender",
'a.login'=>
"Login*",
"a.pass"=>
"Password",
343 "a.fk_adherent_type"=>
"MemberTypeId*",
'a.morphy'=>
'MemberNature*',
'a.societe'=>
'Company',
'a.address'=>
"Address",
'a.zip'=>
"Zip",
'a.town'=>
"Town",
344 'a.state_id'=>
'StateId|StateCode',
'a.country'=>
"CountryId|CountryCode",
'a.phone'=>
"PhonePro",
'a.phone_perso'=>
"PhonePerso",
'a.phone_mobile'=>
"PhoneMobile",
345 'a.email'=>
"Email",
'a.birth'=>
"Birthday",
'a.statut'=>
"Status*",
'a.photo'=>
"Photo",
'a.note_public'=>
"NotePublic",
'a.note_private'=>
"NotePrivate",
346 'a.datec'=>
'DateCreation',
'a.datefin'=>
'DateEndSubscription'
348 if (isModEnabled(
"societe")) {
349 $this->import_fields_array[$r][
'a.fk_soc'] =
"ThirdParty";
352 $sql =
"SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX.
"extrafields WHERE type <> 'separate' AND elementtype = 'adherent' AND entity IN (0,".
$conf->entity.
")";
353 $resql = $this->db->query($sql);
355 while ($obj = $this->db->fetch_object($resql)) {
356 $fieldname =
'extra.'.$obj->name;
357 $fieldlabel = ucfirst($obj->label);
358 $this->import_fields_array[$r][$fieldname] = $fieldlabel.($obj->fieldrequired ?
'*' :
'');
362 $this->import_convertvalue_array[$r] = array(
364 'rule'=>
'getrefifauto',
366 'path'=>
"/core/modules/member/".
getDolGlobalString(
'MEMBER_ADDON',
'mod_member_simple').
'.php'
368 'a.state_id' => array(
369 'rule' =>
'fetchidfromcodeid',
370 'classfile' =>
'/core/class/cstate.class.php',
373 'dict' =>
'DictionaryStateCode'
375 'a.country' => array(
376 'rule' =>
'fetchidfromcodeid',
377 'classfile' =>
'/core/class/ccountry.class.php',
378 'class' =>
'Ccountry',
380 'dict' =>
'DictionaryCountry'
383 if (isModEnabled(
"societe")) {
384 $this->import_convertvalue_array[$r][
'a.fk_soc'] = array(
'rule'=>
'fetchidfromref',
'classfile'=>
'/societe/class/societe.class.php',
'class'=>
'Societe',
'method'=>
'fetch',
'element'=>
'ThirdParty');
386 $this->import_fieldshidden_array[$r] = array(
'extra.fk_object'=>
'lastrowid-'.MAIN_DB_PREFIX.
'adherent');
387 $this->import_regex_array[$r] = array(
388 'a.civility'=>
'code@'.MAIN_DB_PREFIX.
'c_civility',
'a.fk_adherent_type'=>
'rowid@'.MAIN_DB_PREFIX.
'adherent_type',
'a.morphy'=>
'(phy|mor)',
389 '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]$');
390 $this->import_examplevalues_array[$r] = array(
391 'a.ref'=>
"auto or MEM2010-1234",
392 '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',
393 'a.morphy'=>
'"mor" or "phy"',
'a.societe'=>
'JS company',
'a.address'=>
'21 jump street',
'a.zip'=>
'55000',
'a.town'=>
'New York',
'a.country'=>
'1',
394 '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",
397 if (isModEnabled(
"societe")) {
398 $this->import_examplevalues_array[$r][
'a.fk_soc'] =
"rowid or name";
400 $this->import_updatekeys_array[$r] = array(
'a.ref'=>
'MemberRef',
'a.login'=>
'Login');
404 $datestart =
dol_mktime(22, 0, 0, $arraydate[
'mon'], $arraydate[
'mday'], $arraydate[
'year']);
405 $this->cronjobs = array(
407 'label'=>
'SendReminderForExpiredSubscriptionTitle',
408 'jobtype'=>
'method',
'class'=>
'adherents/class/adherent.class.php',
409 'objectname'=>
'Adherent',
410 'method'=>
'sendReminderForExpiredSubscription',
411 'parameters'=>
'10;0',
412 'comment'=>
'SendReminderForExpiredSubscription',
414 'unitfrequency'=> 3600 * 24,
417 'test'=>
'$conf->adherent->enabled',
418 'datestart'=>$datestart