PageRenderTime 41ms CodeModel.GetById 15ms app.highlight 20ms RepoModel.GetById 1ms app.codeStats 1ms

/install/populateSeedData.php

https://github.com/AlexandrPM/Suite
PHP | 513 lines | 396 code | 38 blank | 79 comment | 46 complexity | e66b7cc152653a02062a1fc015da270c MD5 | raw file
  1<?php
  2if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
  3/*********************************************************************************
  4 * SugarCRM Community Edition is a customer relationship management program developed by
  5 * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
  6
  7 * SuiteCRM is an extension to SugarCRM Community Edition developed by Salesagility Ltd.
  8 * Copyright (C) 2011 - 2014 Salesagility Ltd.
  9 *
 10 * This program is free software; you can redistribute it and/or modify it under
 11 * the terms of the GNU Affero General Public License version 3 as published by the
 12 * Free Software Foundation with the addition of the following permission added
 13 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
 14 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
 15 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
 16 *
 17 * This program is distributed in the hope that it will be useful, but WITHOUT
 18 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 19 * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
 20 * details.
 21 *
 22 * You should have received a copy of the GNU Affero General Public License along with
 23 * this program; if not, see http://www.gnu.org/licenses or write to the Free
 24 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 25 * 02110-1301 USA.
 26 *
 27 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
 28 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
 29 *
 30 * The interactive user interfaces in modified source and object code versions
 31 * of this program must display Appropriate Legal Notices, as required under
 32 * Section 5 of the GNU Affero General Public License version 3.
 33 *
 34 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
 35 * these Appropriate Legal Notices must retain the display of the "Powered by
 36 * SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
 37 * reasonably feasible for  technical reasons, the Appropriate Legal Notices must
 38 * display the words  "Powered by SugarCRM" and "Supercharged by SuiteCRM".
 39 ********************************************************************************/
 40
 41
 42
 43
 44// load the correct demo data and main application language file depending upon the installer language selected; if
 45// it's not found fall back on en_us
 46if(file_exists("include/language/{$current_language}.lang.php")){
 47    require_once("include/language/{$current_language}.lang.php");
 48}
 49else {
 50    require_once("include/language/en_us.lang.php");
 51}
 52require_once('install/UserDemoData.php');
 53require_once('install/TeamDemoData.php');
 54
 55global $sugar_demodata;
 56if(file_exists("install/demoData.{$current_language}.php")){
 57   require_once("install/demoData.{$current_language}.php");
 58}
 59else {
 60   require_once("install/demoData.en_us.php");
 61}
 62
 63$last_name_count = count($sugar_demodata['last_name_array']);
 64$first_name_count = count($sugar_demodata['first_name_array']);
 65$company_name_count = count($sugar_demodata['company_name_array']);
 66$street_address_count = count($sugar_demodata['street_address_array']);
 67$city_array_count = count($sugar_demodata['city_array']);
 68global $app_list_strings;
 69global $sugar_config;
 70$_REQUEST['useEmailWidget'] = "true";
 71if(empty($app_list_strings)) {
 72	$app_list_strings = return_app_list_strings_language('en_us');
 73}
 74/*
 75 * Seed the random number generator with a fixed constant.  This will make all installs of the same code have the same
 76 * seed data.  This facilitates cross database testing..
 77 */
 78mt_srand(93285903);
 79$db = DBManagerFactory::getInstance();
 80$timedate = TimeDate::getInstance();
 81// Set the max time to one hour (helps Windows load the seed data)
 82ini_set("max_execution_time", "3600");
 83// ensure we have enough memory
 84$memory_needed  = 256;
 85$memory_limit   = ini_get('memory_limit');
 86if( $memory_limit != "" && $memory_limit != "-1" ){ // if memory_limit is set
 87    rtrim($memory_limit, 'M');
 88    $memory_limit_int = (int) $memory_limit;
 89    if( $memory_limit_int < $memory_needed ){
 90        ini_set("memory_limit", "$memory_needed" . "M");
 91    }
 92}
 93$large_scale_test = empty($sugar_config['large_scale_test']) ?
 94	false : $sugar_config['large_scale_test'];
 95
 96$seed_user = new User();
 97$user_demo_data = new UserDemoData($seed_user, $large_scale_test);
 98$user_demo_data->create_demo_data();
 99$number_contacts = 200;
