Passed
Push — gcid_api_call ( ad3192 )
by
unknown
14:20
created

profile.php ➔ get_api_profile_gcid()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
cc 3
nc 3
nop 1
dl 0
loc 13
ccs 0
cts 10
cp 0
crap 12
rs 9.8333
c 0
b 0
f 0
1
<?php
2
elgg_ws_expose_function(
3
	"get.profile",
4
	"get_api_profile",
5
	array("id" => array('type' => 'string')),
6
	'provide user GUID number and all profile information is returned',
7
	'GET',
8
	false,
9
	false
10
);
11
12
elgg_ws_expose_function(
13
	"get.profile.by.gcid",
14
	"get_api_profile_gcid",
15
	array("gcid" => array('type' => 'string')),
16
	'provide user GUID number and all profile information is returned',
17
	'GET',
18
	false,
19
	false
20
);
21
22
elgg_ws_expose_function(
23
	"profile.update",
24
	"profileUpdate",
25
	array("id" => array('type' => 'string'), "data" => array('type'=>'string')),
26
	'update a user profile based on id passed',
27
	'POST',
28
	true,
29
	false
30
);
31
32
elgg_ws_expose_function(
33
	"profile.create",
34
	"profileCreate",
35
	array("data" => array('type'=>'string')),
36
	'Create a new user profile, issue a password reset on the newly created profile and pre-populate profile fields based on data passed in. Returns guid of newly created user',
37
	'POST',
38
	true,
39
	false
40
);
41
function get_api_profile_gcid($gcid){
42
	if (!elgg_is_active_plugin('pleio')) {
43
		return "pleio mod is not active and there is no openid function";
44
	}
45
	$dbprefix = elgg_get_config("dbprefix");
46
47
    $result = get_data_row("SELECT * FROM {$dbprefix}users_entity WHERE pleio_guid = $gcid");
48
	
49
	if ($result)
0 ignored issues
show
Bug Best Practice introduced by
The expression $result of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
50
		return get_api_profile($result->guid);
51
	else
52
		return "no user found";
53
}
54
function get_api_profile($id)
55
{
56
	$user_entity = getUserFromID($id);
57
	if (!$user_entity) {
58
		return "User was not found. Please try a different GUID, username, or email address";
59
	}
60
61
	$dbprefix = elgg_get_config("dbprefix");
62
63
    $result = get_data_row("SELECT * FROM {$dbprefix}users_entity WHERE guid = $user_entity->guid");
64
65
	$user['id'] = $user_entity->guid;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$user was never initialized. Although not strictly required by PHP, it is generally a good practice to add $user = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
66
67
	$user['pleioID'] = $result->pleio_guid;
68
69
	$user['username'] = $user_entity->username;
70
71
	//get and store user display name
72
	$user['displayName'] = $user_entity->name;
73
74
	$user['email'] = $user_entity->email;
75
76
	//get and store URL for profile
77
	$user['profileURL'] = $user_entity->getURL();
78
79
	//get and store URL of profile avatar
80
	$user['iconURL'] = $user_entity->geticon();
81
82
	$user['jobTitle'] = $user_entity->job;
83
84
	$user['department'] = $user_entity->department;
85
86
	$user['telephone'] = $user_entity->phone;
87
88
	$user['mobile'] = $user_entity->mobile;
89
90
	$user['Website'] = $user_entity->website;
91
92
	if ($user_entity->facebook) {
93
		$user['links']['facebook'] = "http://www.facebook.com/".$user_entity->facebook;
94
	}
95
	if ($user_entity->google) {
96
		$user['links']['google'] = "http://www.google.com/".$user_entity->google;
97
	}
98
	if ($user_entity->github) {
99
		$user['links']['github'] = "https://github.com/".$user_entity->github;
100
	}
101
	if ($user_entity->twitter) {
102
		$user['links']['twitter'] = "https://twitter.com/".$user_entity->twitter;
103
	}
104
	if ($user_entity->linkedin) {
105
		$user['links']['linkedin'] = "http://ca.linkedin.com/in/".$user_entity->linkedin;
106
	}
107
	if ($user_entity->pinterest) {
108
		$user['links']['pinterest'] = "http://www.pinterest.com/".$user_entity->pinterest;
109
	}
110
	if ($user_entity->tumblr) {
111
		$user['links']['tumblr'] = "https://www.tumblr.com/blog/".$user_entity->tumblr;
112
	}
113
	if ($user_entity->instagram) {
114
		$user['links']['instagram'] = "http://instagram.com/".$user_entity->instagram;
115
	}
116
	if ($user_entity->flickr) {
117
		$user['links']['flickr'] = "http://flickr.com/".$user_entity->flickr;
118
	}
119
	if ($user_entity->youtube) {
120
		$user['links']['youtube'] = "http://www.youtube.com/".$user_entity->youtube;
121
	}
122
123
	////////////////////////////////////////////////////////////////////////////////////
124
	//about me
125
	////////////////////////////////////////////////////////////////////////
126
	$aboutMeMetadata = elgg_get_metadata(array('guids'=>array($user['id']),'limit'=>0,'metadata_names'=>array('description')));
127
128
	if ($aboutMeMetadata[0]->access_id==2) {
129
		$user['about_me'] = $aboutMeMetadata[0]->value;
130
	}
131
132
	/////////////////////////////////////////////////////////////////////////////////
133
	//eductation
134
	//////////////////////////////////////////////////////////////////////
135
	$eductationEntity = elgg_get_entities(array(
136
		'owner_guid'=>$user['id'],
137
		'subtype'=>'education',
138
		'type' => 'object',
139
		'limit' => 0
140
		));
141
	$i=0;
142
	foreach ($eductationEntity as $school) {
143
		if ($school->access_id==2) {
144
			$user['education']['item_'.$i]['school_name'] = $school->school;
145
146
			$user['education']['item_'.$i]['start_date'] = buildDate($school->startdate, $school->startyear);
147
148 View Code Duplication
			if ($school->ongoing == "false") {
149
				$user['education']['item_'.$i]['end_date'] = buildDate($school->enddate, $school->endyear);
150
			} else {
151
				$user['education']['item_'.$i]['end_date'] = "present/actuel";
152
			}
153
			$user['education']['item_'.$i]['degree'] = $school->degree;
154
			$user['education']['item_'.$i]['field_of_study'] = $school->field;
155
			$i++;
156
		}
157
	}
158
	////////////////////////////////////////////////////////
159
	//experience
160
	//////////////////////////////////////
161
	$experienceEntity = elgg_get_entities(array(
162
		'owner_guid'=>$user['id'],
163
		'subtype'=>'experience',
164
		'type' => 'object',
165
		'limit' => 0
166
		));
167
	usort($experienceEntity, "sortDate");
168
	$i=0;
169
	foreach ($experienceEntity as $job) {
170
		if ($job->access_id == 2) {
171
			$user['experience']['item_'.$i]['job_title'] = $job->title;
172
			$user['experience']['item_'.$i]['organization'] = $job->organization;
173
			$user['experience']['item_'.$i]['start_date'] = buildDate($job->startdate, $job->startyear);
174 View Code Duplication
			if ($job->ongoing == "false") {
175
				$user['experience']['item_'.$i]['end_date'] = buildDate($job->enddate, $job->endyear);
176
			} else {
177
				$user['experience']['item_'.$i]['end_date'] = "present/actuel";
178
			}
179
			$user['experience']['item_'.$i]['responsibilities'] = $job->responsibilities;
180
181
			$j = 0;
182
			if (is_array($job->colleagues)) {
183
				foreach ($job->colleagues as $friend) {
184
					$friendEntity = get_user($friend);
185
					$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["id"] = $friendEntity->guid;
186
					$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["username"] = $friendEntity->username;
187
188
					//get and store user display name
189
					$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["displayName"] = $friendEntity->name;
190
191
					//get and store URL for profile
192
					$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["profileURL"] = $friendEntity->getURL();
193
194
					//get and store URL of profile avatar
195
					$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["iconURL"] = $friendEntity->geticon();
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::getIcon() has been deprecated with message: 1.8 Use getIconURL()

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
196
					$j++;
197
				}
198
			} elseif (!is_null($job->colleagues)) {
199
				$friendEntity = get_user($job->colleagues);
200
				$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["id"] = $friendEntity->guid;
201
				$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["username"] = $friendEntity->username;
202
203
				//get and store user display name
204
				$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["displayName"] = $friendEntity->name;
205
206
				//get and store URL for profile
207
				$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["profileURL"] = $friendEntity->getURL();
208
209
				//get and store URL of profile avatar
210
				$user['experience']['item_'.$i]['colleagues']['colleague_'.$j]["iconURL"] = $friendEntity->geticon();
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::getIcon() has been deprecated with message: 1.8 Use getIconURL()

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
211
			}
212
			$i++;
213
		}
214
	}
215
	/////////////////////////////////////////////////////////
216
	//Skills
217
	///////////////////////////////////////////////////////
218
	elgg_set_ignore_access(true);
219
	if ($user_entity->skill_access == ACCESS_PUBLIC) {
220
		$skillsEntity = elgg_get_entities(array(
221
			'owner_guid'=>$user['id'],
222
			'subtype'=>'MySkill',
223
			'type' => 'object',
224
			'limit' => 0
225
		));
226
	}
227
	$i=0;
228 View Code Duplication
	foreach ($skillsEntity as $skill) {
0 ignored issues
show
Bug introduced by
The variable $skillsEntity does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
229
		$user['skills']['item_'.$i]['skill'] = $skill->title;
230
		$j = 0;
231
		if (is_array($skill->endorsements)) {
232
			foreach ($skill->endorsements as $friend) {
233
				$friendEntity = get_user($friend);
234
				$user['skills']['item_'.$i]['endorsements']["user_".$j]["id"] = $friendEntity->guid;
235
				$user['skills']['item_'.$i]['endorsements']["user_".$j]["username"] = $friendEntity->username;
236
				$user['skills']['item_'.$i]['endorsements']["user_".$j]["displayName"] = $friendEntity->name;
237
				$user['skills']['item_'.$i]['endorsements']["user_".$j]["profileURL"] = $friendEntity->getURL();
238
				$user['skills']['item_'.$i]['endorsements']["user_".$j]["iconURL"] = $friendEntity->geticon();
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::getIcon() has been deprecated with message: 1.8 Use getIconURL()

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
239
				$j++;
240
			}
241
		} elseif (!is_null($skill->endorsements)) {
242
			$friendEntity = get_user($skill->endorsements);
243
			$user['skills']['item_'.$i]['endorsements']["user_".$j]["id"] = $friendEntity->guid;
244
			$user['skills']['item_'.$i]['endorsements']["user_".$j]["username"] = $friendEntity->username;
245
			$user['skills']['item_'.$i]['endorsements']["user_".$j]["displayName"] = $friendEntity->name;
246
			$user['skills']['item_'.$i]['endorsements']["user_".$j]["profileURL"] = $friendEntity->getURL();
247
			$user['skills']['item_'.$i]['endorsements']["user_".$j]["iconURL"] = $friendEntity->geticon();
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::getIcon() has been deprecated with message: 1.8 Use getIconURL()

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
248
		}
249
		$i++;
250
	}
251
	elgg_set_ignore_access(false);
252
253
	//////////////////////////////////////////////////////////////////////////////////////
254
	//portfolio
255
	///////////////////////////////////////////////////////////////////
256
	$portfolioEntity = elgg_get_entities(array(
257
		'owner_guid'=>$user['id'],
258
		'subtype'=>'portfolio',
259
		'type' => 'object',
260
		'limit' => 0
261
	));
262
	$i=0;
263
	foreach ($portfolioEntity as $portfolio) {
264
		if ($portfolio->access_id == 2) {
265
			$user['portfolio']['item_'.$i]['title'] = $portfolio->title;
266
			$user['portfolio']['item_'.$i]['link'] = $portfolio->link;
267 View Code Duplication
			if ($portfolio->datestamped == "on") {
268
				$user['portfolio']['item_'.$i]['date'] = $portfolio->publishdate;
269
			}
270
			$user['portfolio']['item_'.$i]['description'] = $portfolio->description;
271
		}
272
	}
273
274
	$user['dateJoined'] = date("Y-m-d H:i:s", $user_entity->time_created);
275
276
	$user['lastActivity'] = date("Y-m-d H:i:s", $user_entity->last_action);
277
278
	$user['lastLogin'] = date("Y-m-d H:i:s", $user_entity->last_login);
279
280
	return $user;
281
}
282
283
function profileUpdate($id, $data)
284
{
285
	global $CONFIG;
286
	$response['error'] = 0;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
287
	$user_entity = getUserFromID($id);
288
	if (!$user_entity) {
289
		$response['error'] = 1;
290
		$response['message'] = 'Invalid user id, username, or email';
291
		return $response;
292
	}
293
294 View Code Duplication
	if ($data == '') {
295
		$response['error'] = 2;
296
		$response['message'] = 'data must be a string representing a JSON object.';
297
		return $response;
298
	}
299
	$userDataObj = json_decode($data, true);
300 View Code Duplication
	if (json_last_error() !== 0) {
301
		$response['error'] = 2;
302
		$response['message'] = 'invalid JSON - data was unable to be parsed';
303
		return $response;
304
	}
305
306
	foreach ($userDataObj as $field => $value) {
307
		switch ($field) {
308
			case 'name':
309
			elgg_set_ignore_access(true);
310
311
				$nameData = json_decode(json_encode($value), true);
312 View Code Duplication
				if (!isset($nameData["firstName"])&&!isset($nameData["lastName"])) {
313
					$response['error'] = 4;
314
					$response['message'] = 'invalid data format - missing first and last name';
315
					return $response;
316
				}
317 View Code Duplication
				if (!isset($nameData["firstName"])||!isset($nameData["lastName"])) {
318
					$response['error'] = 4;
319
					$response['message'] = 'invalid data format - missing first or last name';
320
					return $response;
321
				}
322
323
				$name = $nameData["firstName"].' '.$nameData["lastName"];
324 View Code Duplication
				if (elgg_strlen($name) > 50) {
325
					register_error(elgg_echo('user:name:fail'));
326
				} elseif ($user_entity->name != $name) {
327
					$user_entity->name= $name;
328
					$user_entity->save();
329
				}
330
				elgg_set_ignore_access(false);
331
				break;
332
			case 'title':
333
334
				$titleData = json_decode(json_encode($value), true);
335
				if (!isset($titleData['fr'])&&!isset($titleData['en'])) {
336
					$response['error'] = 4;
337
					$response['message'] = 'invalid data format - missing french and english title';
338
					return $response;
339
				}
340
				if (!isset($titleData['fr'])||!isset($titleData['en'])) {
341
					$response['error'] = 4;
342
					$response['message'] = 'invalid data format - missing french or english title';
343
					return $response;
344
				}
345
346
				if ($user_entity->language === 'fr') {
347
					$user_entity->set('job', $titleData['fr'].' / '.$titleData['en']);
348
				} else {
349
					$user_entity->set('job', $titleData['en'].' / '.$titleData['fr']);
350
				}
351
352
				break;
353 View Code Duplication
			case 'classification':
354
				$classificationData = json_decode(json_encode($value), true);
355
				if (!isset($classificationData['group'])&&!isset($classificationData['level'])) {
356
					$response['error'] = 4;
357
					$response['message'] = 'invalid data format - missing classification group and level';
358
					return $response;
359
				}
360
				if (!isset($classificationData['group'])||!isset($classificationData['level'])) {
361
					$response['error'] = 4;
362
					$response['message'] = 'invalid data format - missing classification group or level';
363
					return $response;
364
				}
365
366
				$user_entity->set('classification', json_encode($value));
367
				break;
368
			case 'department':
369
				$deptData = json_decode(json_encode($value), true);
370
				if (!isset($deptData['fr'])&&!isset($deptData['en'])) {
371
					$response['error'] = 4;
372
					$response['message'] = 'invalid data format - department format';
373
					return $response;
374
				}
375
				if (!isset($deptData['fr'])||!isset($deptData['en'])) {
376
					$response['error'] = 4;
377
					$response['message'] = 'invalid data format - missing french or english department';
378
					return $response;
379
				}
380
381
				$obj = elgg_get_entities(array(
382
					'type' => 'object',
383
					'subtype' => 'dept_list',
384
					'owner_guid' => 0
385
				));
386
				$deptListEn = json_decode($obj[0]->deptsEn, true);
387
				$provinces = array();
388
				$provinces['pov-alb'] = 'Government of Alberta';
389
				$provinces['pov-bc'] = 'Government of British Columbia';
390
				$provinces['pov-man'] = 'Government of Manitoba';
391
				$provinces['pov-nb'] = 'Government of New Brunswick';
392
				$provinces['pov-nfl'] = 'Government of Newfoundland and Labrador';
393
				$provinces['pov-ns'] = 'Government of Nova Scotia';
394
				$provinces['pov-nwt'] = 'Government of Northwest Territories';
395
				$provinces['pov-nun'] = 'Government of Nunavut';
396
				$provinces['pov-ont'] = 'Government of Ontario';
397
				$provinces['pov-pei'] = 'Government of Prince Edward Island';
398
				$provinces['pov-que'] = 'Government of Quebec';
399
				$provinces['pov-sask'] = 'Government of Saskatchewan';
400
				$provinces['pov-yuk'] = 'Government of Yukon';
401
				$deptAndProvincesEn = array_merge($deptListEn, $provinces);
402
403
404
				$deptListFr = json_decode($obj[0]->deptsFr, true);
405
				$provinces = array();
406
				$provinces['pov-alb'] = "Gouvernement de l'Alberta";
407
				$provinces['pov-bc'] = 'Gouvernement de la Colombie-Britannique';
408
				$provinces['pov-man'] = 'Gouvernement du Manitoba';
409
				$provinces['pov-nb'] = 'Gouvernement du Nouveau-Brunswick';
410
				$provinces['pov-nfl'] = 'Gouvernement de Terre-Neuve-et-Labrador';
411
				$provinces['pov-ns'] = 'Gouvernement de la Nouvelle-Écosse';
412
				$provinces['pov-nwt'] = 'Gouvernement du Territoires du Nord-Ouest';
413
				$provinces['pov-nun'] = 'Gouvernement du Nunavut';
414
				$provinces['pov-ont'] = "Gouvernement de l'Ontario";
415
				$provinces['pov-pei'] = "Gouvernement de l'Île-du-Prince-Édouard";
416
				$provinces['pov-que'] = 'Gouvernement du Québec';
417
				$provinces['pov-sask'] = 'Gouvernement de Saskatchewan';
418
				$provinces['pov-yuk'] = 'Gouvernement du Yukon';
419
				$deptAndProvincesFr = array_merge($deptListFr, $provinces);
420
421 View Code Duplication
				if (!in_array($deptData['en'], $deptAndProvincesEn)) {
422
					$response['error'] = 5;
423
					$response['message'] = 'invalid english department name. valid names: '.json_encode($deptAndProvincesEn);
424
					return $response;
425
				}
426
427 View Code Duplication
				if (!in_array($deptData['fr'], $deptAndProvincesFr)) {
428
					$response['error'] = 5;
429
					$response['message'] = 'invalid french department name. valid names: '.json_encode($deptAndProvincesFr);
430
					return $response;
431
				}
432
433
				if ($user_entity->language === 'fr') {
434
					$user_entity->set('department', $deptData['fr'].' / '.$deptData['en']);
435
				} else {
436
					$user_entity->set('department', $deptData['en'].' / '.$deptData['fr']);
437
				}
438
				break;
439 View Code Duplication
			case 'branch':
440
				$branchData = json_decode(json_encode($value), true);
441
				if (!isset($branchData['en'])&&!isset($branchData['fr'])) {
442
					$response['error'] = 4;
443
					$response['message'] = 'invalid data format - missing english and french branch name';
444
					return $response;
445
				}
446
				if (!isset($branchData['en'])||!isset($branchData['fr'])) {
447
					$response['error'] = 4;
448
					$response['message'] = 'invalid data format - missing english or french branch name';
449
					return $response;
450
				}
451
452
				$user_entity->set('branch', json_encode($value));
453
				break;
454 View Code Duplication
			case 'sector':
455
				$sectorData = json_decode(json_encode($value), true);
456
				if (!isset($sectorData['en'])&&!isset($sectorData['fr'])) {
457
					$response['error'] = 4;
458
					$response['message'] = 'invalid data format - missing english and french sector name';
459
					return $response;
460
				}
461
				if (!isset($sectorData['en'])||!isset($sectorData['fr'])) {
462
					$response['error'] = 4;
463
					$response['message'] = 'invalid data format - missing english or french sector name';
464
					return $response;
465
				}
466
467
				$user_entity->set('sector', json_encode($value));
468
				break;
469
			case 'location':
470 View Code Duplication
				if (!isset($value['en'])) {
471
					$response['error'] = 4;
472
					$response['message'] = 'missing english location data';
473
					return $response;
474
				}
475
				$locationData = json_decode(json_encode($value['en']), true);
476 View Code Duplication
				if (!isset($locationData['street'])&&!isset($locationData['city'])&&!isset($locationData['province'])&&!isset($locationData['postalCode'])&&!isset($locationData['country'])&&!isset($locationData['building'])&&!isset($locationData['floor'])&&!isset($locationData['officeNum'])) {
477
					$response['error'] = 4;
478
					$response['message'] = 'invalid location data';
479
					return $response;
480
				}
481 View Code Duplication
				if (!isset($locationData['street'])||!isset($locationData['city'])||!isset($locationData['province'])||!isset($locationData['postalCode'])||!isset($locationData['country'])||!isset($locationData['building'])||!isset($locationData['floor'])||!isset($locationData['officeNum'])) {
482
					$response['error'] = 4;
483
					$response['message'] = 'missing location data';
484
					return $response;
485
				}
486
487 View Code Duplication
				if (!isset($value['fr'])) {
488
					$response['error'] = 4;
489
					$response['message'] = 'missing french location data';
490
					return $response;
491
				}
492
				$locationData = json_decode(json_encode($value['fr']), true);
493 View Code Duplication
				if (!isset($locationData['street'])&&!isset($locationData['city'])&&!isset($locationData['province'])&&!isset($locationData['postalCode'])&&!isset($locationData['country'])&&!isset($locationData['building'])&&!isset($locationData['floor'])&&!isset($locationData['officeNum'])) {
494
					$response['error'] = 4;
495
					$response['message'] = 'invalid location data';
496
					return $response;
497
				}
498 View Code Duplication
				if (!isset($locationData['street'])||!isset($locationData['city'])||!isset($locationData['province'])||!isset($locationData['postalCode'])||!isset($locationData['country'])||!isset($locationData['building'])||!isset($locationData['floor'])||!isset($locationData['officeNum'])) {
499
					$response['error'] = 4;
500
					$response['message'] = 'missing location data';
501
					return $response;
502
				}
503
504
				$user_entity->set('addressString', json_encode($value["en"]));
505
				$user_entity->set('addressStringFr', json_encode($value["fr"]));
506
				break;
507
			case 'phone':
508
509
				$user_entity->set('phone', $value);
510
				break;
511
			case 'mobile':
512
513
				$user_entity->set('mobile', $value);
514
				break;
515
			case 'email':
516
517
				elgg_set_ignore_access(true);
518
				$connection = mysqli_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, $CONFIG->dbname)or die(mysqli_error($connection));
0 ignored issues
show
Coding Style Compatibility introduced by
The function profileUpdate() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
519
				mysqli_select_db($connection, $CONFIG->dbname);
520
				$emaildomain = explode('@', filter_var($value, FILTER_SANITIZE_EMAIL));
521
				$query = "SELECT count(*) AS num FROM email_extensions WHERE ext ='".$emaildomain[1]."'";
522
523
				$result = mysqli_query($connection, $query)or die(mysqli_error($connection));
0 ignored issues
show
Coding Style Compatibility introduced by
The function profileUpdate() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
524
				$result = mysqli_fetch_array($result);
525
526
				$emailgc = explode('.', $emaildomain[1]);
527
				$gcca = $emailgc[count($emailgc) - 2] .".".$emailgc[count($emailgc) - 1];
528
529
				mysqli_close($connection);
530
531
				$resulting_error = "";
532
533 View Code Duplication
				if ($result['num'][0] <= 0) {
534
					if ($gcca !== 'gc.ca') {
535
						$resulting_error .= elgg_echo('gcRegister:invalid_email');
536
					}
537
				}
538
539
540 View Code Duplication
				if ($resulting_error !== "") {
541
					$response['error'] = 3;
542
					$response['message'] = 'invalid email or email domain - must be a valid Government of Canada email address';
543
					return $response;
544
				}
545
				$user_entity->set('email', $value);
546
				$user_entity->save();
547
548
				elgg_set_ignore_access(false);
549
				break;
550
			case 'secondLanguage':
551
552
				$user_entity->set('english', $value["ENG"]);
553
				$user_entity->set('french', $value["FRA"]);
554
				$user_entity->set('officialLanguage', $value["firstLanguage"]);
555
556
				break;
557
		}
558
	}
