CRM-21733: Adding the ability to override membership temporarily until specific date
[civicrm-core.git] / CRM / Member / DAO / Membership.php
... / ...
CommitLineData
1<?php
2
3/**
4 * @package CRM
5 * @copyright CiviCRM LLC (c) 2004-2017
6 *
7 * Generated from xml/schema/CRM/Member/Membership.xml
8 * DO NOT EDIT. Generated by CRM_Core_CodeGen
9 * (GenCodeChecksum:643f191c50bbd0244e93745a929ba499)
10 */
11
12/**
13 * Database access object for the Membership entity.
14 */
15class CRM_Member_DAO_Membership extends CRM_Core_DAO {
16
17 /**
18 * Static instance to hold the table name.
19 *
20 * @var string
21 */
22 static $_tableName = 'civicrm_membership';
23
24 /**
25 * Should CiviCRM log any modifications to this table in the civicrm_log table.
26 *
27 * @var bool
28 */
29 static $_log = TRUE;
30
31 /**
32 * Membership Id
33 *
34 * @var int unsigned
35 */
36 public $id;
37
38 /**
39 * FK to Contact ID
40 *
41 * @var int unsigned
42 */
43 public $contact_id;
44
45 /**
46 * FK to Membership Type
47 *
48 * @var int unsigned
49 */
50 public $membership_type_id;
51
52 /**
53 * Beginning of initial membership period (member since...).
54 *
55 * @var date
56 */
57 public $join_date;
58
59 /**
60 * Beginning of current uninterrupted membership period.
61 *
62 * @var date
63 */
64 public $start_date;
65
66 /**
67 * Current membership period expire date.
68 *
69 * @var date
70 */
71 public $end_date;
72
73 /**
74 * @var string
75 */
76 public $source;
77
78 /**
79 * FK to Membership Status
80 *
81 * @var int unsigned
82 */
83 public $status_id;
84
85 /**
86 * Admin users may set a manual status which overrides the calculated status. When this flag is true, automated status update scripts should NOT modify status for the record.
87 *
88 * @var boolean
89 */
90 public $is_override;
91
92 /**
93 * Then end date of membership status override if 'Override until selected date' override type is selected.
94 *
95 * @var date
96 */
97 public $status_override_end_date;
98
99 /**
100 * Optional FK to Parent Membership.
101 *
102 * @var int unsigned
103 */
104 public $owner_membership_id;
105
106 /**
107 * Maximum number of related memberships (membership_type override).
108 *
109 * @var int
110 */
111 public $max_related;
112
113 /**
114 * @var boolean
115 */
116 public $is_test;
117
118 /**
119 * @var boolean
120 */
121 public $is_pay_later;
122
123 /**
124 * Conditional foreign key to civicrm_contribution_recur id. Each membership in connection with a recurring contribution carries a foreign key to the recurring contribution record. This assumes we can track these processor initiated events.
125 *
126 * @var int unsigned
127 */
128 public $contribution_recur_id;
129
130 /**
131 * The campaign for which this membership is attached.
132 *
133 * @var int unsigned
134 */
135 public $campaign_id;
136
137 /**
138 * Class constructor.
139 */
140 public function __construct() {
141 $this->__table = 'civicrm_membership';
142 parent::__construct();
143 }
144
145 /**
146 * Returns foreign keys and entity references.
147 *
148 * @return array
149 * [CRM_Core_Reference_Interface]
150 */
151 public static function getReferenceColumns() {
152 if (!isset(Civi::$statics[__CLASS__]['links'])) {
153 Civi::$statics[__CLASS__]['links'] = static ::createReferenceColumns(__CLASS__);
154 Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'contact_id', 'civicrm_contact', 'id');
155 Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'membership_type_id', 'civicrm_membership_type', 'id');
156 Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'status_id', 'civicrm_membership_status', 'id');
157 Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'owner_membership_id', 'civicrm_membership', 'id');
158 Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'contribution_recur_id', 'civicrm_contribution_recur', 'id');
159 Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'campaign_id', 'civicrm_campaign', 'id');
160 CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']);
161 }
162 return Civi::$statics[__CLASS__]['links'];
163 }
164
165 /**
166 * Returns all the column names of this table
167 *
168 * @return array
169 */
170 public static function &fields() {
171 if (!isset(Civi::$statics[__CLASS__]['fields'])) {
172 Civi::$statics[__CLASS__]['fields'] = [
173 'membership_id' => [
174 'name' => 'id',
175 'type' => CRM_Utils_Type::T_INT,
176 'title' => ts('Membership ID'),
177 'description' => 'Membership Id',
178 'required' => TRUE,
179 'import' => TRUE,
180 'where' => 'civicrm_membership.id',
181 'headerPattern' => '/^(m(embership\s)?id)$/i',
182 'dataPattern' => '',
183 'export' => TRUE,
184 'table_name' => 'civicrm_membership',
185 'entity' => 'Membership',
186 'bao' => 'CRM_Member_BAO_Membership',
187 'localizable' => 0,
188 ],
189 'membership_contact_id' => [
190 'name' => 'contact_id',
191 'type' => CRM_Utils_Type::T_INT,
192 'title' => ts('Contact ID'),
193 'description' => 'FK to Contact ID',
194 'required' => TRUE,
195 'import' => TRUE,
196 'where' => 'civicrm_membership.contact_id',
197 'headerPattern' => '/contact(.?id)?/i',
198 'dataPattern' => '/^\d+$/',
199 'export' => TRUE,
200 'table_name' => 'civicrm_membership',
201 'entity' => 'Membership',
202 'bao' => 'CRM_Member_BAO_Membership',
203 'localizable' => 0,
204 'FKClassName' => 'CRM_Contact_DAO_Contact',
205 'html' => [
206 'type' => 'EntityRef',
207 ],
208 ],
209 'membership_type_id' => [
210 'name' => 'membership_type_id',
211 'type' => CRM_Utils_Type::T_INT,
212 'title' => ts('Membership Type Id'),
213 'description' => 'FK to Membership Type',
214 'required' => TRUE,
215 'import' => TRUE,
216 'where' => 'civicrm_membership.membership_type_id',
217 'headerPattern' => '/^(m(embership\s)?type)$/i',
218 'dataPattern' => '',
219 'export' => FALSE,
220 'table_name' => 'civicrm_membership',
221 'entity' => 'Membership',
222 'bao' => 'CRM_Member_BAO_Membership',
223 'localizable' => 0,
224 'FKClassName' => 'CRM_Member_DAO_MembershipType',
225 'html' => [
226 'type' => 'Select',
227 ],
228 'pseudoconstant' => [
229 'table' => 'civicrm_membership_type',
230 'keyColumn' => 'id',
231 'labelColumn' => 'name',
232 ]
233 ],
234 'join_date' => [
235 'name' => 'join_date',
236 'type' => CRM_Utils_Type::T_DATE,
237 'title' => ts('Member Since'),
238 'description' => 'Beginning of initial membership period (member since...).',
239 'import' => TRUE,
240 'where' => 'civicrm_membership.join_date',
241 'headerPattern' => '/^join|(j(oin\s)?date)$/i',
242 'dataPattern' => '/\d{4}-?\d{2}-?\d{2}/',
243 'export' => TRUE,
244 'table_name' => 'civicrm_membership',
245 'entity' => 'Membership',
246 'bao' => 'CRM_Member_BAO_Membership',
247 'localizable' => 0,
248 'html' => [
249 'type' => 'Select Date',
250 'formatType' => 'activityDate',
251 ],
252 ],
253 'membership_start_date' => [
254 'name' => 'start_date',
255 'type' => CRM_Utils_Type::T_DATE,
256 'title' => ts('Membership Start Date'),
257 'description' => 'Beginning of current uninterrupted membership period.',
258 'import' => TRUE,
259 'where' => 'civicrm_membership.start_date',
260 'headerPattern' => '/(member(ship)?.)?start(s)?(.date$)?/i',
261 'dataPattern' => '/\d{4}-?\d{2}-?\d{2}/',
262 'export' => TRUE,
263 'table_name' => 'civicrm_membership',
264 'entity' => 'Membership',
265 'bao' => 'CRM_Member_BAO_Membership',
266 'localizable' => 0,
267 'html' => [
268 'type' => 'Select Date',
269 'formatType' => 'activityDate',
270 ],
271 ],
272 'membership_end_date' => [
273 'name' => 'end_date',
274 'type' => CRM_Utils_Type::T_DATE,
275 'title' => ts('Membership Expiration Date'),
276 'description' => 'Current membership period expire date.',
277 'import' => TRUE,
278 'where' => 'civicrm_membership.end_date',
279 'headerPattern' => '/(member(ship)?.)?end(s)?(.date$)?/i',
280 'dataPattern' => '/\d{4}-?\d{2}-?\d{2}/',
281 'export' => TRUE,
282 'table_name' => 'civicrm_membership',
283 'entity' => 'Membership',
284 'bao' => 'CRM_Member_BAO_Membership',
285 'localizable' => 0,
286 'html' => [
287 'type' => 'Select Date',
288 'formatType' => 'activityDate',
289 ],
290 ],
291 'membership_source' => [
292 'name' => 'source',
293 'type' => CRM_Utils_Type::T_STRING,
294 'title' => ts('Source'),
295 'maxlength' => 128,
296 'size' => CRM_Utils_Type::HUGE,
297 'import' => TRUE,
298 'where' => 'civicrm_membership.source',
299 'headerPattern' => '/^(member(ship?))?source$/i',
300 'dataPattern' => '',
301 'export' => TRUE,
302 'table_name' => 'civicrm_membership',
303 'entity' => 'Membership',
304 'bao' => 'CRM_Member_BAO_Membership',
305 'localizable' => 0,
306 'html' => [
307 'type' => 'Text',
308 ],
309 ],
310 'status_id' => [
311 'name' => 'status_id',
312 'type' => CRM_Utils_Type::T_INT,
313 'title' => ts('Membership Status Id'),
314 'description' => 'FK to Membership Status',
315 'required' => TRUE,
316 'import' => TRUE,
317 'where' => 'civicrm_membership.status_id',
318 'headerPattern' => '/(member(ship|).)?(status)$/i',
319 'dataPattern' => '',
320 'export' => FALSE,
321 'table_name' => 'civicrm_membership',
322 'entity' => 'Membership',
323 'bao' => 'CRM_Member_BAO_Membership',
324 'localizable' => 0,
325 'FKClassName' => 'CRM_Member_DAO_MembershipStatus',
326 'html' => [
327 'type' => 'Select',
328 ],
329 'pseudoconstant' => [
330 'table' => 'civicrm_membership_status',
331 'keyColumn' => 'id',
332 'labelColumn' => 'label',
333 ]
334 ],
335 'is_override' => [
336 'name' => 'is_override',
337 'type' => CRM_Utils_Type::T_BOOLEAN,
338 'title' => ts('Status Override'),
339 'description' => 'Admin users may set a manual status which overrides the calculated status. When this flag is true, automated status update scripts should NOT modify status for the record.',
340 'import' => TRUE,
341 'where' => 'civicrm_membership.is_override',
342 'headerPattern' => '/override$/i',
343 'dataPattern' => '',
344 'export' => TRUE,
345 'table_name' => 'civicrm_membership',
346 'entity' => 'Membership',
347 'bao' => 'CRM_Member_BAO_Membership',
348 'localizable' => 0,
349 'html' => [
350 'type' => 'CheckBox',
351 ],
352 ],
353 'status_override_end_date' => [
354 'name' => 'status_override_end_date',
355 'type' => CRM_Utils_Type::T_DATE,
356 'title' => ts('Status Override End Date'),
357 'description' => 'Then end date of membership status override if \'Override until selected date\' override type is selected.',
358 'import' => TRUE,
359 'where' => 'civicrm_membership.status_override_end_date',
360 'headerPattern' => '',
361 'dataPattern' => '',
362 'export' => TRUE,
363 'default' => 'NULL',
364 'table_name' => 'civicrm_membership',
365 'entity' => 'Membership',
366 'bao' => 'CRM_Member_BAO_Membership',
367 'localizable' => 0,
368 'html' => [
369 'type' => 'Select Date',
370 ],
371 ],
372 'owner_membership_id' => [
373 'name' => 'owner_membership_id',
374 'type' => CRM_Utils_Type::T_INT,
375 'title' => ts('Primary Member ID'),
376 'description' => 'Optional FK to Parent Membership.',
377 'export' => TRUE,
378 'where' => 'civicrm_membership.owner_membership_id',
379 'headerPattern' => '',
380 'dataPattern' => '',
381 'table_name' => 'civicrm_membership',
382 'entity' => 'Membership',
383 'bao' => 'CRM_Member_BAO_Membership',
384 'localizable' => 0,
385 'FKClassName' => 'CRM_Member_DAO_Membership',
386 ],
387 'max_related' => [
388 'name' => 'max_related',
389 'type' => CRM_Utils_Type::T_INT,
390 'title' => ts('Max Related'),
391 'description' => 'Maximum number of related memberships (membership_type override).',
392 'table_name' => 'civicrm_membership',
393 'entity' => 'Membership',
394 'bao' => 'CRM_Member_BAO_Membership',
395 'localizable' => 0,
396 'html' => [
397 'type' => 'Text',
398 ],
399 ],
400 'member_is_test' => [
401 'name' => 'is_test',
402 'type' => CRM_Utils_Type::T_BOOLEAN,
403 'title' => ts('Test'),
404 'import' => TRUE,
405 'where' => 'civicrm_membership.is_test',
406 'headerPattern' => '/(is.)?test(.member(ship)?)?/i',
407 'dataPattern' => '',
408 'export' => TRUE,
409 'table_name' => 'civicrm_membership',
410 'entity' => 'Membership',
411 'bao' => 'CRM_Member_BAO_Membership',
412 'localizable' => 0,
413 'html' => [
414 'type' => 'CheckBox',
415 ],
416 ],
417 'member_is_pay_later' => [
418 'name' => 'is_pay_later',
419 'type' => CRM_Utils_Type::T_BOOLEAN,
420 'title' => ts('Is Pay Later'),
421 'import' => TRUE,
422 'where' => 'civicrm_membership.is_pay_later',
423 'headerPattern' => '/(is.)?(pay(.)?later)$/i',
424 'dataPattern' => '',
425 'export' => TRUE,
426 'table_name' => 'civicrm_membership',
427 'entity' => 'Membership',
428 'bao' => 'CRM_Member_BAO_Membership',
429 'localizable' => 0,
430 'html' => [
431 'type' => 'CheckBox',
432 ],
433 ],
434 'contribution_recur_id' => [
435 'name' => 'contribution_recur_id',
436 'type' => CRM_Utils_Type::T_INT,
437 'title' => ts('Membership Recurring Contribution'),
438 'description' => 'Conditional foreign key to civicrm_contribution_recur id. Each membership in connection with a recurring contribution carries a foreign key to the recurring contribution record. This assumes we can track these processor initiated events.',
439 'table_name' => 'civicrm_membership',
440 'entity' => 'Membership',
441 'bao' => 'CRM_Member_BAO_Membership',
442 'localizable' => 0,
443 'FKClassName' => 'CRM_Contribute_DAO_ContributionRecur',
444 ],
445 'member_campaign_id' => [
446 'name' => 'campaign_id',
447 'type' => CRM_Utils_Type::T_INT,
448 'title' => ts('Campaign'),
449 'description' => 'The campaign for which this membership is attached.',
450 'import' => TRUE,
451 'where' => 'civicrm_membership.campaign_id',
452 'headerPattern' => '',
453 'dataPattern' => '',
454 'export' => TRUE,
455 'table_name' => 'civicrm_membership',
456 'entity' => 'Membership',
457 'bao' => 'CRM_Member_BAO_Membership',
458 'localizable' => 0,
459 'FKClassName' => 'CRM_Campaign_DAO_Campaign',
460 'html' => [
461 'type' => 'Select',
462 ],
463 'pseudoconstant' => [
464 'table' => 'civicrm_campaign',
465 'keyColumn' => 'id',
466 'labelColumn' => 'title',
467 ]
468 ],
469 ];
470 CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']);
471 }
472 return Civi::$statics[__CLASS__]['fields'];
473 }
474
475 /**
476 * Return a mapping from field-name to the corresponding key (as used in fields()).
477 *
478 * @return array
479 * Array(string $name => string $uniqueName).
480 */
481 public static function &fieldKeys() {
482 if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) {
483 Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields()));
484 }
485 return Civi::$statics[__CLASS__]['fieldKeys'];
486 }
487
488 /**
489 * Returns the names of this table
490 *
491 * @return string
492 */
493 public static function getTableName() {
494 return self::$_tableName;
495 }
496
497 /**
498 * Returns if this table needs to be logged
499 *
500 * @return bool
501 */
502 public function getLog() {
503 return self::$_log;
504 }
505
506 /**
507 * Returns the list of fields that can be imported
508 *
509 * @param bool $prefix
510 *
511 * @return array
512 */
513 public static function &import($prefix = FALSE) {
514 $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'membership', $prefix, []);
515 return $r;
516 }
517
518 /**
519 * Returns the list of fields that can be exported
520 *
521 * @param bool $prefix
522 *
523 * @return array
524 */
525 public static function &export($prefix = FALSE) {
526 $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'membership', $prefix, []);
527 return $r;
528 }
529
530 /**
531 * Returns the list of indices
532 *
533 * @param bool $localize
534 *
535 * @return array
536 */
537 public static function indices($localize = TRUE) {
538 $indices = [
539 'index_owner_membership_id' => [
540 'name' => 'index_owner_membership_id',
541 'field' => [
542 0 => 'owner_membership_id',
543 ],
544 'localizable' => FALSE,
545 'sig' => 'civicrm_membership::0::owner_membership_id',
546 ],
547 ];
548 return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices;
549 }
550
551}