100$number_companies = 50;
101$number_leads = 200;
102$large_scale_test = empty($sugar_config['large_scale_test']) ? false : $sugar_config['large_scale_test'];
103// If large scale test is set to true, increase the seed data.
104if($large_scale_test) {
105	// increase the cuttoff time to 1 hour
106	ini_set("max_execution_time", "3600");
107	$number_contacts = 100000;
108	$number_companies = 15000;
109	$number_leads = 100000;
110}
111
112
113$possible_duration_hours_arr = array( 0, 1, 2, 3);
114$possible_duration_minutes_arr = array('00' => '00','15' => '15', '30' => '30', '45' => '45');
115$account_ids = Array();
116$accounts = Array();
117$opportunity_ids = Array();
118
119// Determine the assigned user for all demo data.  This is the default user if set, or admin
120$assigned_user_name = "admin";
121if(!empty($sugar_config['default_user_name']) &&
122	!empty($sugar_config['create_default_user']) &&
123	$sugar_config['create_default_user'])
124{
125	$assigned_user_name = $sugar_config['default_user_name'];
126}
127
128// Look up the user id for the assigned user
129$seed_user = new User();
130$assigned_user_id = $seed_user->retrieve_user_id($assigned_user_name);
131$patterns[] = '/ /';
132$patterns[] = '/\./';
133$patterns[] = '/&/';
134$patterns[] = '/\//';
135$replacements[] = '';
136$replacements[] = '';
137$replacements[] = '';
138$replacements[] = '';
139
140///////////////////////////////////////////////////////////////////////////////
141////	ACCOUNTS
142
143for($i = 0; $i < $number_companies; $i++) {
144	$account_name = $sugar_demodata['company_name_array'][mt_rand(0,$company_name_count-1)];
145	// Create new accounts.
146	$account = new Account();
147	$account->name = $account_name;
148	$account->phone_office = create_phone_number();
149	$account->assigned_user_id = $assigned_user_id;
150	$account->emailAddress->addAddress(createEmailAddress(), true);
151	$account->emailAddress->addAddress(createEmailAddress());
152	$account->website = createWebAddress();
153	$account->billing_address_street = $sugar_demodata['street_address_array'][mt_rand(0,$street_address_count-1)];
154	$account->billing_address_city = $sugar_demodata['city_array'][mt_rand(0,$city_array_count-1)];
155	if($i % 3 == 1)	{
156		$account->billing_address_state = "NY";
157		$assigned_user_id = mt_rand(9,10);
158		if($assigned_user_id == 9) {
159			$account->assigned_user_name = "seed_will";
160			$account->assigned_user_id = $account->assigned_user_name."_id";
161		} else {
162			$account->assigned_user_name = "seed_chris";
163			$account->assigned_user_id = $account->assigned_user_name."_id";
164		}
165
166		$account->assigned_user_id = $account->assigned_user_name."_id";
167	} else {
168		$account->billing_address_state = "CA";
169		$assigned_user_id = mt_rand(6,8);
170		if($assigned_user_id == 6) {
171			$account->assigned_user_name = "seed_sarah";
172		} elseif($assigned_user_id == 7) {
173			$account->assigned_user_name = "seed_sally";
174		} else {
175			$account->assigned_user_name = "seed_max";
176		}
177
178		$account->assigned_user_id = $account->assigned_user_name."_id";
179	}
180
181	$account->billing_address_postalcode = mt_rand(10000, 99999);
182	$account->billing_address_country = 'USA';
183	$account->shipping_address_street = $account->billing_address_street;
184	$account->shipping_address_city = $account->billing_address_city;
185	$account->shipping_address_state = $account->billing_address_state;
186	$account->shipping_address_postalcode = $account->billing_address_postalcode;
187	$account->shipping_address_country = $account->billing_address_country;
188	$account->industry = array_rand($app_list_strings['industry_dom']);
189	$account->account_type = "Customer";
190	$account->save();
191	$account_ids[] = $account->id;
192	$accounts[] = $account;
193
194	// Create a case for the account
195	$case = new aCase();
196	$case->account_id = $account->id;
197	$case->priority = array_rand($app_list_strings['case_priority_dom']);
198	$case->status = array_rand($app_list_strings['case_status_dom']);
199	$case->name = $sugar_demodata['case_seed_names'][mt_rand(0,4)];
200	$case->assigned_user_id = $account->assigned_user_id;
201	$case->assigned_user_name = $account->assigned_user_name;
202	$case->save();
203
204	// Create a bug for the account
205	$bug = new Bug();
206	$bug->account_id = $account->id;
207	$bug->priority = array_rand($app_list_strings['bug_priority_dom']);
208	$bug->status = array_rand($app_list_strings['bug_status_dom']);
209	$bug->name = $sugar_demodata['bug_seed_names'][mt_rand(0,4)];
210	$bug->assigned_user_id = $account->assigned_user_id;
211	$bug->assigned_user_name = $account->assigned_user_name;
212	$bug->save();
213
214	$note = new Note();
215	$note->parent_type = 'Accounts';
216	$note->parent_id = $account->id;
217	$seed_data_index = mt_rand(0,3);
218	$note->name = $sugar_demodata['note_seed_names_and_Descriptions'][$seed_data_index][0];
219	$note->description = $sugar_demodata['note_seed_names_and_Descriptions'][$seed_data_index][1];
220	$note->assigned_user_id = $account->assigned_user_id;
221	$note->assigned_user_name = $account->assigned_user_name;
222	$note->save();
223
224	$call = new Call();
225	$call->parent_type = 'Accounts';
226	$call->parent_id = $account->id;
227	$call->name = $sugar_demodata['call_seed_data_names'][mt_rand(0,3)];
228	$call->assigned_user_id = $account->assigned_user_id;
229	$call->assigned_user_name = $account->assigned_user_name;
230	$call->direction='Outbound';
231	$call->date_start = create_date(). ' ' . create_time();
232	$call->duration_hours='0';
233	$call->duration_minutes='30';
234	$call->account_id =$account->id;
235	$call->status='Planned';
236	$call->save();
237
238    //Set the user to accept the call
239    $seed_user->id = $call->assigned_user_id;
240    $call->set_accept_status($seed_user,'accept');
241
242	//Create new opportunities
243	$opp = new Opportunity();
244	$opp->assigned_user_id = $account->assigned_user_id;
245	$opp->assigned_user_name = $account->assigned_user_name;
246	$opp->name = substr($account_name." - 1000 units", 0, 50);
247	$opp->date_closed = create_date();
248	$opp->lead_source = array_rand($app_list_strings['lead_source_dom']);
249	$opp->sales_stage = array_rand($app_list_strings['sales_stage_dom']);
250	// If the deal is already one, make the date closed occur in the past.
251	if($opp->sales_stage == "Closed Won" || $opp->sales_stage == "Closed Lost")
252	{
253		$opp->date_closed = create_past_date();
254	}
255	$opp->opportunity_type = array_rand($app_list_strings['opportunity_type_dom']);
256	$amount = array("10000", "25000", "50000", "75000");
257	$key = array_rand($amount);
258	$opp->amount = $amount[$key];
259	$probability = array("10", "70", "40", "60");
260	$key = array_rand($probability);
261	$opp->probability = $probability[$key];
262	$opp->save();
263	$opportunity_ids[] = $opp->id;
264	// Create a linking table entry to assign an account to the opportunity.
265	$opp->set_relationship('accounts_opportunities', array('opportunity_id'=>$opp->id ,'account_id'=> $account->id), false);
266
267}
268
269$titles = $sugar_demodata['titles'];
270$account_max = count($account_ids) - 1;
271$first_name_max = $first_name_count - 1;
272$last_name_max = $last_name_count - 1;
273$street_address_max = $street_address_count - 1;
274$city_array_max = $city_array_count - 1;
275$lead_source_max = count($app_list_strings['lead_source_dom']) - 1;
276$lead_status_max = count($app_list_strings['lead_status_dom']) - 1;
277$title_max = count($titles) - 1;
278///////////////////////////////////////////////////////////////////////////////
279////	DEMO CONTACTS
280for($i=0; $i<$number_contacts; $i++) {
281	$contact = new Contact();
282	$contact->first_name = $sugar_demodata['first_name_array'][mt_rand(0,$first_name_max)];
283	$contact->last_name = $sugar_demodata['last_name_array'][mt_rand(0,$last_name_max)];
284	$contact->assigned_user_id = $account->assigned_user_id;
285	$contact->primary_address_street = $sugar_demodata['street_address_array'][mt_rand(0,$street_address_max)];
286	$contact->primary_address_city = $sugar_demodata['city_array'][mt_rand(0,$city_array_max)];
287	$contact->lead_source = array_rand($app_list_strings['lead_source_dom']);
288	$contact->title = $titles[mt_rand(0,$title_max)];
289	$contact->emailAddress->addAddress(createEmailAddress(), true, true);
290	$contact->emailAddress->addAddress(createEmailAddress(), false, false, false, true);
291	$assignedUser = new User();
292	$assignedUser->retrieve($contact->assigned_user_id);
293	$contact->assigned_user_id = $assigned_user_id;
294	$contact->email1 = createEmailAddress();
295	$key = array_rand($sugar_demodata['street_address_array']);
296	$contact->primary_address_street = $sugar_demodata['street_address_array'][$key];
297	$key = array_rand($sugar_demodata['city_array']);
298	$contact->primary_address_city = $sugar_demodata['city_array'][$key];
299	$contact->lead_source = array_rand($app_list_strings['lead_source_dom']);
300	$contact->title = $titles[array_rand($titles)];
301	$contact->phone_work = create_phone_number();
302	$contact->phone_home = create_phone_number();
303	$contact->phone_mobile = create_phone_number();
304	$account_number = mt_rand(0,$account_max);
305	$account_id = $account_ids[$account_number];
306	// Fill in a bogus address
307	$contacts_account = $accounts[$account_number];
308	$contact->primary_address_state = $contacts_account->billing_address_state;
309	$contact->assigned_user_id = $contacts_account->assigned_user_id;
310	$contact->assigned_user_name = $contacts_account->assigned_user_name;
311	$contact->primary_address_postalcode = mt_rand(10000,99999);
312	$contact->primary_address_country = 'USA';
313	$contact->save();
314	// Create a linking table entry to assign an account to the contact.
315	$contact->set_relationship('accounts_contacts', array('contact_id'=>$contact->id ,'account_id'=> $account_id), false);
316	// This assumes that there will be one opportunity per company in the seed data.
317	$opportunity_key = array_rand($opportunity_ids);
318	$contact->set_relationship('opportunities_contacts', array('contact_id'=>$contact->id ,'opportunity_id'=> $opportunity_ids[$opportunity_key], 'contact_role'=>$app_list_strings['opportunity_relationship_type_default_key']), false);
319
320	//Create new tasks
321	$task = new Task();
322	$key = array_rand($sugar_demodata['task_seed_data_names']);
323	$task->name = $sugar_demodata['task_seed_data_names'][$key];
324	//separate date and time field have been merged into one.
325	$task->date_due = create_date() . ' ' . create_time();
326	$task->date_due_flag = 0;
327	$task->assigned_user_id = $contacts_account->assigned_user_id;
328	$task->assigned_user_name = $contacts_account->assigned_user_name;
329	$task->priority = array_rand($app_list_strings['task_priority_dom']);
330	$task->status = array_rand($app_list_strings['task_status_dom']);
331	$task->contact_id = $contact->id;
332	if ($contact->primary_address_city == "San Mateo") {
333		$task->parent_id = $account_id;
334		$task->parent_type = 'Accounts';
335	}
336	$task->save();
337
338	//Create new meetings
339	$meeting = new Meeting();
340	$key = array_rand($sugar_demodata['meeting_seed_data_names']);
341	$meeting->name = $sugar_demodata['meeting_seed_data_names'][$key];
342	$meeting->date_start = create_date(). ' ' . create_time();
343	//$meeting->time_start = date("H:i",time());
344	$meeting->duration_hours = array_rand($possible_duration_hours_arr);
345	$meeting->duration_minutes = array_rand($possible_duration_minutes_arr);
346	$meeting->assigned_user_id = $assigned_user_id;
347	$meeting->assigned_user_id = $contacts_account->assigned_user_id;
348	$meeting->assigned_user_name = $contacts_account->assigned_user_name;
349	$meeting->description = $sugar_demodata['meeting_seed_data_descriptions'];
350	$meeting->status = array_rand($app_list_strings['meeting_status_dom']);
351	$meeting->contact_id = $contact->id;
352	$meeting->parent_id = $account_id;
353	$meeting->parent_type = 'Accounts';
354    // dont update vcal
355    $meeting->update_vcal  = false;
356	$meeting->save();
357	// leverage the seed user to set the acceptance status on the meeting.
358	$seed_user->id = $meeting->assigned_user_id;
359    $meeting->set_accept_status($seed_user,'accept');
360
361	//Create new emails
362	$email = new Email();
363	$key = array_rand($sugar_demodata['email_seed_data_subjects']);
364	$email->name = $sugar_demodata['email_seed_data_subjects'][$key];
365	$email->date_start = create_date();
366	$email->time_start = create_time();
367	$email->duration_hours = array_rand($possible_duration_hours_arr);
368	$email->duration_minutes = array_rand($possible_duration_minutes_arr);
369	$email->assigned_user_id = $assigned_user_id;
370	$email->assigned_user_id = $contacts_account->assigned_user_id;
371	$email->assigned_user_name = $contacts_account->assigned_user_name;
372	$email->description = $sugar_demodata['email_seed_data_descriptions'];
373	$email->status = 'sent';
374	$email->parent_id = $account_id;
375	$email->parent_type = 'Accounts';
376	$email->to_addrs = $contact->emailAddress->getPrimaryAddress($contact);
377	$email->from_addr = $assignedUser->emailAddress->getPrimaryAddress($assignedUser);
378	$email->from_addr_name = $email->from_addr;
379	$email->to_addrs_names = $email->to_addrs;
380	$email->type = 'out';
381	$email->save();
382	$email->load_relationship('contacts');
383	$email->contacts->add($contact);
384	$email->load_relationship('accounts');
385	$email->accounts->add($contacts_account);
386}
387
388for($i=0; $i<$number_leads; $i++)
389{
390	$lead = new Lead();
391	$lead->account_name = $sugar_demodata['company_name_array'][mt_rand(0,$company_name_count-1)];
392	$lead->first_name = $sugar_demodata['first_name_array'][mt_rand(0,$first_name_max)];
393	$lead->last_name = $sugar_demodata['last_name_array'][mt_rand(0,$last_name_max)];
394	$lead->primary_address_street = $sugar_demodata['street_address_array'][mt_rand(0,$street_address_max)];
395	$lead->primary_address_city = $sugar_demodata['city_array'][mt_rand(0,$city_array_max)];
396	$lead->lead_source = array_rand($app_list_strings['lead_source_dom']);
397	$lead->title = $sugar_demodata['titles'][mt_rand(0,$title_max)];
398	$lead->phone_work = create_phone_number();
399	$lead->phone_home = create_phone_number();
400	$lead->phone_mobile = create_phone_number();
401	$lead->emailAddress->addAddress(createEmailAddress(), true);
402	// Fill in a bogus address
403	$lead->primary_address_state = $sugar_demodata['primary_address_state'];
404	$leads_account = $accounts[$account_number];
405	$lead->primary_address_state = $leads_account->billing_address_state;
406	$lead->status = array_rand($app_list_strings['lead_status_dom']);
407	$lead->lead_source = array_rand($app_list_strings['lead_source_dom']);
408	if($i % 3 == 1)
409	{
410		$lead->billing_address_state = $sugar_demodata['billing_address_state']['east'];
411			$assigned_user_id = mt_rand(9,10);
412			if($assigned_user_id == 9)
413			{
414				$lead->assigned_user_name = "seed_will";
415				$lead->assigned_user_id = $lead->assigned_user_name."_id";
416			}
417			else
418			{
419				$lead->assigned_user_name = "seed_chris";
420				$lead->assigned_user_id = $lead->assigned_user_name."_id";
421			}
422
423			$lead->assigned_user_id = $lead->assigned_user_name."_id";
424		}
425		else
426		{
427			$lead->billing_address_state = $sugar_demodata['billing_address_state']['west'];
428			$assigned_user_id = mt_rand(6,8);
429			if($assigned_user_id == 6)
430			{
431				$lead->assigned_user_name = "seed_sarah";
432			}
433			else if($assigned_user_id == 7)
434			{
435				$lead->assigned_user_name = "seed_sally";
436			}
437			else
438			{
439				$lead->assigned_user_name = "seed_max";
440			}
441
442			$lead->assigned_user_id = $lead->assigned_user_name."_id";
443		}
444
445
446	// If this is a large scale test, switch to the bulk teams 90% of the time.
447	if ($large_scale_test)
448	{
449		if(mt_rand(0,100) < 90) {
450			$assigned_team = $team_demo_data->get_random_team();
451			$lead->assigned_user_name = $assigned_team;
452		} else {
453		}
454	}
455	$lead->primary_address_postalcode = mt_rand(10000,99999);
456	$lead->primary_address_country = $sugar_demodata['primary_address_country'];
457	$lead->save();
458}
459
460
461///
462/// SEED DATA FOR EMAIL TEMPLATES
463///
464if(!empty($sugar_demodata['emailtemplates_seed_data'])) {
465	foreach($sugar_demodata['emailtemplates_seed_data'] as $v){
466	    $EmailTemp = new EmailTemplate();
467	    $EmailTemp->name = $v['name'];
468	    $EmailTemp->description = $v['description'];
469	    $EmailTemp->subject = $v['subject'];
470	    $EmailTemp->body = $v['text_body'];
471	    $EmailTemp->body_html = $v['body'];
472	    $EmailTemp->deleted = 0;
473	    $EmailTemp->published = 'off';
474	    $EmailTemp->text_only = 0;
475	    $id =$EmailTemp->save();
476	}
477}
478///
479/// SEED DATA FOR PROJECT AND PROJECT TASK
480///
481include_once('modules/Project/Project.php');
482include_once('modules/ProjectTask/ProjectTask.php');
483// Project: Audit Plan
484$project = new Project();
485$project->name = $sugar_demodata['project_seed_data']['audit']['name'];
486$project->description = $sugar_demodata['project_seed_data']['audit']['description'];
487$project->assigned_user_id = 1;
488$project->estimated_start_date = $sugar_demodata['project_seed_data']['audit']['estimated_start_date'];
489$project->estimated_end_date = $sugar_demodata['project_seed_data']['audit']['estimated_end_date'];
490$project->status = $sugar_demodata['project_seed_data']['audit']['status'];
491$project->priority = $sugar_demodata['project_seed_data']['audit']['priority'];
492$audit_plan_id = $project->save();
493
494$project_task_id_counter = 1;  // all the project task IDs cannot be 1, so using couter
495foreach($sugar_demodata['project_seed_data']['audit']['project_tasks'] as $v){
496	$project_task = new ProjectTask();
497	$project_task->assigned_user_id = 1;
498	$project_task->name = $v['name'];
499	$project_task->date_start = $v['date_start'];
500	$project_task->date_finish = $v['date_finish'];
501	$project_task->project_id = $audit_plan_id;
502	$project_task->project_task_id = $project_task_id_counter;
503	$project_task->description = $v['description'];
504	$project_task->duration = $v['duration'];
505	$project_task->duration_unit = $v['duration_unit'];
506	$project_task->percent_complete = $v['percent_complete'];
507	$communicate_stakeholders_id = $project_task->save();
508
509    $project_task_id_counter++;
510}
511
512
513?>