559
560
	$user_entity->save();
561
	return 'success';
562
}
563
564
function profileCreate($data)
565
{
566
	global $CONFIG;
567
	// check email for duplicate
568
	// get email and create username
569
	// create account
570
	// send password reset email
571
	// fill in profile data
572 View Code Duplication
	if ($data == '') {
573
		$response['error'] = 2;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
574
		$response['message'] = 'data must be a string representing a JSON object.';
575
		return $response;
576
	}
577
	$userDataObj = json_decode($data, true);
578 View Code Duplication
	if (json_last_error() !== 0) {
579
		$response['error'] = 2;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
580
		$response['message'] = 'invalid JSON - data was unable to be parsed';
581
		return $response;
582
	}
583
584
	///////////////////////////////////////////////////////////////////
585
	//error check data field
586
	///////////////////////////////////////////////////////////////////
587
	foreach ($userDataObj as $field => $value) {
588
		switch ($field) {
589
			case 'name':
590
				$nameData = json_decode(json_encode($value), true);
591 View Code Duplication
				if (!isset($nameData["firstName"])&&!isset($nameData["lastName"])) {
592
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
593
					$response['message'] = 'invalid data format - missing first and last name';
594
					return $response;
595
				}
596 View Code Duplication
				if (!isset($nameData["firstName"])||!isset($nameData["lastName"])) {
597
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
598
					$response['message'] = 'invalid data format - missing first or last name';
599
					return $response;
600
				}
601
602
603
				$name = $nameData["firstName"].' '.$nameData["lastName"];
604
605
				break;
606 View Code Duplication
			case 'title':
607
608
				$titleData = json_decode(json_encode($value), true);
609
				if (!isset($titleData['fr'])&&!isset($titleData['en'])) {
610
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
611
					$response['message'] = 'invalid data format - missing french and english title';
612
					return $response;
613
				}
614
				if (!isset($titleData['fr'])||!isset($titleData['en'])) {
615
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
616
					$response['message'] = 'invalid data format - missing french or english title';
617
					return $response;
618
				}
619
				break;
620 View Code Duplication
			case 'classification':
621
				$classificationData = json_decode(json_encode($value), true);
622
				if (!isset($classificationData['group'])&&!isset($classificationData['level'])) {
623
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
624
					$response['message'] = 'invalid data format - missing classification group and level';
625
					return $response;
626
				}
627
				if (!isset($classificationData['group'])||!isset($classificationData['level'])) {
628
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
629
					$response['message'] = 'invalid data format - missing classification group or level';
630
					return $response;
631
				}
632
633
				break;
634
			case 'department':
635
				$deptData = json_decode(json_encode($value), true);
636
				if (!isset($deptData['fr'])&&!isset($deptData['en'])) {
637
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
638
					$response['message'] = 'invalid data format - department format';
639
					return $response;
640
				}
641
				if (!isset($deptData['fr'])||!isset($deptData['en'])) {
642
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
643
					$response['message'] = 'invalid data format - missing french or english department';
644
					return $response;
645
				}
646
647
				$obj = elgg_get_entities(array(
648
					'type' => 'object',
649
					'subtype' => 'dept_list',
650
					'owner_guid' => 0
651
				));
652
				$deptListEn = json_decode($obj[0]->deptsEn, true);
653
				$provinces = array();
654
				$provinces['pov-alb'] = 'Government of Alberta';
655
				$provinces['pov-bc'] = 'Government of British Columbia';
656
				$provinces['pov-man'] = 'Government of Manitoba';
657
				$provinces['pov-nb'] = 'Government of New Brunswick';
658
				$provinces['pov-nfl'] = 'Government of Newfoundland and Labrador';
659
				$provinces['pov-ns'] = 'Government of Nova Scotia';
660
				$provinces['pov-nwt'] = 'Government of Northwest Territories';
661
				$provinces['pov-nun'] = 'Government of Nunavut';
662
				$provinces['pov-ont'] = 'Government of Ontario';
663
				$provinces['pov-pei'] = 'Government of Prince Edward Island';
664
				$provinces['pov-que'] = 'Government of Quebec';
665
				$provinces['pov-sask'] = 'Government of Saskatchewan';
666
				$provinces['pov-yuk'] = 'Government of Yukon';
667
				$deptAndProvincesEn = array_merge($deptListEn, $provinces);
668
669
670
				$deptListFr = json_decode($obj[0]->deptsFr, true);
671
				$provinces = array();
672
				$provinces['pov-alb'] = "Gouvernement de l'Alberta";
673
				$provinces['pov-bc'] = 'Gouvernement de la Colombie-Britannique';
674
				$provinces['pov-man'] = 'Gouvernement du Manitoba';
675
				$provinces['pov-nb'] = 'Gouvernement du Nouveau-Brunswick';
676
				$provinces['pov-nfl'] = 'Gouvernement de Terre-Neuve-et-Labrador';
677
				$provinces['pov-ns'] = 'Gouvernement de la Nouvelle-Écosse';
678
				$provinces['pov-nwt'] = 'Gouvernement du Territoires du Nord-Ouest';
679
				$provinces['pov-nun'] = 'Gouvernement du Nunavut';
680
				$provinces['pov-ont'] = "Gouvernement de l'Ontario";
681
				$provinces['pov-pei'] = "Gouvernement de l'Île-du-Prince-Édouard";
682
				$provinces['pov-que'] = 'Gouvernement du Québec';
683
				$provinces['pov-sask'] = 'Gouvernement de Saskatchewan';
684
				$provinces['pov-yuk'] = 'Gouvernement du Yukon';
685
				$deptAndProvincesFr = array_merge($deptListFr, $provinces);
686
687 View Code Duplication
				if (!in_array($deptData['en'], $deptAndProvincesEn)) {
688
					$response['error'] = 5;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
689
					$response['message'] = 'invalid english department name. valid names: '.json_encode($deptAndProvincesEn);
690
					return $response;
691
				}
692
693 View Code Duplication
				if (!in_array($deptData['fr'], $deptAndProvincesFr)) {
694
					$response['error'] = 5;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
695
					$response['message'] = 'invalid french department name. valid names: '.json_encode($deptAndProvincesFr);
696
					return $response;
697
				}
698
				break;
699 View Code Duplication
			case 'branch':
700
				$branchData = json_decode(json_encode($value), true);
701
				if (!isset($branchData['en'])&&!isset($branchData['fr'])) {
702
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
703
					$response['message'] = 'invalid data format - missing english and french branch name';
704
					return $response;
705
				}
706
				if (!isset($branchData['en'])||!isset($branchData['fr'])) {
707
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
708
					$response['message'] = 'invalid data format - missing english or french branch name';
709
					return $response;
710
				}
711
				break;
712 View Code Duplication
			case 'sector':
713
				$sectorData = json_decode(json_encode($value), true);
714
				if (!isset($sectorData['en'])&&!isset($sectorData['fr'])) {
715
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
716
					$response['message'] = 'invalid data format - missing english and french sector name';
717
					return $response;
718
				}
719
				if (!isset($sectorData['en'])||!isset($sectorData['fr'])) {
720
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
721
					$response['message'] = 'invalid data format - missing english or french sector name';
722
					return $response;
723
				}
724
				break;
725
			case 'location':
726 View Code Duplication
				if (!isset($value['en'])) {
727
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
728
					$response['message'] = 'missing english location data';
729
					return $response;
730
				}
731
				$locationData = json_decode(json_encode($value['en']), true);
732 View Code Duplication
				if (!isset($locationData['street'])&&!isset($locationData['city'])&&!isset($locationData['province'])&&!isset($locationData['postalCode'])&&!isset($locationData['country'])&&!isset($locationData['building'])&&!isset($locationData['floor'])&&!isset($locationData['officeNum'])) {
733
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
734
					$response['message'] = 'invalid location data';
735
					return $response;
736
				}
737 View Code Duplication
				if (!isset($locationData['street'])||!isset($locationData['city'])||!isset($locationData['province'])||!isset($locationData['postalCode'])||!isset($locationData['country'])||!isset($locationData['building'])||!isset($locationData['floor'])||!isset($locationData['officeNum'])) {
738
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
739
					$response['message'] = 'missing location data';
740
					return $response;
741
				}
742
743 View Code Duplication
				if (!isset($value['fr'])) {
744
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
745
					$response['message'] = 'missing french location data';
746
					return $response;
747
				}
748
				$locationData = json_decode(json_encode($value['fr']), true);
749 View Code Duplication
				if (!isset($locationData['street'])&&!isset($locationData['city'])&&!isset($locationData['province'])&&!isset($locationData['postalCode'])&&!isset($locationData['country'])&&!isset($locationData['building'])&&!isset($locationData['floor'])&&!isset($locationData['officeNum'])) {
750
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
751
					$response['message'] = 'invalid location data';
752
					return $response;
753
				}
754 View Code Duplication
				if (!isset($locationData['street'])||!isset($locationData['city'])||!isset($locationData['province'])||!isset($locationData['postalCode'])||!isset($locationData['country'])||!isset($locationData['building'])||!isset($locationData['floor'])||!isset($locationData['officeNum'])) {
755
					$response['error'] = 4;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
756
					$response['message'] = 'missing location data';
757
					return $response;
758
				}
759
				break;
760
			case 'email':
761
				$connection = mysqli_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, $CONFIG->dbname)or die(mysqli_error($connection));
0 ignored issues
show
Coding Style Compatibility introduced by
The function profileCreate() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
762
				mysqli_select_db($connection, $CONFIG->dbname);
763
				$emaildomain = explode('@', filter_var($value, FILTER_SANITIZE_EMAIL));
764
765
				$query = "SELECT count(*) AS num FROM email_extensions WHERE ext ='".$emaildomain[1]."'";
766
767
				$result = mysqli_query($connection, $query)or die(mysqli_error($connection));
0 ignored issues
show
Coding Style Compatibility introduced by
The function profileCreate() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
768
				$result = mysqli_fetch_array($result);
769
770
				$emailgc = explode('.', $emaildomain[1]);
771
				$gcca = $emailgc[count($emailgc) - 2] .".".$emailgc[count($emailgc) - 1];
772
773
				mysqli_close($connection);
774
775
				$resulting_error = "";
776
777
				// if domain doesn't exist in database, check if it's a gc.ca domain
778 View Code Duplication
				if ($result['num'][0] <= 0) {
779
					if ($gcca !== 'gc.ca') {
780
						$resulting_error .= elgg_echo('gcRegister:invalid_email');
781
					}
782
				}
783
784 View Code Duplication
				if ($resulting_error !== "") {
785
					$response['error'] = 3;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
786
					$response['message'] = 'invalid email or email domain - must be a valid Government of Canada email address';
787
					return $response;
788
				}
789
				break;
790
		}
791
	}
