Merge pull request #8669 from eileenmcnaughton/in_prog_tests
[civicrm-core.git] / tests / phpunit / CRM / Member / BAO / MembershipTest.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2016 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
13 | |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
26 */
27
28 /**
29 * Class CRM_Member_BAO_MembershipTest
30 * @group headless
31 */
32 class CRM_Member_BAO_MembershipTest extends CiviUnitTestCase {
33
34 public function setUp() {
35 parent::setUp();
36 // FIXME: something NULLs $GLOBALS['_HTML_QuickForm_registered_rules'] when the tests are ran all together
37 $GLOBALS['_HTML_QuickForm_registered_rules'] = array(
38 'required' => array('html_quickform_rule_required', 'HTML/QuickForm/Rule/Required.php'),
39 'maxlength' => array('html_quickform_rule_range', 'HTML/QuickForm/Rule/Range.php'),
40 'minlength' => array('html_quickform_rule_range', 'HTML/QuickForm/Rule/Range.php'),
41 'rangelength' => array('html_quickform_rule_range', 'HTML/QuickForm/Rule/Range.php'),
42 'email' => array('html_quickform_rule_email', 'HTML/QuickForm/Rule/Email.php'),
43 'regex' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
44 'lettersonly' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
45 'alphanumeric' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
46 'numeric' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
47 'nopunctuation' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
48 'nonzero' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
49 'callback' => array('html_quickform_rule_callback', 'HTML/QuickForm/Rule/Callback.php'),
50 'compare' => array('html_quickform_rule_compare', 'HTML/QuickForm/Rule/Compare.php'),
51 );
52
53 $this->_contactID = $this->organizationCreate();
54 $this->_membershipTypeID = $this->membershipTypeCreate(array('member_of_contact_id' => $this->_contactID));
55 // add a random number to avoid silly conflicts with old data
56 $this->_membershipStatusID = $this->membershipStatusCreate('test status' . rand(1, 1000));
57 }
58
59 /**
60 * Tears down the fixture, for example, closes a network connection.
61 * This method is called after a test is executed.
62 */
63 public function tearDown() {
64 $this->membershipTypeDelete(array('id' => $this->_membershipTypeID));
65 $this->membershipStatusDelete($this->_membershipStatusID);
66 $this->contactDelete($this->_contactID);
67
68 $this->_contactID = $this->_membershipStatusID = $this->_membershipTypeID = NULL;
69 }
70
71 public function testCreate() {
72
73 $contactId = $this->individualCreate();
74
75 $params = array(
76 'contact_id' => $contactId,
77 'membership_type_id' => $this->_membershipTypeID,
78 'join_date' => date('Ymd', strtotime('2006-01-21')),
79 'start_date' => date('Ymd', strtotime('2006-01-21')),
80 'end_date' => date('Ymd', strtotime('2006-12-21')),
81 'source' => 'Payment',
82 'is_override' => 1,
83 'status_id' => $this->_membershipStatusID,
84 );
85 $ids = array();
86 CRM_Member_BAO_Membership::create($params, $ids);
87
88 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
89 'contact_id', 'Database check for created membership.'
90 );
91
92 // Now call create() to modify an existing Membership
93
94 $params = array();
95 $params = array(
96 'contact_id' => $contactId,
97 'membership_type_id' => $this->_membershipTypeID,
98 'join_date' => date('Ymd', strtotime('2006-01-21')),
99 'start_date' => date('Ymd', strtotime('2006-01-21')),
100 'end_date' => date('Ymd', strtotime('2006-12-21')),
101 'source' => 'Payment',
102 'is_override' => 1,
103 'status_id' => $this->_membershipStatusID,
104 );
105 $ids = array(
106 'membership' => $membershipId,
107 );
108 CRM_Member_BAO_Membership::create($params, $ids);
109
110 $membershipTypeId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId,
111 'membership_type_id', 'contact_id',
112 'Database check on updated membership record.'
113 );
114 $this->assertEquals($membershipTypeId, $this->_membershipTypeID, 'Verify membership type id is fetched.');
115
116 $this->membershipDelete($membershipId);
117 $this->contactDelete($contactId);
118 }
119
120 public function testGetValues() {
121 // $this->markTestSkipped( 'causes mysterious exit, needs fixing!' );
122 // Calculate membership dates based on the current date
123 $now = time();
124 $year_from_now = $now + (365 * 24 * 60 * 60);
125 $last_month = $now - (30 * 24 * 60 * 60);
126 $year_from_last_month = $last_month + (365 * 24 * 60 * 60);
127
128 $contactId = $this->individualCreate();
129
130 $params = array(
131 'contact_id' => $contactId,
132 'membership_type_id' => $this->_membershipTypeID,
133 'join_date' => date('Ymd'),
134 'start_date' => date('Ymd'),
135 'end_date' => date('Ymd', $year_from_now),
136 'source' => 'Payment',
137 'is_override' => 1,
138 'status_id' => $this->_membershipStatusID,
139 );
140
141 $ids = array();
142 CRM_Member_BAO_Membership::create($params, $ids);
143
144 $membershipId1 = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
145 'contact_id', 'Database check for created membership.'
146 );
147
148 $params = array(
149 'contact_id' => $contactId,
150 'membership_type_id' => $this->_membershipTypeID,
151 'join_date' => date('Ymd', $last_month),
152 'start_date' => date('Ymd', $last_month),
153 'end_date' => date('Ymd', $year_from_last_month),
154 'source' => 'Source123',
155 'is_override' => 0,
156 'status_id' => $this->_membershipStatusID,
157 );
158 $ids = array();
159 CRM_Member_BAO_Membership::create($params, $ids);
160
161 $membershipId2 = $this->assertDBNotNull('CRM_Member_BAO_Membership', 'source123', 'id',
162 'source', 'Database check for created membership.'
163 );
164
165 $membership = array('contact_id' => $contactId);
166 $membershipValues = array();
167 CRM_Member_BAO_Membership::getValues($membership, $membershipValues, TRUE);
168
169 $this->assertEquals($membershipValues[$membershipId1]['membership_id'], $membershipId1, 'Verify membership record 1 is fetched.');
170
171 $this->assertEquals($membershipValues[$membershipId2]['membership_id'], $membershipId2, 'Verify membership record 2 is fetched.');
172
173 $this->membershipDelete($membershipId1);
174 $this->membershipDelete($membershipId2);
175 $this->contactDelete($contactId);
176 }
177
178 public function testRetrieve() {
179 $contactId = $this->individualCreate();
180
181 $params = array(
182 'contact_id' => $contactId,
183 'membership_type_id' => $this->_membershipTypeID,
184 'join_date' => date('Ymd', strtotime('2006-01-21')),
185 'start_date' => date('Ymd', strtotime('2006-01-21')),
186 'end_date' => date('Ymd', strtotime('2006-12-21')),
187 'source' => 'Payment',
188 'is_override' => 1,
189 'status_id' => $this->_membershipStatusID,
190 );
191 $ids = array();
192 CRM_Member_BAO_Membership::create($params, $ids);
193
194 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
195 'contact_id', 'Database check for created membership.'
196 );
197 $params = array('id' => $membershipId);
198 $values = array();
199 CRM_Member_BAO_Membership::retrieve($params, $values);
200 $this->assertEquals($values['id'], $membershipId, 'Verify membership record is retrieved.');
201
202 $this->membershipDelete($membershipId);
203 $this->contactDelete($contactId);
204 }
205
206 public function testActiveMembers() {
207 $contactId = $this->individualCreate();
208
209 $params = array(
210 'contact_id' => $contactId,
211 'membership_type_id' => $this->_membershipTypeID,
212 'join_date' => date('Ymd', strtotime('2006-01-21')),
213 'start_date' => date('Ymd', strtotime('2006-01-21')),
214 'end_date' => date('Ymd', strtotime('2006-12-21')),
215 'source' => 'Payment',
216 'is_override' => 1,
217 'status_id' => $this->_membershipStatusID,
218 );
219 $ids = array();
220 CRM_Member_BAO_Membership::create($params, $ids);
221
222 $membershipId1 = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
223 'contact_id', 'Database check for created membership.'
224 );
225
226 $params = array('id' => $membershipId1);
227 $values1 = array();
228 CRM_Member_BAO_Membership::retrieve($params, $values1);
229 $membership = array($membershipId1 => $values1);
230
231 $params = array(
232 'contact_id' => $contactId,
233 'membership_type_id' => $this->_membershipTypeID,
234 'join_date' => date('Ymd', strtotime('2006-01-21')),
235 'start_date' => date('Ymd', strtotime('2006-01-21')),
236 'end_date' => date('Ymd', strtotime('2006-12-21')),
237 'source' => 'PaySource',
238 'is_override' => 1,
239 'status_id' => $this->_membershipStatusID,
240 );
241 $ids = array();
242 CRM_Member_BAO_Membership::create($params, $ids);
243
244 $membershipId2 = $this->assertDBNotNull('CRM_Member_BAO_Membership', 'PaySource', 'id',
245 'source', 'Database check for created membership.'
246 );
247
248 $params = array('id' => $membershipId2);
249 $values2 = array();
250 CRM_Member_BAO_Membership::retrieve($params, $values2);
251 $membership[$membershipId2] = $values2;
252
253 $activeMembers = CRM_Member_BAO_Membership::activeMembers($membership);
254 $inActiveMembers = CRM_Member_BAO_Membership::activeMembers($membership, 'inactive');
255
256 $this->assertEquals($activeMembers[$membershipId1]['id'], $membership[$membershipId1]['id'], 'Verify active membership record is retrieved.');
257 $this->assertEquals($activeMembers[$membershipId2]['id'], $membership[$membershipId2]['id'], 'Verify active membership record is retrieved.');
258
259 $this->assertEquals(0, count($inActiveMembers), 'Verify No inactive membership record is retrieved.');
260
261 $this->membershipDelete($membershipId1);
262 $this->membershipDelete($membershipId2);
263 $this->contactDelete($contactId);
264 }
265
266 public function testDeleteMembership() {
267 $contactId = $this->individualCreate();
268
269 $params = array(
270 'contact_id' => $contactId,
271 'membership_type_id' => $this->_membershipTypeID,
272 'join_date' => date('Ymd', strtotime('2006-01-21')),
273 'start_date' => date('Ymd', strtotime('2006-01-21')),
274 'end_date' => date('Ymd', strtotime('2006-12-21')),
275 'source' => 'Payment',
276 'is_override' => 1,
277 'status_id' => $this->_membershipStatusID,
278 );
279 $ids = array();
280 CRM_Member_BAO_Membership::create($params, $ids);
281
282 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
283 'contact_id', 'Database check for created membership.'
284 );
285 CRM_Member_BAO_Membership::del($membershipId);
286
287 $this->assertDBNull('CRM_Member_BAO_Membership', $contactId, 'id',
288 'contact_id', 'Database check for deleted membership.'
289 );
290 $this->contactDelete($contactId);
291 }
292
293 public function testGetContactMembership() {
294 $contactId = $this->individualCreate();
295
296 $params = array(
297 'contact_id' => $contactId,
298 'membership_type_id' => $this->_membershipTypeID,
299 'join_date' => date('Ymd', strtotime('2006-01-21')),
300 'start_date' => date('Ymd', strtotime('2006-01-21')),
301 'end_date' => date('Ymd', strtotime('2006-12-21')),
302 'source' => 'Payment',
303 'is_override' => 1,
304 'status_id' => $this->_membershipStatusID,
305 );
306 $ids = array();
307 CRM_Member_BAO_Membership::create($params, $ids);
308
309 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
310 'contact_id', 'Database check for created membership.'
311 );
312
313 $membership = CRM_Member_BAO_Membership::getContactMembership($contactId, $this->_membershipTypeID, FALSE);
314
315 $this->assertEquals($membership['id'], $membershipId, 'Verify membership record is retrieved.');
316
317 $this->membershipDelete($membershipId);
318 $this->contactDelete($contactId);
319 }
320
321
322 /**
323 * Get the contribution.
324 * page id from the membership record
325 */
326 public function testgetContributionPageId() {
327 $contactId = $this->individualCreate();
328
329 $params = array(
330 'contact_id' => $contactId,
331 'membership_type_id' => $this->_membershipTypeID,
332 'join_date' => date('Ymd', strtotime('2006-01-21')),
333 'start_date' => date('Ymd', strtotime('2006-01-21')),
334 'end_date' => date('Ymd', strtotime('2006-12-21')),
335 'source' => 'Payment',
336 'is_override' => 1,
337 'status_id' => $this->_membershipStatusID,
338 );
339 $ids = array();
340 CRM_Member_BAO_Membership::create($params, $ids);
341
342 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
343 'contact_id', 'Database check for created membership.'
344 );
345 $membership[$membershipId]['renewPageId'] = CRM_Member_BAO_Membership::getContributionPageId($membershipId);
346
347 $this->membershipDelete($membershipId);
348 $this->contactDelete($contactId);
349 }
350
351 /**
352 * Get membership joins/renewals
353 * for a specified membership
354 * type.
355 */
356 public function testgetMembershipStarts() {
357 $contactId = $this->individualCreate();
358
359 $params = array(
360 'contact_id' => $contactId,
361 'membership_type_id' => $this->_membershipTypeID,
362 'join_date' => date('Ymd', strtotime('2006-01-21')),
363 'start_date' => date('Ymd', strtotime('2006-01-21')),
364 'end_date' => date('Ymd', strtotime('2006-12-21')),
365 'source' => 'Payment',
366 'is_override' => 1,
367 'status_id' => $this->_membershipStatusID,
368 );
369 $ids = array();
370 CRM_Member_BAO_Membership::create($params, $ids);
371
372 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
373 'contact_id', 'Database check for created membership.'
374 );
375 $yearStart = date('Y') . '0101';
376 $currentDate = date('Ymd');
377 CRM_Member_BAO_Membership::getMembershipStarts($this->_membershipTypeID, $yearStart, $currentDate);
378
379 $this->membershipDelete($membershipId);
380 $this->contactDelete($contactId);
381 }
382
383 /**
384 * Get a count of membership for a specified membership type,
385 * optionally for a specified date.
386 */
387 public function testGetMembershipCount() {
388 $contactId = $this->individualCreate();
389
390 $params = array(
391 'contact_id' => $contactId,
392 'membership_type_id' => $this->_membershipTypeID,
393 'join_date' => date('Ymd', strtotime('2006-01-21')),
394 'start_date' => date('Ymd', strtotime('2006-01-21')),
395 'end_date' => date('Ymd', strtotime('2006-12-21')),
396 'source' => 'Payment',
397 'is_override' => 1,
398 'status_id' => $this->_membershipStatusID,
399 );
400 $ids = array();
401 CRM_Member_BAO_Membership::create($params, $ids);
402
403 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
404 'contact_id', 'Database check for created membership.'
405 );
406 $currentDate = date('Ymd');
407 $test = 0;
408 CRM_Member_BAO_Membership::getMembershipCount($this->_membershipTypeID, $currentDate, $test);
409
410 $this->membershipDelete($membershipId);
411 $this->contactDelete($contactId);
412 }
413
414
415 /**
416 * Take sort name of contact during
417 * Update multiple memberships
418 */
419 public function testsortName() {
420 $contactId = Contact::createIndividual();
421
422 $params = array(
423 'contact_id' => $contactId,
424 'membership_type_id' => $this->_membershipTypeID,
425 'join_date' => date('Ymd', strtotime('2006-01-21')),
426 'start_date' => date('Ymd', strtotime('2006-01-21')),
427 'end_date' => date('Ymd', strtotime('2006-12-21')),
428 'source' => 'Payment',
429 'is_override' => 1,
430 'status_id' => $this->_membershipStatusID,
431 );
432 $ids = array();
433
434 CRM_Member_BAO_Membership::create($params, $ids);
435
436 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
437 'contact_id', 'Database check for created membership.'
438 );
439
440 CRM_Member_BAO_Membership::sortName($membershipId);
441
442 $this->assertDBCompareValue('CRM_Contact_DAO_Contact', $contactId, 'sort_name', 'id', 'Doe, John',
443 'Database check for sort name record.'
444 );
445
446 $this->membershipDelete($membershipId);
447 $this->contactDelete($contactId);
448 }
449
450 /**
451 * Delete related memberships.
452 */
453 public function testdeleteRelatedMemberships() {
454 $contactId = Contact::createIndividual();
455
456 $params = array(
457 'contact_id' => $contactId,
458 'membership_type_id' => $this->_membershipTypeID,
459 'join_date' => date('Ymd', strtotime('2006-01-21')),
460 'start_date' => date('Ymd', strtotime('2006-01-21')),
461 'end_date' => date('Ymd', strtotime('2006-12-21')),
462 'source' => 'Payment',
463 'is_override' => 1,
464 'status_id' => $this->_membershipStatusID,
465 );
466 $ids = array();
467
468 CRM_Member_BAO_Membership::create($params, $ids);
469
470 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
471 'contact_id', 'Database check for created membership.'
472 );
473
474 CRM_Member_BAO_Membership::deleteRelatedMemberships($membershipId);
475
476 $this->membershipDelete($membershipId);
477 $this->contactDelete($contactId);
478 }
479
480 /**
481 * Renew membership with change in membership type.
482 */
483 public function testRenewMembership() {
484 $contactId = Contact::createIndividual();
485 $joinDate = $startDate = date("Ymd", strtotime(date("Ymd") . " -6 month"));
486 $endDate = date("Ymd", strtotime($joinDate . " +1 year -1 day"));
487 $params = array(
488 'contact_id' => $contactId,
489 'membership_type_id' => $this->_membershipTypeID,
490 'join_date' => $joinDate,
491 'start_date' => $startDate,
492 'end_date' => $endDate,
493 'source' => 'Payment',
494 'is_override' => 1,
495 'status_id' => $this->_membershipStatusID,
496 );
497 $ids = array();
498 $membership = CRM_Member_BAO_Membership::create($params, $ids);
499 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
500 'contact_id', 'Database check for created membership.'
501 );
502
503 $this->assertDBNotNull('CRM_Member_BAO_MembershipLog',
504 $membership->id,
505 'id',
506 'membership_id',
507 'Database checked on membershiplog record.'
508 );
509
510 // this is a test and we dont want qfKey generation / validation
511 // easier to suppress it, than change core code
512 $config = CRM_Core_Config::singleton();
513 $config->keyDisable = TRUE;
514
515 $isTestMembership = 0;
516 list($MembershipRenew) = CRM_Member_BAO_Membership::renewMembership(
517 $contactId,
518 $this->_membershipTypeID,
519 $isTestMembership,
520 NULL,
521 NULL,
522 NULL,
523 1,
524 FALSE,
525 NULL,
526 NULL,
527 FALSE,
528 NULL,
529 NULL
530 );
531 $endDate = date("Y-m-d", strtotime($membership->end_date . " +1 year"));
532
533 $this->assertDBNotNull('CRM_Member_BAO_MembershipLog',
534 $MembershipRenew->id,
535 'id',
536 'membership_id',
537 'Database checked on membershiplog record.'
538 );
539 $this->assertEquals($this->_membershipTypeID, $MembershipRenew->membership_type_id, 'Verify membership type is changed during renewal.');
540 $this->assertEquals($endDate, $MembershipRenew->end_date, 'Verify correct end date is calculated after membership renewal');
541
542 $this->membershipDelete($membershipId);
543 $this->contactDelete($contactId);
544 }
545
546 /**
547 * Renew stale membership.
548 */
549 public function testStaleMembership() {
550 $statusId = 3;
551 $contactId = Contact::createIndividual();
552 $joinDate = $startDate = date("Ymd", strtotime(date("Ymd") . " -1 year -15 days"));
553 $endDate = date("Ymd", strtotime($joinDate . " +1 year -1 day"));
554 $params = array(
555 'contact_id' => $contactId,
556 'membership_type_id' => $this->_membershipTypeID,
557 'join_date' => $joinDate,
558 'start_date' => $startDate,
559 'end_date' => $endDate,
560 'source' => 'Payment',
561 'status_id' => $statusId,
562 );
563
564 $ids = array();
565 $membership = CRM_Member_BAO_Membership::create($params, $ids);
566
567 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
568 'contact_id', 'Database check for created membership.'
569 );
570
571 $this->assertEquals($membership->status_id, $statusId, 'Verify correct status id is calculated.');
572 $this->assertEquals($membership->membership_type_id, $this->_membershipTypeID,
573 'Verify correct membership type id.'
574 );
575
576 //verify all dates.
577 $dates = array(
578 'startDate' => 'start_date',
579 'joinDate' => 'join_date',
580 'endDate' => 'end_date',
581 );
582
583 foreach ($dates as $date => $dbDate) {
584 $this->assertEquals($membership->$dbDate, $$date,
585 "Verify correct {$date} is present."
586 );
587 }
588
589 $this->assertDBNotNull('CRM_Member_BAO_MembershipLog',
590 $membership->id,
591 'id',
592 'membership_id',
593 'Database checked on membershiplog record.'
594 );
595
596 // this is a test and we dont want qfKey generation / validation
597 // easier to suppress it, than change core code
598 $config = CRM_Core_Config::singleton();
599 $config->keyDisable = TRUE;
600
601 $membershipRenewal = new CRM_Core_Form();
602 $membershipRenewal->controller = new CRM_Core_Controller();
603 list($MembershipRenew) = CRM_Member_BAO_Membership::renewMembership(
604 $contactId,
605 $this->_membershipTypeID,
606 FALSE,
607 $membershipRenewal,
608 NULL,
609 NULL,
610 NULL,
611 1,
612 NULL,
613 NULL,
614 NULL,
615 FALSE,
616 NULL
617 );
618
619 $this->assertDBNotNull('CRM_Member_BAO_MembershipLog',
620 $MembershipRenew->id,
621 'id',
622 'membership_id',
623 'Database checked on membershiplog record.'
624 );
625
626 $this->membershipDelete($membershipId);
627 $this->contactDelete($contactId);
628 }
629
630 }