Merge pull request #14026 from seamuslee001/5.13
[civicrm-core.git] / sql / GenerateReportData.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
457d9819 4 | CiviCRM version 5 |
6a488035 5 +--------------------------------------------------------------------+
6b83d5bd 6 | Copyright CiviCRM LLC (c) 2004-2019 |
6a488035
TO
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 +--------------------------------------------------------------------+
4e0e6e39 26 */
6a488035
TO
27
28/**
29 *
30 * @package CRM
6b83d5bd 31 * @copyright CiviCRM LLC (c) 2004-2019
6a488035
TO
32 * $Id$
33 *
34 */
35
36/*******************************************************
37 * This class generates data for the schema located in Contact.sql
38 *
39 * each public method generates data for the concerned table.
40 * so for example the addContactDomain method generates and adds
41 * data to the contact_domain table
42 *
43 * Data generation is a bit tricky since the data generated
44 * randomly in one table could be used as a FKEY in another
45 * table.
46 *
47 * In order to ensure that a randomly generated FKEY matches
48 * a field in the referened table, the field in the referenced
49 * table is always generated linearly.
50 *
51 *
52 *
53 *
54 * Some numbers
55 *
56 * Domain ID's - 1 to NUM_DOMAIN
57 *
58 * Context - 3/domain
59 *
60 * Contact - 1 to NUM_CONTACT
61 * 75% - Individual
62 * 15% - Household
63 * 10% - Organization
64 *
65 * Contact to Domain distribution should be equal.
66 *
67 *
68 * Contact Individual = 1 to 0.75*NUM_CONTACT
69 *
70 * Contact Household = 0.75*NUM_CONTACT to 0.9*NUM_CONTACT
71 *
72 * Contact Organization = 0.9*NUM_CONTACT to NUM_CONTACT
73 *
74 * Contact Location = 15% for Households, 10% for Organizations, (75-(15*4))% for Individuals.
75 * (Assumption is that each household contains 4 individuals)
76 *
77 *******************************************************/
78
79/*******************************************************
80 *
81 * Note: implication of using of mt_srand(1) in constructor
82 * The data generated will be done in a consistent manner
83 * so as to give the same data during each run (but this
84 * would involve populating the entire db at one go - since
85 * mt_srand(1) is in the constructor, if one needs to be able
86 * to get consistent random numbers then the mt_srand(1) shld
87 * be in each function that adds data to each table.
88 *
89 *******************************************************/
90
91
92require_once '../civicrm.config.php';
93
94require_once 'CRM/Core/Config.php';
95require_once 'CRM/Core/Error.php';
96require_once 'CRM/Core/I18n.php';
97
98require_once 'CRM/Core/DAO/Address.php';
99require_once 'CRM/Core/DAO.php';
100require_once 'CRM/Core/DAO/Phone.php';
101require_once 'CRM/Core/DAO/Email.php';
102require_once 'CRM/Core/DAO/EntityTag.php';
103require_once 'CRM/Core/DAO/Note.php';
104require_once 'CRM/Core/DAO/Domain.php';
105
106require_once 'CRM/Contact/DAO/Group.php';
107require_once 'CRM/Contact/DAO/GroupContact.php';
108require_once 'CRM/Contact/DAO/SubscriptionHistory.php';
109require_once 'CRM/Contact/DAO/Contact.php';
110require_once 'CRM/Contact/DAO/Relationship.php';
111require_once 'CRM/Event/DAO/Participant.php';
112require_once 'CRM/Contribute/DAO/ContributionSoft.php';
113require_once 'CRM/Member/DAO/MembershipPayment.php';
627456b5
EM
114
115/**
116 * Class CRM_GCD
117 */
6a488035
TO
118class CRM_GCD {
119
120 /*******************************************************
121 * constants
122 *******************************************************/
7da04cde
TO
123 const DATA_FILENAME = "sample_data.xml";
124 const NUM_DOMAIN = 1;
125 const NUM_CONTACT = 5000;
126 const NUM_CONTRIBUTION = 2000;
127 const NUM_MEMBERSHIP = 2000;
128 const NUM_PARTICIPANT = 2000;
129 const INDIVIDUAL_PERCENT = 75;
130 const HOUSEHOLD_PERCENT = 15;
131 const ORGANIZATION_PERCENT = 10;
132 const NUM_INDIVIDUAL_PER_HOUSEHOLD = 4;
133 const NUM_ACTIVITY = 150;
6a488035
TO
134
135 // relationship types from the table crm_relationship_type
7da04cde
TO
136 const CHILD_OF = 1;
137 const SPOUSE_OF = 2;
138 const SIBLING_OF = 3;
139 const HEAD_OF_HOUSEHOLD = 6;
140 const MEMBER_OF_HOUSEHOLD = 7;
6a488035
TO
141
142
143 // location types from the table crm_location_type
7da04cde
TO
144 const HOME = 1;
145 const WORK = 2;
146 const MAIN = 3;
147 const OTHER = 4;
148 const ADD_TO_DB = TRUE;
6a488035 149 //const ADD_TO_DB=FALSE;
7da04cde 150 const DEBUG_LEVEL = 1;
6a488035
TO
151
152 /*********************************
153 * private members
154 *********************************/
155
156 // enum's from database
157 private $preferredCommunicationMethod = array('1', '2', '3', '4', '5');
158 private $contactType = array('Individual', 'Household', 'Organization');
159 private $phoneType = array('1', '2', '3', '4');
160
161 // customizable enums (foreign keys)
162 private $prefix = array(1 => 'Mrs', 2 => 'Ms', 3 => 'Mr', 4 => 'Dr');
163 private $suffix = array(1 => 'Jr', 2 => 'Sr');
164 private $gender = array(1 => 'Female', 2 => 'Male');
165 private $greetingType = array(1 => 'Dear [first]', 2 => 'Dear [prefix] [first] [last]', 3 => 'Dear [prefix] [last]');
166
167 // store domain id's
168 private $domain = array();
169
170 // store contact id's
171 private $contact = array();
172 private $individual = array();
173 private $household = array();
174 private $organization = array();
175
176
177 // store names, firstnames, street 1, street2
178 private $firstName = array();
179 private $lastName = array();
180 private $streetName = array();
181 private $supplementalAddress1 = array();
182 private $city = array();
183 private $state = array();
184 private $country = array();
185 private $addressDirection = array();
186 private $streetType = array();
187 private $emailDomain = array();
188 private $emailTLD = array();
189 private $organizationName = array();
190 private $organizationField = array();
191 private $organizationType = array();
192 private $group = array();
193 private $note = array();
194 private $activity_type = array();
195 private $module = array();
196 private $callback = array();
197 private $party_registration = array();
198 private $degree = array();
199 private $school = array();
200
201 // stores the strict individual id and household id to individual id mapping
202 private $strictIndividual = array();
203 private $householdIndividual = array();
204
205 // sample data in xml format
206 private $sampleData = NULL;
207
208 // private vars
209 private $numIndividual = 0;
210 private $numHousehold = 0;
211 private $numOrganization = 0;
212 private $numStrictIndividual = 0;
213
214 private $CSC = array(
4e0e6e39 215 // united states
6a488035
TO
216 1228 => array(
217 // california
218 1004 => array('San Francisco', 'Los Angeles', 'Palo Alto'),
219 // new york
220 1031 => array('New York', 'Albany'),
221 ),
4e0e6e39 222 // india
6a488035
TO
223 1101 => array(
224 // maharashtra
225 1113 => array('Mumbai', 'Pune', 'Nasik'),
226 // karnataka
227 1114 => array('Bangalore', 'Mangalore', 'Udipi'),
228 ),
4e0e6e39 229 // poland
6a488035
TO
230 1172 => array(
231 // mazowieckie
232 1115 => array('Warszawa', 'PÅ‚ock'),
233 // pomorskie
234 1116 => array('Gdańsk', 'Gdynia'),
235 ),
236 );
237
238 private $groupMembershipStatus = array('Added', 'Removed', 'Pending');
239 private $subscriptionHistoryMethod = array('Admin', 'Email');
240
241 /*********************************
242 * private methods
257e7666
EM
243 ********************************
244 * @param int $size
245 * @return string
246 */
6a488035 247
4e0e6e39
DG
248 /**
249 * Get a randomly generated string.
250 *
251 * @param int $size
252 */
6a488035
TO
253 private function _getRandomString($size = 32) {
254 $string = "";
255
256 // get an ascii code for each character
257 for ($i = 0; $i < $size; $i++) {
258 $random_int = mt_rand(65, 122);
259 if (($random_int < 97) && ($random_int > 90)) {
260 // if ascii code between 90 and 97 substitute with space
261 $random_int = 32;
262 }
263 $random_char = chr($random_int);
264 $string .= $random_char;
265 }
266 return $string;
267 }
268
627456b5
EM
269 /**
270 * @return string
271 */
6a488035
TO
272 private function _getRandomChar() {
273 return chr(mt_rand(65, 90));
274 }
275
627456b5
EM
276 /**
277 * @return int
278 */
6a488035
TO
279 private function getRandomBoolean() {
280 return mt_rand(0, 1);
281 }
282
627456b5
EM
283 /**
284 * @param $array1
285 *
286 * @return mixed
287 */
6a488035
TO
288 private function _getRandomElement(&$array1) {
289 return $array1[mt_rand(1, count($array1)) - 1];
290 }
291
627456b5
EM
292 /**
293 * @param $array1
294 *
295 * @return int
296 */
6a488035
TO
297 private function _getRandomIndex(&$array1) {
298 return mt_rand(1, count($array1));
299 }
300
301
302 // country state city combo
627456b5
EM
303 /**
304 * @return array
305 */
6a488035
TO
306 private function _getRandomCSC() {
307 $array1 = array();
308
309 // $c = array_rand($this->CSC);
310 $c = 1228;
311
312 // the state array now
313 $s = array_rand($this->CSC[$c]);
314
315 // the city
316 $ci = array_rand($this->CSC[$c][$s]);
317 $city = $this->CSC[$c][$s][$ci];
318
319 $array1[] = $c;
320 $array1[] = $s;
321 $array1[] = $city;
322
323 return $array1;
324 }
325
326 /**
327 * Generate a random date.
328 *
329 * If both $startDate and $endDate are defined generate
330 * date between them.
331 *
332 * If only startDate is specified then date generated is
333 * between startDate + 1 year.
334 *
335 * if only endDate is specified then date generated is
336 * between endDate - 1 year.
337 *
338 * if none are specified - date is between today - 1year
339 * and today
340 *
341 * @param int $startDate Start Date in Unix timestamp
342 * @param int $endDate End Date in Unix timestamp
343 * @access private
344 *
345 * @return string randomly generated date in the format "Ymd"
346 *
347 */
348 private function _getRandomDate($startDate = 0, $endDate = 0) {
349
350 // number of seconds per year
351 // $numSecond = 31536000;
352 // number of seconds for 2 year
353 $numSecond = 63072000;
354
338812fd 355 $dateFormat = "YmdHis";
6a488035
TO
356 $today = time();
357
358 // both are defined
359 if ($startDate && $endDate) {
360 return date($dateFormat, mt_rand($startDate, $endDate));
361 }
362
363 // only startDate is defined
364 if ($startDate) {
365 // $nextYear = mktime(0, 0, 0, date("m", $startDate), date("d", $startDate), date("Y")+1);
366 return date($dateFormat, mt_rand($startDate, $startDate + $numSecond));
367 }
368
369 // only endDate is defined
370 if ($startDate) {
371 return date($dateFormat, mt_rand($endDate - $numSecond, $endDate));
372 }
373
374 // none are defined
375 return date($dateFormat, mt_rand($today - $numSecond, $today));
376 }
377
378
379 // insert data into db's
627456b5
EM
380 /**
381 * @param $dao
382 */
6a488035
TO
383 private function _insert(&$dao) {
384 if (self::ADD_TO_DB) {
385 if (!$dao->insert()) {
fcf908c6 386 echo "ERROR INSERT: " . mysqli_error($dao->getConnection()->connection) . "\n";
6a488035
TO
387 print_r($dao);
388 exit(1);
389 }
390 }
391 }
392
393 // update data into db's
627456b5
EM
394 /**
395 * @param $dao
396 */
6a488035
TO
397 private function _update($dao) {
398 if (self::ADD_TO_DB) {
399 if (!$dao->update()) {
fcf908c6 400 echo "ERROR UPDATE: " . mysqli_error($dao->getConnection()->connection) . "\n";
6a488035
TO
401 print_r($dao);
402 exit(1);
403 }
404 }
405 }
406
407 /**
408 * Insert a note
409 *
410 * Helper function which randomly populates "note" and
411 * "date_modified" and inserts it.
412 *
4e0e6e39 413 * @param $note
6a488035
TO
414 * @access private
415 *
6a488035
TO
416 */
417 private function _insertNote($note) {
418 $note->note = $this->_getRandomElement($this->note);
419 $note->modified_date = $this->_getRandomDate();
420 $this->_insert($note);
421 }
422
4e0e6e39 423 /**
6a488035
TO
424 *
425 * Start of public functions
426 *
4e0e6e39
DG
427 */
428 public function __construct() {
6a488035
TO
429 // initialize all the vars
430 $this->numIndividual = self::INDIVIDUAL_PERCENT * self::NUM_CONTACT / 100;
431 $this->numHousehold = self::HOUSEHOLD_PERCENT * self::NUM_CONTACT / 100;
432 $this->numOrganization = self::ORGANIZATION_PERCENT * self::NUM_CONTACT / 100;
433 $this->numStrictIndividual = $this->numIndividual - ($this->numHousehold * self::NUM_INDIVIDUAL_PER_HOUSEHOLD);
434 }
435
436 public function parseDataFile() {
437
438 $sampleData = simplexml_load_file(self::DATA_FILENAME);
439
440 // first names
441 foreach ($sampleData->first_names->first_name as $first_name) {
442 $this->firstName[] = trim($first_name);
443 }
444
445 // last names
446 foreach ($sampleData->last_names->last_name as $last_name) {
447 $this->lastName[] = trim($last_name);
448 }
449
450 // street names
451 foreach ($sampleData->street_names->street_name as $street_name) {
452 $this->streetName[] = trim($street_name);
453 }
454
455 // supplemental address 1
456 foreach ($sampleData->supplemental_addresses_1->supplemental_address_1 as $supplemental_address_1) {
457 $this->supplementalAddress1[] = trim($supplemental_address_1);
458 }
459
460 // cities
461 foreach ($sampleData->cities->city as $city) {
462 $this->city[] = trim($city);
463 }
464
465 // address directions
466 foreach ($sampleData->address_directions->address_direction as $address_direction) {
467 $this->addressDirection[] = trim($address_direction);
468 }
469
470 // street types
471 foreach ($sampleData->street_types->street_type as $street_type) {
472 $this->streetType[] = trim($street_type);
473 }
474
475 // email domains
476 foreach ($sampleData->email_domains->email_domain as $email_domain) {
477 $this->emailDomain[] = trim($email_domain);
478 }
479
480 // email top level domain
481 foreach ($sampleData->email_tlds->email_tld as $email_tld) {
482 $this->emailTLD[] = trim($email_tld);
483 }
484
485 // organization name
486 foreach ($sampleData->organization_names->organization_name as $organization_name) {
487 $this->organization_name[] = trim($organization_name);
488 }
489
490 // organization field
491 foreach ($sampleData->organization_fields->organization_field as $organization_field) {
492 $this->organizationField[] = trim($organization_field);
493 }
494
495 // organization type
496 foreach ($sampleData->organization_types->organization_type as $organization_type) {
497 $this->organizationType[] = trim($organization_type);
498 }
499
500 // group
501 foreach ($sampleData->groups->group as $group) {
502 $this->group[] = trim($group);
503 }
504
505 // notes
506 foreach ($sampleData->notes->note as $note) {
507 $this->note[] = trim($note);
508 }
509
510 // activity type
511 foreach ($sampleData->activity_types->activity_type as $activity_type) {
512 $this->activity_type[] = trim($activity_type);
513 }
514
6a488035
TO
515 // module
516 foreach ($sampleData->modules->module as $module) {
517 $this->module[] = trim($module);
518 }
519
520 // callback
521 foreach ($sampleData->callbacks->callback as $callback) {
522 $this->callback[] = trim($callback);
523 }
524
525 // custom data - party registration
526 foreach ($sampleData->party_registrations->party_registration as $party_registration) {
527 $this->party_registration[] = trim($party_registration);
528 }
529
530 // custom data - degrees
531 foreach ($sampleData->degrees->degree as $degree) {
532 $this->degree[] = trim($degree);
533 }
534
535 // custom data - schools
536 foreach ($sampleData->schools->school as $school) {
537 $this->school[] = trim($school);
538 }
539
540 // custom data - issue
541 foreach ($sampleData->issue->status as $status) {
542 $this->issue[] = trim($status);
543 }
544
545 // custom data - gotv
546 require_once 'CRM/Core/BAO/CustomOption.php';
547 foreach ($sampleData->gotv->status as $status) {
548 $this->gotv[] = CRM_Core_DAO::VALUE_SEPARATOR . trim($status) . CRM_Core_DAO::VALUE_SEPARATOR;
549 }
550
551 // custom data - marital_status
552 foreach ($sampleData->marital_status->status as $status) {
553 $this->marital_status[] = trim($status);
554 }
555 }
556
627456b5
EM
557 /**
558 * @param $id
559 *
560 * @return string
561 */
6a488035
TO
562 public function getContactType($id) {
563 if (in_array($id, $this->individual)) {
564 return 'Individual';
565 }
566 if (in_array($id, $this->household)) {
567 return 'Household';
568 }
569 if (in_array($id, $this->organization)) {
570 return 'Organization';
571 }
572 }
573
574
575 public function initDB() {
576 $config = CRM_Core_Config::singleton();
577 }
578
4e0e6e39 579 /**
6a488035
TO
580 *
581 * this function creates arrays for the following
582 *
583 * domain id
584 * contact id
585 * contact_location id
586 * contact_contact_location id
587 * contact_email uuid
588 * contact_phone_uuid
589 * contact_instant_message uuid
590 * contact_relationship uuid
591 * contact_task uuid
592 * contact_note uuid
593 *
4e0e6e39 594 */
6a488035
TO
595 public function initID() {
596
597 // may use this function in future if needed to get
598 // a consistent pattern of random numbers.
599
600 // get the domain and contact id arrays
601 $this->domain = range(1, self::NUM_DOMAIN);
602 shuffle($this->domain);
603 $this->contact = range(2, self::NUM_CONTACT + 1);
604 shuffle($this->contact);
605
606 // get the individual, household and organizaton contacts
607 $offset = 0;
608 $this->individual = array_slice($this->contact, $offset, $this->numIndividual);
609 $offset += $this->numIndividual;
610 $this->household = array_slice($this->contact, $offset, $this->numHousehold);
611 $offset += $this->numHousehold;
612 $this->organization = array_slice($this->contact, $offset, $this->numOrganization);
613
614 // get the strict individual contacts (i.e individual contacts not belonging to any household)
615 $this->strictIndividual = array_slice($this->individual, 0, $this->numStrictIndividual);
616
617 // get the household to individual mapping array
618 $this->householdIndividual = array_diff($this->individual, $this->strictIndividual);
619 $this->householdIndividual = array_chunk($this->householdIndividual, self::NUM_INDIVIDUAL_PER_HOUSEHOLD);
620 $this->householdIndividual = array_combine($this->household, $this->householdIndividual);
621 }
622
4e0e6e39 623 /**
6a488035
TO
624 *
625 * addDomain()
626 *
627 * This method adds NUM_DOMAIN domains and then adds NUM_REVISION
628 * revisions for each domain with the latest revision being the last one..
629 *
4e0e6e39 630 */
6a488035
TO
631 public function addDomain() {
632
633 /* Add a location for domain 1 */
634
635 // FIXME FOR NEW LOCATION BLOCK STRUCTURE
636 // $this->_addLocation(self::MAIN, 1, true);
637
638 $domain = new CRM_Core_DAO_Domain();
639 for ($id = 2; $id <= self::NUM_DOMAIN; $id++) {
640 // domain name is pretty simple. it is "Domain $id"
641 $domain->name = "Domain $id";
642 $domain->description = "Description $id";
643 $domain->contact_name = $this->randomName();
644
645 // insert domain
646 $this->_insert($domain);
647 // FIXME FOR NEW LOCATION BLOCK STRUCTURE
648 // $this->_addLocation(self::MAIN, $id, true);
649 }
650 }
651
627456b5
EM
652 /**
653 * @return string
654 */
6a488035
TO
655 public function randomName() {
656 $prefix = $this->_getRandomIndex($this->prefix);
657 $first_name = ucfirst($this->_getRandomElement($this->firstName));
658 $middle_name = ucfirst($this->_getRandomChar());
659 $last_name = ucfirst($this->_getRandomElement($this->lastName));
660 $suffix = $this->_getRandomIndex($this->suffix);
661
662 return $this->prefix[$prefix] . " $first_name $middle_name $last_name " . $this->suffix[$suffix];
663 }
664
4e0e6e39 665 /**
6a488035
TO
666 *
667 * addContact()
668 *
669 * This method adds data to the contact table
670 *
671 * id - from $contact
672 * contact_type 'Individual' 'Household' 'Organization'
673 * preferred_communication (random 1 to 3)
674 *
4e0e6e39 675 */
6a488035
TO
676 public function addContact() {
677
678 // add contacts
679 $contact = new CRM_Contact_DAO_Contact();
680
681 for ($id = 1; $id <= self::NUM_CONTACT; $id++) {
682 $contact->contact_type = $this->getContactType($id + 1);
683 $contact->do_not_phone = mt_rand(0, 1);
684 $contact->do_not_email = mt_rand(0, 1);
685 $contact->do_not_post = mt_rand(0, 1);
686 $contact->do_not_trade = mt_rand(0, 1);
687 $contact->preferred_communication_method = $this->_getRandomElement($this->preferredCommunicationMethod);
688 $this->_insert($contact);
689 }
690 }
691
4e0e6e39 692 /**
6a488035
TO
693 *
694 * addIndividual()
695 *
696 * This method adds individual's data to the contact table
697 *
698 * The following fields are generated and added.
699 *
700 * contact_uuid - individual
701 * contact_rid - latest one
702 * first_name 'First Name $contact_uuid'
703 * middle_name 'Middle Name $contact_uuid'
704 * last_name 'Last Name $contact_uuid'
705 * job_title 'Job Title $contact_uuid'
706 * greeting_type - randomly select from the enum values
707 * custom_greeting - "custom greeting $contact_uuid'
708 *
4e0e6e39 709 */
6a488035
TO
710 public function addIndividual() {
711
712 $contact = new CRM_Contact_DAO_Contact();
713
714 for ($id = 1; $id <= $this->numIndividual; $id++) {
715 $contact->first_name = ucfirst($this->_getRandomElement($this->firstName));
716 $contact->middle_name = ucfirst($this->_getRandomChar());
717 $contact->last_name = ucfirst($this->_getRandomElement($this->lastName));
718 $contact->prefix_id = $this->_getRandomIndex($this->prefix);
719 $contact->suffix_id = $this->_getRandomIndex($this->suffix);
720 $contact->greeting_type_id = $this->_getRandomIndex($this->greetingType);
721 $contact->gender_id = $this->_getRandomIndex($this->gender);
722 $contact->birth_date = date("Ymd", mt_rand(0, time()));
723 $contact->is_deceased = mt_rand(0, 1);
724
725 $contact->id = $this->individual[($id - 1)];
726
727 // also update the sort name for the contact id.
728 $contact->display_name = trim($this->prefix[$contact->prefix_id] . " $contact->first_name $contact->middle_name $contact->last_name " . $this->suffix[$contact->suffix_id]);
729 $contact->sort_name = $contact->last_name . ', ' . $contact->first_name;
730 $contact->hash = crc32($contact->sort_name);
731 $this->_update($contact);
732 }
733 }
734
4e0e6e39 735 /**
6a488035
TO
736 *
737 * addHousehold()
738 *
739 * This method adds household's data to the contact table
740 *
741 * The following fields are generated and added.
742 *
743 * contact_uuid - household_individual
744 * contact_rid - latest one
745 * household_name 'household $contact_uuid primary contact $primary_contact_uuid'
746 * nick_name 'nick $contact_uuid'
747 * primary_contact_uuid = $household_individual[$contact_uuid][0];
748 *
4e0e6e39 749 */
6a488035
TO
750 public function addHousehold() {
751
752 $contact = new CRM_Contact_DAO_Contact();
753 for ($id = 1; $id <= $this->numHousehold; $id++) {
754 $cid = $this->household[($id - 1)];
755 $contact->primary_contact_id = $this->householdIndividual[$cid][0];
756
757 // get the last name of the primary contact id
758 $individual = new CRM_Contact_DAO_Contact();
759 $individual->id = $contact->primary_contact_id;
760 $individual->find(TRUE);
761 $firstName = $individual->first_name;
762 $lastName = $individual->last_name;
763
764 // need to name the household and nick name appropriately
765 $contact->household_name = "$firstName $lastName" . "'s home";
766 $contact->nick_name = "$lastName" . "'s home";
767
768 $contact->id = $this->household[($id - 1)];
769 // need to update the sort name for the main contact table
770 $contact->display_name = $contact->sort_name = $contact->household_name;
771 $contact->hash = crc32($contact->sort_name);
772 $this->_update($contact);
773 }
774 }
775
4e0e6e39 776 /**
6a488035
TO
777 *
778 * addOrganization()
779 *
780 * This method adds organization data to the contact table
781 *
782 * The following fields are generated and added.
783 *
784 * contact_uuid - organization
785 * contact_rid - latest one
786 * organization_name 'organization $contact_uuid'
787 * legal_name 'legal $contact_uuid'
788 * nick_name 'nick $contact_uuid'
789 * sic_code 'sic $contact_uuid'
790 * primary_contact_id - random individual contact uuid
791 *
4e0e6e39 792 */
6a488035
TO
793 public function addOrganization() {
794
795 $contact = new CRM_Contact_DAO_Contact();
796
797 for ($id = 1; $id <= $this->numOrganization; $id++) {
798 $contact->id = $this->organization[($id - 1)];
799 $name = $this->_getRandomElement($this->organization_name) . " " . $this->_getRandomElement($this->organization_field) . " " . $this->_getRandomElement($this->organization_type);
800 $contact->organization_name = $name;
801 $contact->primary_contact_id = $this->_getRandomElement($this->strict_individual);
802
803 // need to update the sort name for the main contact table
804 $contact->display_name = $contact->sort_name = $contact->organization_name;
805 $contact->hash = crc32($contact->sort_name);
806 $this->_update($contact);
807 }
808 }
809
4e0e6e39 810 /**
6a488035
TO
811 *
812 * addRelationship()
813 *
814 * This method adds data to the contact_relationship table
815 *
816 * it adds the following fields
817 *
4e0e6e39 818 */
6a488035
TO
819 public function addRelationship() {
820
821 $relationship = new CRM_Contact_DAO_Relationship();
822
823 // all active for now.
824 $relationship->is_active = 1;
825
826 foreach ($this->householdIndividual as $household_id => $household_member) {
827 // add child_of relationship
828 // 2 for each child
829 $relationship->relationship_type_id = self::CHILD_OF;
830 $relationship->contact_id_a = $household_member[2];
831 $relationship->contact_id_b = $household_member[0];
832 $this->_insert($relationship);
833 $relationship->contact_id_a = $household_member[3];
834 $relationship->contact_id_b = $household_member[0];
835 $this->_insert($relationship);
836 $relationship->contact_id_a = $household_member[2];
837 $relationship->contact_id_b = $household_member[1];
838 $this->_insert($relationship);
839 $relationship->contact_id_a = $household_member[3];
840 $relationship->contact_id_b = $household_member[1];
841 $this->_insert($relationship);
842
843 // add spouse_of relationship 1 for both the spouses
844 $relationship->relationship_type_id = self::SPOUSE_OF;
845 $relationship->contact_id_a = $household_member[1];
846 $relationship->contact_id_b = $household_member[0];
847 $this->_insert($relationship);
848
849 // add sibling_of relationship 1 for both the siblings
850 $relationship->relationship_type_id = self::SIBLING_OF;
851 $relationship->contact_id_a = $household_member[3];
852 $relationship->contact_id_b = $household_member[2];
853 $this->_insert($relationship);
854
855 // add head_of_household relationship 1 for head of house
856 $relationship->relationship_type_id = self::HEAD_OF_HOUSEHOLD;
857 $relationship->contact_id_a = $household_member[0];
858 $relationship->contact_id_b = $household_id;
859 $this->_insert($relationship);
860
861 // add member_of_household relationship 3 for all other members
862 $relationship->relationship_type_id = self::MEMBER_OF_HOUSEHOLD;
863 $relationship->contact_id_a = $household_member[1];
864 $this->_insert($relationship);
865 $relationship->contact_id_a = $household_member[2];
866 $this->_insert($relationship);
867 $relationship->contact_id_a = $household_member[3];
868 $this->_insert($relationship);
869 }
870 }
871
4e0e6e39 872 /**
6a488035
TO
873 *
874 * addLocation()
875 *
876 * This method adds data to the location table
877 *
4e0e6e39 878 */
6a488035
TO
879 public function addLocation() {
880 // strict individuals
881 foreach ($this->strictIndividual as $contactId) {
882 $this->_addLocation(self::HOME, $contactId);
883 }
884
885 //household
886 foreach ($this->household as $contactId) {
887 $this->_addLocation(self::HOME, $contactId);
888 }
889
890 //organization
891 foreach ($this->organization as $contactId) {
892 $this->_addLocation(self::MAIN, $contactId);
893 }
894
895 // some individuals.
896 $someIndividual = array_diff($this->individual, $this->strictIndividual);
4e0e6e39 897 $someIndividual = array_slice($someIndividual, 0, (int) (75 * ($this->numIndividual - $this->numStrictIndividual) / 100));
6a488035
TO
898 foreach ($someIndividual as $contactId) {
899 $this->_addLocation(self::HOME, $contactId, FALSE, TRUE);
900 }
901 }
902
627456b5
EM
903 /**
904 * @param $locationTypeId
905 * @param $contactId
906 * @param bool $domain
907 * @param bool $isPrimary
908 */
6a488035
TO
909 private function _addLocation($locationTypeId, $contactId, $domain = FALSE, $isPrimary = TRUE) {
910 $this->_addAddress($locationTypeId, $contactId, $isPrimary);
911
912 // add two phones for each location
913 $this->_addPhone($locationTypeId, $contactId, '1', $isPrimary);
914 $this->_addPhone($locationTypeId, $contactId, '2', FALSE);
915
916 // need to get sort name to generate email id
917 $contact = new CRM_Contact_DAO_Contact();
918 $contact->id = $contactId;
919 $contact->find(TRUE);
920 // get the sort name of the contact
921 $sortName = $contact->sort_name;
922 if (!empty($sortName)) {
923 // add 2 email for each location
924 for ($emailId = 1; $emailId <= 2; $emailId++) {
925 $this->_addEmail($locationTypeId, $contactId, $sortName, ($emailId == 1) && $isPrimary);
926 }
927 }
928 }
929
627456b5
EM
930 /**
931 * @param $locationTypeId
932 * @param $contactId
933 * @param bool $isPrimary
934 * @param null $locationBlockID
935 * @param int $offset
936 */
6a488035
TO
937 private function _addAddress($locationTypeId, $contactId, $isPrimary = FALSE, $locationBlockID = NULL, $offset = 1) {
938 $addressDAO = new CRM_Core_DAO_Address();
939
940 // add addresses now currently we are adding only 1 address for each location
941 $addressDAO->location_type_id = $locationTypeId;
942 $addressDAO->contact_id = $contactId;
943 $addressDAO->is_primary = $isPrimary;
944
945 $addressDAO->street_number = mt_rand(1, 1000);
946 $addressDAO->street_number_suffix = ucfirst($this->_getRandomChar());
947 $addressDAO->street_number_predirectional = $this->_getRandomElement($this->addressDirection);
948 $addressDAO->street_name = ucwords($this->_getRandomElement($this->streetName));
949 $addressDAO->street_type = $this->_getRandomElement($this->streetType);
950 $addressDAO->street_number_postdirectional = $this->_getRandomElement($this->addressDirection);
951 $addressDAO->street_address = $addressDAO->street_number_predirectional . " " . $addressDAO->street_number . $addressDAO->street_number_suffix . " " . $addressDAO->street_name . " " . $addressDAO->street_type . " " . $addressDAO->street_number_postdirectional;
952 $addressDAO->supplemental_address_1 = ucwords($this->_getRandomElement($this->supplementalAddress1));
953
954 // some more random skips
955 // hack add lat / long for US based addresses
956 list($addressDAO->country_id, $addressDAO->state_province_id, $addressDAO->city,
957 $addressDAO->postal_code, $addressDAO->geo_code_1, $addressDAO->geo_code_2
958 ) = self::getZipCodeInfo();
959
960 //$addressDAO->county_id = 1;
961
962 $this->_insert($addressDAO);
963 }
964
627456b5
EM
965 /**
966 * @param $sortName
967 *
968 * @return mixed
969 */
6a488035
TO
970 private function _sortNameToEmail($sortName) {
971 $email = preg_replace("([^a-zA-Z0-9_-]*)", "", $sortName);
972 return $email;
973 }
974
627456b5
EM
975 /**
976 * @param $locationTypeId
977 * @param $contactId
978 * @param $phoneType
979 * @param bool $isPrimary
980 * @param null $locationBlockID
981 * @param int $offset
982 */
6a488035
TO
983 private function _addPhone($locationTypeId, $contactId, $phoneType, $isPrimary = FALSE, $locationBlockID = NULL, $offset = 1) {
984 if ($contactId % 3) {
985 $phone = new CRM_Core_DAO_Phone();
986 $phone->location_type_id = $locationTypeId;
987 $phone->contact_id = $contactId;
988 $phone->is_primary = $isPrimary;
989 $phone->phone = mt_rand(11111111, 99999999);
990 $phone->phone_type_id = $phoneType;
991 $this->_insert($phone);
992 }
993 }
994
627456b5
EM
995 /**
996 * @param $locationTypeId
997 * @param $contactId
998 * @param $sortName
999 * @param bool $isPrimary
1000 * @param null $locationBlockID
1001 * @param int $offset
1002 */
6a488035
TO
1003 private function _addEmail($locationTypeId, $contactId, $sortName, $isPrimary = FALSE, $locationBlockID = NULL, $offset = 1) {
1004 if ($contactId % 2) {
1005 $email = new CRM_Core_DAO_Email();
1006 $email->location_type_id = $locationTypeId;
1007 $email->contact_id = $contactId;
1008 $email->is_primary = $isPrimary;
1009
1010 $emailName = $this->_sortNameToEmail($sortName);
1011 $emailDomain = $this->_getRandomElement($this->emailDomain);
1012 $tld = $this->_getRandomElement($this->emailTLD);
1013 $email->email = strtolower($emailName . "@" . $emailDomain . "." . $tld);
1014 $this->_insert($email);
1015 }
1016 }
1017
4e0e6e39 1018 /**
6a488035
TO
1019 *
1020 * addTagEntity()
1021 *
1022 * This method populates the crm_entity_tag table
1023 *
4e0e6e39 1024 */
6a488035
TO
1025 public function addEntityTag() {
1026
1027 $entity_tag = new CRM_Core_DAO_EntityTag();
1028
1029 // add categories 1,2,3 for Organizations.
1030 for ($i = 0; $i < $this->numOrganization; $i += 2) {
1031 $org_id = $this->organization[$i];
1032 // echo "org_id = $org_id\n";
1033 $entity_tag->contact_id = $this->organization[$i];
1034 $entity_tag->tag_id = mt_rand(1, 3);
1035 $this->_insert($entity_tag);
1036 }
1037
1038 // add categories 4,5 for Individuals.
1039 for ($i = 0; $i < $this->numIndividual; $i += 2) {
1040 $entity_tag->contact_id = $this->individual[$i];
1041 if (($entity_tag->contact_id) % 3) {
1042 $entity_tag->tag_id = mt_rand(4, 5);
1043 $this->_insert($entity_tag);
1044 }
1045 else {
1046 // some of the individuals are in both categories (4 and 5).
1047 $entity_tag->tag_id = 4;
1048 $this->_insert($entity_tag);
1049 $entity_tag->tag_id = 5;
1050 $this->_insert($entity_tag);
1051 }
1052 }
1053 }
1054
4e0e6e39 1055 /**
6a488035
TO
1056 *
1057 * addGroup()
1058 *
1059 * This method populates the crm_entity_tag table
1060 *
4e0e6e39 1061 */
6a488035
TO
1062 public function addGroup() {
1063 // add the 3 groups first
1064 $numGroup = count($this->group);
1065 require_once 'CRM/Contact/BAO/Group.php';
1066 for ($i = 0; $i < $numGroup; $i++) {
1067 $group = new CRM_Contact_BAO_Group();
1068 $group->name = $this->group[$i];
1069 $group->title = $this->group[$i];
1070 $group->group_type = "\ 11\ 12\ 1";
1071 $group->visibility = 'Public Pages';
1072 $group->is_active = 1;
1073 $group->save();
1074 $group->buildClause();
1075 $group->save();
1076 }
1077
1078 // 60 are for newsletter
1079 for ($i = 0; $i < 60; $i++) {
1080 $groupContact = new CRM_Contact_DAO_GroupContact();
1081 // newsletter subscribers
1082 $groupContact->group_id = 2;
1083 $groupContact->contact_id = $this->individual[$i];
1084 // membership status
1085 $groupContact->status = $this->_getRandomElement($this->groupMembershipStatus);
1086
6a488035
TO
1087 $subscriptionHistory = new CRM_Contact_DAO_SubscriptionHistory();
1088 $subscriptionHistory->contact_id = $groupContact->contact_id;
1089
1090 $subscriptionHistory->group_id = $groupContact->group_id;
1091 $subscriptionHistory->status = $groupContact->status;
1092 // method
1093 $subscriptionHistory->method = $this->_getRandomElement($this->subscriptionHistoryMethod);
1094 $subscriptionHistory->date = $this->_getRandomDate();
1095 if ($groupContact->status != 'Pending') {
1096 $this->_insert($groupContact);
1097 }
1098 $this->_insert($subscriptionHistory);
1099 }
1100
1101 // 15 volunteers
1102 for ($i = 0; $i < 15; $i++) {
1103 $groupContact = new CRM_Contact_DAO_GroupContact();
1104 // Volunteers
1105 $groupContact->group_id = 3;
1106 $groupContact->contact_id = $this->individual[$i + 60];
1107 // membership status
1108 $groupContact->status = $this->_getRandomElement($this->groupMembershipStatus);
1109
1110 $subscriptionHistory = new CRM_Contact_DAO_SubscriptionHistory();
1111 $subscriptionHistory->contact_id = $groupContact->contact_id;
1112 $subscriptionHistory->group_id = $groupContact->group_id;
1113 $subscriptionHistory->status = $groupContact->status;
1114 // method
1115 $subscriptionHistory->method = $this->_getRandomElement($this->subscriptionHistoryMethod);
1116 $subscriptionHistory->date = $this->_getRandomDate();
1117
1118 if ($groupContact->status != 'Pending') {
1119 $this->_insert($groupContact);
1120 }
1121 $this->_insert($subscriptionHistory);
1122 }
1123
1124 // 8 advisory board group
1125 for ($i = 0; $i < 8; $i++) {
1126 $groupContact = new CRM_Contact_DAO_GroupContact();
1127 // advisory board group
1128 $groupContact->group_id = 4;
1129 $groupContact->contact_id = $this->individual[$i * 7];
1130 // membership status
1131 $groupContact->status = $this->_getRandomElement($this->groupMembershipStatus);
1132
1133 $subscriptionHistory = new CRM_Contact_DAO_SubscriptionHistory();
1134 $subscriptionHistory->contact_id = $groupContact->contact_id;
1135 $subscriptionHistory->group_id = $groupContact->group_id;
1136 $subscriptionHistory->status = $groupContact->status;
1137 // method
1138 $subscriptionHistory->method = $this->_getRandomElement($this->subscriptionHistoryMethod);
1139 $subscriptionHistory->date = $this->_getRandomDate();
1140
1141 if ($groupContact->status != 'Pending') {
1142 $this->_insert($groupContact);
1143 }
1144 $this->_insert($subscriptionHistory);
1145 }
1146
1147 //In this function when we add groups that time we are cache the contact fields
1148 //But at the end of setup we are appending sample custom data, so for consistency
1149 //reset the cache.
1150 require_once 'CRM/Core/BAO/Cache.php';
1151 CRM_Core_BAO_Cache::deleteGroup('contact fields');
1152 }
1153
4e0e6e39 1154 /**
6a488035
TO
1155 *
1156 * addNote()
1157 *
1158 * This method populates the crm_note table
1159 *
4e0e6e39 1160 */
6a488035
TO
1161 public function addNote() {
1162
1163 $note = new CRM_Core_DAO_Note();
1164 $note->entity_table = 'civicrm_contact';
1165 $note->contact_id = 1;
1166
1167 for ($i = 0; $i < self::NUM_CONTACT; $i++) {
1168 $note->entity_id = $this->contact[$i];
1169 if ($this->contact[$i] % 5 || $this->contact[$i] % 3 || $this->contact[$i] % 2) {
1170 $this->_insertNote($note);
1171 }
1172 }
1173 }
1174
4e0e6e39 1175 /**
6a488035
TO
1176 *
1177 * addActivity()
1178 *
1179 * This method populates the crm_activity_history table
1180 *
4e0e6e39 1181 */
6a488035
TO
1182 public function addActivity() {
1183 $contactDAO = new CRM_Contact_DAO_Contact();
1184 $contactDAO->contact_type = 'Individual';
1185 $contactDAO->selectAdd();
1186 $contactDAO->selectAdd('id');
1187 $contactDAO->orderBy('sort_name');
1188 $contactDAO->find();
1189
1190 $count = 0;
44f817d4 1191 $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate');
6a488035
TO
1192
1193 while ($contactDAO->fetch()) {
1194 if ($count++ > 2) {
1195 break;
1196 }
1197 for ($i = 0; $i < self::NUM_ACTIVITY; $i++) {
6a488035
TO
1198 $activityDAO = new CRM_Activity_DAO_Activity();
1199 $activityDAO->source_contact_id = $contactDAO->id;
1200 $activityTypeID = mt_rand(7, 10);
761d977d 1201
6a488035
TO
1202 $activityDAO->activity_type_id = $activityTypeID;
1203 $activityDAO->subject = "Subject for $activity[$activityTypeID]";
1204 $activityDAO->activity_date_time = $this->_getRandomDate();
1205 $activityDAO->duration = mt_rand(1, 6);
1206 $activityDAO->status_id = 2;
1207 $this->_insert($activityDAO);
1208
761d977d 1209 $activityContactDAO = new CRM_Activity_DAO_ActivityContact();
1210 $activityContactDAO->activity_id = $activityDAO->id;
1211 $activityContactDAO->contact_id = mt_rand(1, 101);
1212 $activityContactDAO->record_type_id = CRM_Utils_Array::key('Activity Source', $activityContacts);
1213 $this->_insert($activityContactDAO);
1214
6a488035
TO
1215 if (in_array($activityTypeID, array(
1216 6, 9))) {
761d977d 1217 $activityTargetDAO = new CRM_Activity_DAO_ActivityContact();
6a488035 1218 $activityTargetDAO->activity_id = $activityDAO->id;
761d977d 1219 $activityTargetDAO->contact_id = mt_rand(1, 101);
1220 $activityTargetDAO->record_type_id = CRM_Utils_Array::key('Activity Targets', $activityContacts);
6a488035
TO
1221 $this->_insert($activityTargetDAO);
1222 }
1223
1224 if ($activityTypeID == 7) {
761d977d 1225 $activityAssignmentDAO = new CRM_Activity_DAO_ActivityContact();
6a488035 1226 $activityAssignmentDAO->activity_id = $activityDAO->id;
761d977d 1227 $activityAssignmentDAO->contact_id = mt_rand(1, 101);
1228 $activityAssignmentDAO->record_type_id = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
6a488035
TO
1229 $this->_insert($activityAssignmentDAO);
1230 }
1231 }
1232 }
1233 }
1234
627456b5
EM
1235 /**
1236 * @return array
1237 */
4e0e6e39 1238 public static function getZipCodeInfo() {
6a488035
TO
1239 $stateID = mt_rand(1000, 5132);
1240 $offset = mt_rand(1, 4132);
1241
1242 $query = "SELECT id, country_id from civicrm_state_province LIMIT $offset, 1";
1243 $dao = new CRM_Core_DAO();
1244 $dao->query($query);
1245 while ($dao->fetch()) {
1246 return array($dao->country_id, $dao->id);
1247 }
1248
1249 return array();
1250 }
1251
627456b5
EM
1252 /**
1253 * @param $zipCode
1254 *
1255 * @return array
1256 */
4e0e6e39 1257 public static function getLatLong($zipCode) {
6a488035
TO
1258 $query = "http://maps.google.com/maps?q=$zipCode&output=js";
1259 $userAgent = "Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0";
1260
1261 $ch = curl_init();
1262 curl_setopt($ch, CURLOPT_URL, $query);
1263 curl_setopt($ch, CURLOPT_HEADER, FALSE);
1264 curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
1265 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
1266
1267 // grab URL and pass it to the browser
1268 $outstr = curl_exec($ch);
1269
1270 // close CURL resource, and free up system resources
1271 curl_close($ch);
1272
1273 $preg = "/'(<\?xml.+?)',/s";
1274 preg_match($preg, $outstr, $matches);
1275 if ($matches[1]) {
1276 $xml = simplexml_load_string($matches[1]);
1277 $attributes = $xml->center->attributes();
1278 if (!empty($attributes)) {
1279 return array((float ) $attributes['lat'], (float ) $attributes['lng']);
1280 }
1281 }
1282 return array(NULL, NULL);
1283 }
1284
4e0e6e39 1285 public function addMembershipType() {
6a488035
TO
1286 $organizationDAO = new CRM_Contact_DAO_Contact();
1287 $organizationDAO->id = 5;
1288 $organizationDAO->find(TRUE);
1289 $contact_id = $organizationDAO->contact_id;
1290
1291 $membershipType = "INSERT INTO civicrm_membership_type
1292 (name, description, member_of_contact_id, financial_type_id, minimum_fee, duration_unit, duration_interval, period_type, fixed_period_start_day, fixed_period_rollover_day, relationship_type_id, relationship_direction, visibility, weight, is_active)
1293 VALUES
1294 ('General', 'Regular annual membership.', " . $contact_id . ", 3, 100, 'year', 1, 'rolling',null, null, 7, 'b_a', 'Public', 1, 1),
1295 ('Student', 'Discount membership for full-time students.', " . $contact_id . ", 1, 50, 'year', 1, 'rolling', null, null, 7, 'b_a', 'Public', 2, 1),
1296 ('Lifetime', 'Lifetime membership.', " . $contact_id . ", 2, 1200, 'lifetime', 1, 'rolling', null, null, 7, 'b_a', 'Admin', 3, 1);
1297 ";
1298 CRM_Core_DAO::executeQuery($membershipType, CRM_Core_DAO::$_nullArray);
1299 }
1300
4e0e6e39 1301 public function addMembership() {
6a488035
TO
1302 $contact = new CRM_Contact_DAO_Contact();
1303 $contact->query("SELECT id FROM civicrm_contact where contact_type = 'Individual'");
1304 while ($contact->fetch()) {
1305 $contacts[] = $contact->id;
1306 }
1307 shuffle($contacts);
1308
1309 $randomContacts = array_slice($contacts, 0, 350);
1310
1311 $sources = array('Payment', 'Donation', 'Check');
1312 $membershipTypes = array(2, 1);
1313 $membershipTypeNames = array('Student', 'General');
1314 $statuses = array(3, 4);
1315
c213dee5 1316 $membership = "
1317 INSERT INTO civicrm_membership
6a488035 1318 (contact_id, membership_type_id, join_date, start_date, end_date, source, status_id)
c213dee5 1319VALUES
1320 ";
6a488035
TO
1321 $activity = "
1322INSERT INTO civicrm_activity
1323 (source_contact_id, source_record_id, activity_type_id, subject, activity_date_time, duration, location, phone_id, phone_number, details, priority_id,parent_id, is_test, status_id)
1324VALUES
1325";
1326
1327 foreach ($randomContacts as $count => $dontCare) {
1328 $source = self::_getRandomElement($sources);
1329 $acititySourceId = $count + 1;
1330 if ((($count + 1) % 11 == 0)) {
1331 // lifetime membership, status can be anything
1332 $startDate = date('Y-m-d', mktime(0, 0, 0, date('m'), (date('d') - $count), date('Y')));
1333 $membership .= "( {$randomContacts[$count]}, 3, '{$startDate}', '{$startDate}', null, '{$source}', 1)";
1334 $activity .= "( {$randomContacts[$count]}, {$acititySourceId}, 7, 'Lifetime', '{$startDate} 00:00:00', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 2 )";
1335 }
1336 elseif (($count + 1) % 5 == 0) {
1337 // Grace or expired, memberhsip type is random of 1 & 2
1338 $randId = array_rand($membershipTypes);
1339 $membershipType = self::_getRandomElement($membershipTypes);
1340 $startDate = date('Y-m-d', mktime(0, 0, 0,
1341 date('m'),
1342 (date('d') - ($count * ($randId + 1) * ($randId + 1) * ($randId + 1))),
1343 (date('Y') - ($randId + 1))
1344 ));
1345 $partOfDate = explode('-', $startDate);
1346 $endDate = date('Y-m-d', mktime(0, 0, 0,
1347 $partOfDate[1],
1348 ($partOfDate[2] - 1),
1349 ($partOfDate[0] + ($randId + 1))
1350 ));
1351 $membership .= "( {$randomContacts[$count]}, {$membershipType}, '{$startDate}', '{$startDate}', '{$endDate}', '{$source}', {$statuses[$randId]})";
1352 $activity .= "( {$randomContacts[$count]}, {$acititySourceId}, 7, '{$membershipTypeNames[$randId]}', '{$startDate} 00:00:00', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 2 )";
1353 }
1354 elseif (($count + 1) % 2 == 0) {
1355 // membership type 2
1356 $startDate = date('Y-m-d', mktime(0, 0, 0, date('m'), (date('d') - $count), date('Y')));
1357 $endDate = date('Y-m-d', mktime(0, 0, 0, date('m'), (date('d') - $count), (date('Y') + 1)));
1358 $membership .= "( {$randomContacts[$count]}, 2, '{$startDate}', '{$startDate}', '{$endDate}', '{$source}', 1)";
1359 $activity .= "( {$randomContacts[$count]}, {$acititySourceId}, 7, 'Student', '{$startDate} 00:00:00', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 2 )";
1360 }
1361 else {
1362 // membership type 1
1363 $startDate = date('Y-m-d', mktime(0, 0, 0, date('m'), (date('d') - $count), date('Y')));
1364 $endDate = date('Y-m-d', mktime(0, 0, 0, date('m'), (date('d') - $count), (date('Y') + 2)));
1365 $membership .= "( {$randomContacts[$count]}, 1, '{$startDate}', '{$startDate}', '{$endDate}', '{$source}', 1)";
1366 $activity .= "( {$randomContacts[$count]}, {$acititySourceId}, 7, 'General', '{$startDate} 00:00:00', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 2 )";
1367 }
1368
1369 if ($count != 349) {
1370 $membership .= ",";
1371 $activity .= ",";
1372 }
1373 }
1374
1375 CRM_Core_DAO::executeQuery($membership, CRM_Core_DAO::$_nullArray);
1376
1377 CRM_Core_DAO::executeQuery($activity, CRM_Core_DAO::$_nullArray);
1378 }
1379
627456b5
EM
1380 /**
1381 * @param $date
1382 *
1383 * @return string
1384 */
4e0e6e39 1385 public static function repairDate($date) {
6a488035
TO
1386 $dropArray = array('-' => '', ':' => '', ' ' => '');
1387 return strtr($date, $dropArray);
1388 }
1389
4e0e6e39 1390 public function addMembershipLog() {
6a488035
TO
1391 $membership = new CRM_Member_DAO_Membership();
1392 $membership->query("SELECT id FROM civicrm_membership");
1393 while ($membership->fetch()) {
1394 $ids[] = $membership->id;
1395 }
1396 require_once 'CRM/Member/DAO/MembershipLog.php';
1397 foreach ($ids as $id) {
1398 $membership = new CRM_Member_DAO_Membership();
1399 $membership->id = $id;
1400 $membershipLog = new CRM_Member_DAO_MembershipLog();
1401 if ($membership->find(TRUE)) {
1402 $membershipLog->membership_id = $membership->id;
1403 $membershipLog->status_id = $membership->status_id;
1404 $membershipLog->start_date = self::repairDate($membership->start_date);
1405 $membershipLog->end_date = self::repairDate($membership->end_date);
1406 $membershipLog->modified_id = $membership->contact_id;
1407 $membershipLog->modified_date = date("Ymd");
1408 $membershipLog->save();
1409 }
1410 $membershipLog = NULL;
1411 }
1412 }
1413
4e0e6e39 1414 public function createEvent() {
6a488035
TO
1415 $event = "INSERT INTO civicrm_address ( contact_id, location_type_id, is_primary, is_billing, street_address, street_number, street_number_suffix, street_number_predirectional, street_name, street_type, street_number_postdirectional, street_unit, supplemental_address_1, supplemental_address_2, supplemental_address_3, city, county_id, state_province_id, postal_code_suffix, postal_code, usps_adc, country_id, geo_code_1, geo_code_2, timezone)
1416 VALUES
1417 ( NULL, 1, 1, 1, 'S 14S El Camino Way E', 14, 'S', NULL, 'El Camino', 'Way', NULL, NULL, NULL, NULL, NULL, 'Collinsville', NULL, 1006, NULL, '6022', NULL, 1228, 41.8328, -72.9253, NULL),
1418 ( NULL, 1, 1, 1, 'E 11B Woodbridge Path SW', 11, 'B', NULL, 'Woodbridge', 'Path', NULL, NULL, NULL, NULL, NULL, 'Dayton', NULL, 1034, NULL, '45417', NULL, 1228, 39.7531, -84.2471, NULL),
1419 ( NULL, 1, 1, 1, 'E 581O Lincoln Dr SW', 581, 'O', NULL, 'Lincoln', 'Dr', NULL, NULL, NULL, NULL, NULL, 'Santa Fe', NULL, 1030, NULL, '87594', NULL, 1228, 35.5212, -105.982, NULL)
1420 ";
1421 CRM_Core_DAO::executeQuery($event, CRM_Core_DAO::$_nullArray);
1422
1423 $sql = "SELECT id from civicrm_address where street_address = 'S 14S El Camino Way E'";
1424 $eventAdd1 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1425 $sql = "SELECT id from civicrm_address where street_address = 'E 11B Woodbridge Path SW'";
1426 $eventAdd2 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1427 $sql = "SELECT id from civicrm_address where street_address = 'E 581O Lincoln Dr SW'";
1428 $eventAdd3 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1429
1430 $event = "INSERT INTO civicrm_email (contact_id, location_type_id, email, is_primary, is_billing, on_hold, hold_date, reset_date)
1431 VALUES
1432 (NULL, 1, 'development@example.org', 0, 0, 0, NULL, NULL),
1433 (NULL, 1, 'tournaments@example.org', 0, 0, 0, NULL, NULL),
1434 (NULL, 1, 'celebration@example.org', 0, 0, 0, NULL, NULL)
1435 ";
1436 CRM_Core_DAO::executeQuery($event, CRM_Core_DAO::$_nullArray);
1437
1438 $sql = "SELECT id from civicrm_email where email = 'development@example.org'";
1439 $eventEmail1 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1440 $sql = "SELECT id from civicrm_email where email = 'tournaments@example.org'";
1441 $eventEmail2 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1442 $sql = "SELECT id from civicrm_email where email = 'celebration@example.org'";
1443 $eventEmail3 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1444
1445 $event = "INSERT INTO civicrm_phone (contact_id, location_type_id, is_primary, is_billing, mobile_provider_id, phone, phone_type_id)
1446 VALUES
1447 (NULL, 1, 0, 0, NULL,'204 222-1000', '1'),
1448 (NULL, 1, 0, 0, NULL,'204 223-1000', '1'),
1449 (NULL, 1, 0, 0, NULL,'303 323-1000', '1')
1450 ";
1451 CRM_Core_DAO::executeQuery($event, CRM_Core_DAO::$_nullArray);
1452
1453 $sql = "SELECT id from civicrm_phone where phone = '204 222-1000'";
1454 $eventPhone1 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1455 $sql = "SELECT id from civicrm_phone where phone = '204 223-1000'";
1456 $eventPhone2 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1457 $sql = "SELECT id from civicrm_phone where phone = '303 323-1000'";
1458 $eventPhone3 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1459
1460 $event = "INSERT INTO civicrm_loc_block ( address_id, email_id, phone_id, address_2_id, email_2_id, phone_2_id)
1461 VALUES
1462 ( $eventAdd1, $eventEmail1, $eventPhone1, NULL,NULL,NULL),
1463 ( $eventAdd2, $eventEmail2, $eventPhone2, NULL,NULL,NULL),
1464 ( $eventAdd3, $eventEmail3, $eventPhone3, NULL,NULL,NULL)
1465 ";
1466
1467 CRM_Core_DAO::executeQuery($event, CRM_Core_DAO::$_nullArray);
1468
1469 $sql = "SELECT id from civicrm_loc_block where phone_id = $eventPhone1 AND email_id = $eventEmail1 AND address_id = $eventAdd1";
1470 $eventLok1 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1471 $sql = "SELECT id from civicrm_loc_block where phone_id = $eventPhone2 AND email_id = $eventEmail2 AND address_id = $eventAdd2";
1472 $eventLok2 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1473 $sql = "SELECT id from civicrm_loc_block where phone_id = $eventPhone3 AND email_id = $eventEmail3 AND address_id = $eventAdd3";
1474 $eventLok3 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1475
1476 //create event fees
1477 $optionGroup = "INSERT INTO civicrm_option_group ( name, is_reserved, is_active)
1478 VALUES
1479 ( 'civicrm_event.amount.1', 0, 1),
1480 ( 'civicrm_event.amount.2', 0, 1),
1481 ( 'civicrm_event.amount.3', 0, 1)
1482";
1483 CRM_Core_DAO::executeQuery($optionGroup, CRM_Core_DAO::$_nullArray);
1484
6a488035
TO
1485 $sql = "SELECT max(id) from civicrm_option_group where name = 'civicrm_event.amount.1'";
1486 $page1 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1487
1488 $sql = "SELECT max(id) from civicrm_option_group where name = 'civicrm_event.amount.2'";
1489 $page2 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1490
1491 $sql = "SELECT max(id) from civicrm_option_group where name = 'civicrm_event.amount.3'";
1492 $page3 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1493
6a488035
TO
1494 $optionValue = "INSERT INTO civicrm_option_value (option_group_id, label, value, is_default, weight, is_optgroup, is_reserved, is_active)
1495 VALUES
1496 ($page1, 'Single', '50', 0, 1, 0, 0, 1),
1497 ($page1, 'Couple', '100', 0, 2, 0, 0, 1),
1498 ($page1, 'Family', '200', 0, 3, 0, 0, 1),
1499 ($page2, 'Bass', '25', 0, 1, 0, 0, 1),
1500 ($page2, 'Tenor', '40', 0, 2, 0, 0, 1),
1501 ($page2, 'Soprano', '50', 0, 3, 0, 0, 1),
1502 ($page3, 'Tiny-tots (ages 5-8)', '800', 0, 1, 0, 0, 1),
1503 ($page3, 'Junior Stars (ages 9-12)', '1000', 0, 2, 0, 0, 1),
1504 ($page3, 'Super Stars (ages 13-18)', '1500', 0, 3, 0, 0, 1)";
1505
1506 CRM_Core_DAO::executeQuery($optionValue, CRM_Core_DAO::$_nullArray);
1507
1508 $sql = "SELECT max(id) FROM civicrm_option_value WHERE civicrm_option_value.option_group_id = $page1 AND civicrm_option_value.weight=2";
1509 $defaultFee1 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1510
1511 $sql = "SELECT max(id) FROM civicrm_option_value WHERE civicrm_option_value.option_group_id = $page2 AND civicrm_option_value.weight=2";
1512 $defaultFee2 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1513
1514 $sql = "SELECT max(id) FROM civicrm_option_value WHERE civicrm_option_value.option_group_id = $page3 AND civicrm_option_value.weight=2";
1515 $defaultFee3 = CRM_Core_DAO::singleValueQuery($sql, CRM_Core_DAO::$_nullArray);
1516
1517 $event = "INSERT INTO civicrm_event
1518 ( title, summary, description, event_type_id, participant_listing_id, is_public, start_date, end_date, is_online_registration, registration_link_text, max_participants, event_full_text, is_monetary, financial_type_id, is_map, is_active, fee_label, is_show_location, loc_block_id,intro_text, footer_text, confirm_title, confirm_text, confirm_footer_text, is_email_confirm, confirm_email_text, confirm_from_name, confirm_from_email, cc_confirm, bcc_confirm, default_fee_id, thankyou_title, thankyou_text, thankyou_footer_text, is_pay_later, pay_later_text, pay_later_receipt, is_multiple_registrations, allow_same_participant_emails )
1519 VALUES
5d1cf4e2
CW
1520 ( 'Fall Fundraiser Dinner', 'Kick up your heels at our Fall Fundraiser Dinner/Dance at Glen Echo Park! Come by yourself or bring a partner, friend or the entire family!', 'This event benefits our teen programs. Admission includes a full 3 course meal and wine or soft drinks. Grab your dancing shoes, bring the kids and come join the party!', 3, 1, 1, '2010-11-21 17:00:00', '2010-11-21 23:00:00', 1, 'Register Now', 100, 'Sorry! The Fall Fundraiser Dinner is full. Please call Jane at 204 222-1000 ext 33 if you want to be added to the waiting list.', 1, 4, 1, 1, 'Dinner Contribution', 1 ,$eventLok1,'Fill in the information below to join as at this wonderful dinner event.', NULL, 'Confirm Your Registration Information', 'Review the information below carefully.', NULL, 1, 'Contact the Development Department if you need to make any changes to your registration.', 'Fundraising Dept.', 'development@example.org', NULL, NULL, {$defaultFee1}, 'Thanks for Registering!', '<p>Thank you for your support. Your contribution will help us build even better tools.</p><p>Please tell your friends and colleagues about this wonderful event.</p>', '<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>', 1, 'I will send payment by check', 'Send a check payable to Our Organization within 3 business days to hold your reservation. Checks should be sent to: 100 Main St., Suite 3, San Francisco CA 94110', 0, 0 ),
1521 ( 'Summer Solstice Festival Day Concert', 'Festival Day is coming! Join us and help support your parks.', 'We will gather at noon, learn a song all together, and then join in a joyous procession to the pavilion. We will be one of many groups performing at this wonderful concert which benefits our city parks.', 5, 1, 1, '2011-06-01 12:00:00', '2011-06-01 17:00:00', 1, 'Register Now', 50, 'We have all the singers we can handle. Come to the pavilion anyway and join in from the audience.', 1, 2, NULL, 1, 'Festival Fee', 1, $eventLok2, 'Complete the form below and click Continue to register online for the festival. Or you can register by calling us at 204 222-1000 ext 22.', '', 'Confirm Your Registration Information', '', '', 1, 'This email confirms your registration. If you have questions or need to change your registration - please do not hesitate to call us.', 'Event Dept.', 'events@example.org', '', NULL, {$defaultFee2}, 'Thanks for Your Joining In!', '<p>Thank you for your support. Your participation will help build new parks.</p><p>Please tell your friends and colleagues about the concert.</p>', '<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>', 0, NULL, NULL, 1, 0 ),
1522 ( 'Rain-forest Cup Youth Soccer Tournament', 'Sign up your team to participate in this fun tournament which benefits several Rain-forest protection groups in the Amazon basin.', 'This is a FYSA Sanctioned Tournament, which is open to all USSF/FIFA affiliated organizations for boys and girls in age groups: U9-U10 (6v6), U11-U12 (8v8), and U13-U17 (Full Sided).', 3, 1, 1, '2011-12-27 07:00:00', '2011-12-29 17:00:00', 1, 'Register Now', 500, 'Sorry! All available team slots for this tournament have been filled. Contact Jill Futbol for information about the waiting list and next years event.', 1, 4, NULL, 1, 'Tournament Fees',1, $eventLok3, 'Complete the form below to register your team for this year''s tournament.', '<em>A Soccer Youth Event</em>', 'Review and Confirm Your Registration Information', '', '<em>A Soccer Youth Event</em>', 1, 'Contact our Tournament Director for eligibility details.', 'Tournament Director', 'tournament@example.org', '', NULL, {$defaultFee3}, 'Thanks for Your Support!', '<p>Thank you for your support. Your participation will help save thousands of acres of rainforest.</p>', '<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>', 0, NULL, NULL, 0, 0 )
6a488035
TO
1523 ";
1524 CRM_Core_DAO::executeQuery($event, CRM_Core_DAO::$_nullArray);
1525 }
1526
4e0e6e39 1527 public function addParticipant() {
6a488035
TO
1528 // add participant
1529 $participant = new CRM_Event_DAO_Participant();
1530
1531 for ($id = 1; $id <= self::NUM_PARTICIPANT; $id++) {
1532 $participant->contact_id = mt_rand(1, self::NUM_CONTACT);
1533 $participant->event_id = mt_rand(1, 3);
1534 $participant->status_id = mt_rand(1, 5);
1535 $participant->role_id = mt_rand(1, 4);
1536 $participant->register_date = $this->_getRandomDate();
1537 $participant->source = "Credit Card";
1538
1539 if ($participant->event_id == 1) {
1540 $fee_level = "Single";
1541 $fee_amount = 50;
1542 }
1543 elseif ($participant->event_id == 2) {
1544 $fee_level = "Soprano";
1545 $fee_amount = 50;
1546 }
1547 else {
1548 $fee_level = "Tiny-tots (ages 5-8)";
1549 $fee_amount = 800;
1550 }
1551 $participant->fee_level = $fee_level;
1552 $participant->fee_amount = $fee_amount;
1553 $participant->is_test = 0;
1554
1555 $this->_insert($participant);
1556 }
1557 }
1558
4e0e6e39 1559 public function addPCP() {
6a488035
TO
1560 $query = "
1561INSERT INTO `civicrm_pcp`
1562 (contact_id, status_id, title, intro_text, page_text, donate_link_text, contribution_page_id, is_thermometer, is_honor_roll, goal_amount, referer, is_active)
1563VALUES
5d1cf4e2 1564 ({$this->individual[3]}, 2, 'My Personal Civi Fundraiser', 'I''m on a mission to get all my friends and family to help support my favorite open-source civic sector CRM.', '<p>Friends and family - please help build much needed infrastructure for the civic sector by supporting my personal campaign!</p>\r\n<p><a href=\"https://civicrm.org\">You can learn more about CiviCRM here</a>.</p>\r\n<p>Then click the <strong>Contribute Now</strong> button to go to our easy-to-use online contribution form.</p>', 'Contribute Now', 1, 1, 1, 5000.00, NULL, 1);
6a488035 1565";
33621c4f 1566 CRM_Core_DAO::executeQuery($query);
6a488035
TO
1567 }
1568
4e0e6e39 1569 public function addContribution() {
6a488035
TO
1570 // add contributions
1571 $contribution = new CRM_Contribute_DAO_Contribution();
1572
1573 for ($id = 1; $id <= self::NUM_CONTRIBUTION; $id++) {
1574 $contribution->contact_id = mt_rand(1, self::NUM_CONTACT);
4e0e6e39 1575 $contribution->financial_type_id = mt_rand(1, 4);
6a488035
TO
1576 $contribution->contribution_page_id = mt_rand(1, 3);
1577 $contribution->payment_instrument_id = mt_rand(1, 5);
1578 $contribution->receive_date = $this->_getRandomDate();
1579 $contribution->total_amount = mt_rand(10, 99);
1580 $contribution->contribution_status_id = mt_rand(1, 6);
1581 $contribution->trxn_id = "#" . md5($contribution->receive_date);
1582 $this->_insert($contribution);
1583 }
1584 }
1585
4e0e6e39 1586 public function addSoftContribution() {
6a488035
TO
1587 $pcpRollNickNAme = array('Jones Family', 'Annie and the kids', 'Anonymous', 'Adam Family');
1588
1589 $pcpPersonalNote = array('Helping Hands', 'Annie Helps', 'Anonymous', 'Adam Helps');
1590
1591 $softContribution = new CRM_Contribute_DAO_ContributionSoft();
1592
1593 $sql = "SELECT DISTINCT(contact_id), id, total_amount from civicrm_contribution LIMIT 200";
1594
1595 $contriInfo = CRM_Core_DAO::executeQuery($sql, CRM_Core_DAO::$_nullArray);
1596
1597 $prevContactID = NULL;
1598
1599 while ($contriInfo->fetch()) {
1600 if ($prevContactID) {
1601 $softContribution->contribution_id = $contriInfo->id;
1602 $softContribution->contact_id = $prevContactID;
1603 $softContribution->amount = $contriInfo->total_amount;
1604 $softContribution->pcp_id = 1;
1605 $softContribution->pcp_display_in_roll = 1;
1606 $softContribution->pcp_roll_nickname = $this->_getRandomElement($pcpRollNickNAme);
1607 $softContribution->pcp_personal_note = $this->_getRandomElement($pcpPersonalNote);
1608 $this->_insert($softContribution);
1609 }
1610 $prevContactID = $contriInfo->contact_id;
1611 }
1612 }
1613
4e0e6e39 1614 public function addPledge() {
6a488035 1615 $pledge = "INSERT INTO civicrm_pledge
c213dee5 1616 (contact_id, financial_type_id, contribution_page_id, amount, frequency_unit, frequency_interval, frequency_day, installments, start_date, create_date, acknowledge_date, modified_date, cancel_date, end_date, honor_contact_id, honor_type_id, status_id, is_test)
1617 VALUES
6a488035
TO
1618 (71, 1, 1, 500.00, 'month', 1, 1, 1, '2010-07-01 21:19:02', '2010-06-26 00:00:00', NULL, NULL, NULL,'2010-07-01 00:00:00', NULL, NULL, 1, 0),
1619 (43, 1, 1, 800.00, 'month', 3, 1, 4, '2010-07-01 10:11:09', '2010-06-23 10:11:14', '2010-06-23 10:11:18', NULL, NULL, '2010-04-01 10:11:40', NULL, NULL, 5, 0),
1620 (32, 1, 1, 600.00, 'month', 1, 1, 3, '2010-06-01 10:12:35', '2010-05-14 10:12:44', '2010-05-14 10:12:52', NULL, NULL, '2010-08-01 10:13:11', NULL, NULL, 5, 0);
1621";
1622 CRM_Core_DAO::executeQuery($pledge, CRM_Core_DAO::$_nullArray);
1623 }
1624
4e0e6e39 1625 public function addPledgePayment() {
c213dee5 1626 $pledgePayment = "INSERT INTO civicrm_pledge_payment
1627 ( pledge_id, contribution_id, scheduled_amount, scheduled_date, reminder_date, reminder_count, status_id)
1628 VALUES
6a488035
TO
1629 (1, 10, 500.00, '2010-07-01 13:03:45', null, 0, 1),
1630 (2, 11, 200.00, '2010-07-01 10:59:35', null, 0, 1),
1631 (2, null, 200.00, '2010-10-01 10:59:35',null, 0, 2),
1632 (2, null, 200.00, '2010-01-01 10:59:35',null, 0, 2),
1633 (2, null, 200.00, '2010-04-01 10:59:35',null, 0, 2),
1634 (3, 12, 200.00, '2010-06-01 11:00:12', null, 0, 1),
1635 (3, 13, 200.00, '2010-07-01 10:59:35', '2010-06-28 10:59:41', 1, 1),
1636 (3, null, 200.00, '2010-08-01 11:00:12', null, 0, 2);
1637 ";
1638 CRM_Core_DAO::executeQuery($pledgePayment, CRM_Core_DAO::$_nullArray);
1639 }
1640
4e0e6e39 1641 public function addMembershipPayment() {
6a488035
TO
1642 $amount = array('50', '100', '1200');
1643
1644 $contribution = new CRM_Contribute_DAO_Contribution();
1645 for ($id = 1; $id <= 200; $id++) {
1646 $contribution->contact_id = mt_rand(1, self::NUM_CONTACT);
4e0e6e39 1647 $contribution->financial_type_id = mt_rand(1, 4);
6a488035
TO
1648 $contribution->payment_instrument_id = mt_rand(1, 5);
1649 $contribution->receive_date = $this->_getRandomDate();
1650 $contribution->total_amount = $this->_getRandomElement($amount);
1651 $contribution->contribution_status_id = mt_rand(1, 6);
1652 $contribution->trxn_id = "#" . md5($contribution->receive_date);
1653 $this->_insert($contribution);
1654 }
1655 for ($i = 0; $i < 3; $i++) {
1656 $contributionsArray = $membershipArray = array();
1657 $contributionSQL = "
c213dee5 1658 SELECT id
6a488035
TO
1659 FROM civicrm_contribution
1660 WHERE contribution_page_id IS NULL AND
1661 total_amount = {$amount[$i]} limit 0, 50 ";
1662
1663 $contributionDAO = CRM_Core_DAO::executeQuery($contributionSQL, CRM_Core_DAO::$_nullArray);
1664
1665 while ($contributionDAO->fetch()) {
1666 $contributionsArray[] = $contributionDAO->id;
1667 }
1668 $j = $i + 1;
1669 $membershipSQL = "
c213dee5 1670 SELECT id
1671 FROM civicrm_membership
6a488035
TO
1672 WHERE civicrm_membership.membership_type_id = {$j} limit 0, 50";
1673 $membershipDAO = CRM_Core_DAO::executeQuery($membershipSQL, CRM_Core_DAO::$_nullArray);
1674
1675 while ($membershipDAO->fetch()) {
1676 $membershipArray[] = $membershipDAO->id;
1677 }
1678
1679 $payemntOBJ = new CRM_Member_DAO_MembershipPayment();
1680 foreach ($membershipArray as $key => $membershipid) {
1681 $payemntOBJ->contribution_id = $contributionsArray[$key];
1682 $payemntOBJ->membership_id = $membershipid;
1683 $this->_insert($payemntOBJ);
1684 }
1685 }
1686 }
4e0e6e39 1687
6a488035
TO
1688}
1689
627456b5
EM
1690/**
1691 * @param null $str
1692 *
1693 * @return bool
1694 */
6a488035
TO
1695function user_access($str = NULL) {
1696 return TRUE;
1697}
1698
627456b5
EM
1699/**
1700 * @return array
1701 */
6a488035
TO
1702function module_list() {
1703 return array();
1704}
1705
1706
1707echo ("Starting data generation on " . date("F dS h:i:s A") . "\n");
1708$obj1 = new CRM_GCD();
1709$obj1->initID();
1710$obj1->parseDataFile();
1711$obj1->initDB();
1712$obj1->addDomain();
1713$obj1->addContact();
1714$obj1->addIndividual();
1715$obj1->addHousehold();
1716$obj1->addOrganization();
1717$obj1->addRelationship();
1718$obj1->addLocation();
1719$obj1->addEntityTag();
1720$obj1->addGroup();
1721$obj1->addNote();
1722$obj1->addActivity();
1723$obj1->addMembership();
1724$obj1->addMembershipLog();
1725$obj1->createEvent();
1726$obj1->addParticipant();
1727$obj1->addContribution();
1728$obj1->addPCP();
1729$obj1->addSoftContribution();
1730$obj1->addPledge();
1731$obj1->addPledgePayment();
1732$obj1->addMembershipPayment();
1733echo ("Ending data generation on " . date("F dS h:i:s A") . "\n");