792
793
	//check for existing email
794
	$email = $userDataObj['email'];
795
	if (get_user_by_email($email)) {
796
		$response['error'] = 1;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
797
		$response['message'] = 'user with email already exists. please use profile.update call to update existing account';
798
		return $response;
799
	}
800
	//make usernaem based on email
801
	$username = strstr(strtolower($email), '@', true);
802
803
	$username = explode('.', $username);
804
	foreach ($username as $u=>$v) {
805
		$username[$u] = ucfirst($v);
806
	}
807
	$username = implode('.', $username);
808
809
	//check system for username. if is a username, append number or add number
810
	while (get_user_by_username($username)) {
811
		if (is_numeric(substr($username, -1))) {
812
			$num = substr($username, -1)+1;
813
			$username = substr($username, 0, strlen($username)-1).$num;
814
		} else {
815
			$username.='2';
816
		}
817
	}
818
	$tempPass = generateRandomString();
819
820
	//register user using data passed
821
	$userGUID = register_user($username, $tempPass, $name, $userDataObj['email']);
0 ignored issues
show
Bug introduced by
The variable $name does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
822 View Code Duplication
	if ($userGUID==false) {
0 ignored issues
show
Bug Best Practice introduced by
It seems like you are loosely comparing $userGUID of type false|integer|null against false; this is ambiguous if the integer can be zero. Consider using a strict comparison === instead.
Loading history...
823
		$response['error'] = 1;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$response was never initialized. Although not strictly required by PHP, it is generally a good practice to add $response = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
824
		$response['message'] = 'Failed creating account';
825
		return $response;
826
	}
827
828
	$user_entity = get_user($userGUID);
829
830
	foreach ($userDataObj as $field => $value) {
831
		switch ($field) {
832 View Code Duplication
			case 'title':
833
				$titleData = json_decode(json_encode($value), true);
834
835
				if ($user_entity->language === 'fr') {
836
					$user_entity->set('job', $titleData['fr'].' / '.$titleData['en']);
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::set() has been deprecated with message: 1.9

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
837
				} else {
838
					$user_entity->set('job', $titleData['en'].' / '.$titleData['fr']);
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::set() has been deprecated with message: 1.9

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
839
				}
840
841
				break;
842
			case 'classification':
843
				$classificationData = json_decode(json_encode($value), true);
844
845
				$user_entity->set('classification', json_encode($value));
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::set() has been deprecated with message: 1.9

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
846
				break;
847 View Code Duplication
			case 'department':
848
				$deptData = json_decode(json_encode($value), true);
849
850
				if ($user_entity->language === 'fr') {
851
					$user_entity->set('department', $deptData['fr'].' / '.$deptData['en']);
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::set() has been deprecated with message: 1.9

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
852
				} else {
853
					$user_entity->set('department', $deptData['en'].' / '.$deptData['fr']);
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::set() has been deprecated with message: 1.9

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
854
				}
855
				break;
856
			case 'branch':
857
				$branchData = json_decode(json_encode($value), true);
858
859
				$user_entity->set('branch', json_encode($value));
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::set() has been deprecated with message: 1.9

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
860
				break;
861
			case 'sector':
862
				$sectorData = json_decode(json_encode($value), true);
863
864
				$user_entity->set('sector', json_encode($value));
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::set() has been deprecated with message: 1.9

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
865
				break;
866
			case 'location':
867
868
				$user_entity->set('addressString', json_encode($value["en"]));
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::set() has been deprecated with message: 1.9

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
869
				$user_entity->set('addressStringFr', json_encode($value["fr"]));
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::set() has been deprecated with message: 1.9

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
870
				break;
871
			case 'phone':
872
873
				$user_entity->set('phone', $value);
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::set() has been deprecated with message: 1.9

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
874
				break;
875
			case 'mobile':
876
877
				$user_entity->set('mobile', $value);
0 ignored issues
show
Deprecated Code introduced by
The method ElggEntity::set() has been deprecated with message: 1.9

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
878
				break;
879
		}
880
	}
881
	//save user
882
	$user_entity->save();
883
	//send password reset to user
884
	send_new_password_request($userGUID);
885
	return array(
886
		"guid"=> $userGUID,
887
		"message" => "user added"
888
	);
889
}
890
function generateRandomString($length = 10)
891
{
892
	return substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length/strlen($x)))), 1, $length);
893
}
894
895
function getUserFromID($id)
896
{
897
	if (is_numeric($id)) {
898
		$user_entity = get_user($id);
899
	} else {
900
		if (strpos($id, '@')) {
901
			$user_entity = get_user_by_email($id);
902
			if (is_array($user_entity)) {
903
				if (count($user_entity)>1) {
904
					return "Found more than 1 user, please use username or GUID";
905
				} else {
906
					$user_entity = $user_entity[0];
907
				}
908
			}
909
		} else {
910
			$user_entity = get_user_by_username($id);
911
		}
912
	}
913
	return $user_entity;
914
}
915
916 View Code Duplication
function buildDate($month, $year)
917
{
918
	switch ($month) {
919
		case 1:
920
			$string = "01/";
921
			break;
922
		case 2:
923
			$string = "02/";
924
			break;
925
		case 3:
926
			$string = "03/";
927
			break;
928
		case 4:
929
			$string = "04/";
930
			break;
931
		case 5:
932
			$string = "05/";
933
			break;
934
		case 6:
935
			$string = "06/";
936
			break;
937
		case 7:
938
			$string = "07/";
939
			break;
940
		case 8:
941
			$string = "08/";
942
			break;
943
		case 9:
944
			$string = "09/";
945
			break;
946
		case 10:
947
			$string = "10/";
948
			break;
949
		case 11:
950
			$string = "11/";
951
			break;
952
		case 12:
953
			$string = "12/";
954
			break;
955
	}
956
	return $string.$year;
0 ignored issues
show
Bug introduced by
The variable $string does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
957
}
958