Passed
Push — master ( c0a3a7...3b84a4 )
by Jeroen
58:51
created

mod/profile/start.php (6 issues)

1
<?php
2
/**
3
 * Elgg profile plugin
4
 *
5
 * @package ElggProfile
6
 */
7
8
/**
9
 * Profile init function
10
 *
11
 * @return void
12
 */
13
function profile_init() {
14
15
	// Register a URL handler for users
16 31
	elgg_register_plugin_hook_handler('entity:url', 'user', 'profile_set_url');
17
18 31
	elgg_register_page_handler('profile', 'profile_page_handler');
0 ignored issues
show
Deprecated Code introduced by
The function elgg_register_page_handler() has been deprecated: 3.0 ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

18
	/** @scrutinizer ignore-deprecated */ elgg_register_page_handler('profile', 'profile_page_handler');

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

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

Loading history...
19
	
20
	// unregister default core page handler for displaying users
21 31
	elgg_unregister_page_handler('user');
0 ignored issues
show
Deprecated Code introduced by
The function elgg_unregister_page_handler() has been deprecated. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

21
	/** @scrutinizer ignore-deprecated */ elgg_unregister_page_handler('user');
Loading history...
22
23 31
	elgg_extend_view('elgg.css', 'profile/css');
24
	
25 31
	elgg_register_ajax_view('forms/profile/fields/add');
26
27
	// allow ECML in parts of the profile
28 31
	elgg_register_plugin_hook_handler('get_views', 'ecml', 'profile_ecml_views_hook');
29
30
	// allow admins to set default widgets for users on profiles
31 31
	elgg_register_plugin_hook_handler('get_list', 'default_widgets', 'profile_default_widgets_hook');
32
	
33 31
	elgg_register_plugin_hook_handler('register', 'menu:topbar', '_profile_topbar_menu');
34 31
	elgg_register_plugin_hook_handler('register', 'menu:title', '_profile_title_menu');
35 31
	elgg_register_plugin_hook_handler('register', 'menu:page', '_profile_admin_page_menu');
36 31
	elgg_register_plugin_hook_handler('register', 'menu:page', '_profile_user_page_menu');
37 31
	elgg_register_plugin_hook_handler('register', 'menu:user_hover', '_profile_user_hover_menu');
38 31
}
39
40
/**
41
 * Profile page handler
42
 *
43
 * @param array $page Array of URL segments passed by the page handling mechanism
44
 * @return bool
45
 */
46
function profile_page_handler($page) {
47
48
	if (isset($page[0])) {
49
		$username = $page[0];
50
		$user = get_user_by_username($username);
51
		elgg_set_page_owner_guid($user->guid);
52
	} elseif (elgg_is_logged_in()) {
53
		forward(elgg_get_logged_in_user_entity()->getURL());
54
	}
55
56
	// short circuit if invalid or banned username
57
	if (!$user || ($user->isBanned() && !elgg_is_admin_logged_in())) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $user does not seem to be defined for all execution paths leading up to this point.
Loading history...
58
		register_error(elgg_echo('profile:notfound'));
59
		forward();
60
	}
61
62
	$action = null;
63
	if (isset($page[1])) {
64
		$action = $page[1];
65
	}
66
	
67
	if ($action == 'edit') {
68
		// use the core profile edit page
69
		echo elgg_view_resource('profile/edit');
70
		return true;
71
	}
72
73
	echo elgg_view_resource('profile/view', [
74
		'username' => $page[0],
75
	]);
76
	return true;
77
}
78
79
/**
80
 * Profile URL generator for $user->getUrl();
81
 *
82
 * @param string $hook   'entity:url'
83
 * @param string $type   'user'
84
 * @param string $url    current return value
85
 * @param array  $params supplied params
86
 *
87
 * @return void|string
88
 */
89
function profile_set_url($hook, $type, $url, $params) {
90
	
91 1
	$user = elgg_extract('entity', $params);
92 1
	if (!$user instanceof ElggUser) {
93
		return;
94
	}
95
	
96 1
	return "profile/{$user->username}";
97
}
98
99
/**
100
 * Parse ECML on parts of the profile
101
 *
102
 * @param string $hook         'get_views'
103
 * @param string $type         'ecml'
104
 * @param array  $return_value current return value
105
 *
106
 * @return array
107
 */
108
function profile_ecml_views_hook($hook, $type, $return_value) {
109
	$return_value['profile/profile_content'] = elgg_echo('profile');
110
111
	return $return_value;
112
}
113
114
/**
115
 * Register profile widgets with default widgets
116
 *
117
 * @param string $hook   'get_list'
118
 * @param string $type   'default_widgets'
119
 * @param array  $return current return value
120
 *
121
 * @return array
122
 */
123
function profile_default_widgets_hook($hook, $type, $return) {
124 18
	$return[] = [
125 18
		'name' => elgg_echo('profile'),
126 18
		'widget_context' => 'profile',
127 18
		'widget_columns' => 2,
128
129 18
		'event' => 'create',
130 18
		'entity_type' => 'user',
131
		'entity_subtype' => ELGG_ENTITIES_ANY_VALUE,
132
	];
133
134 18
	return $return;
135
}
136
137
/**
138
 * This function loads a set of default fields into the profile, then triggers a hook letting other plugins to edit
139
 * add and delete fields.
140
 *
141
 * Note: This is a secondary system:init call and is run at a super low priority to guarantee that it is called after all
142
 * other plugins have initialised.
143
 *
144
 * @return void
145
 *
146
 * @access private
147
 */
148
function _profile_fields_setup() {
149
	$profile_defaults =  [
150 31
		'description' => 'longtext',
151
		'briefdescription' => 'text',
152
		'location' => 'location',
153
		'interests' => 'tags',
154
		'skills' => 'tags',
155
		'contactemail' => 'email',
156
		'phone' => 'text',
157
		'mobile' => 'text',
158
		'website' => 'url',
159
		'twitter' => 'text',
160
	];
161
162 31
	$loaded_defaults = [];
163 31
	$fieldlist = elgg_get_config('profile_custom_fields');
164 31
	if ($fieldlist || $fieldlist === '0') {
165
		$fieldlistarray = explode(',', $fieldlist);
166
		foreach ($fieldlistarray as $listitem) {
167
			if ($translation = elgg_get_config("admin_defined_profile_{$listitem}")) {
168
				$type = elgg_get_config("admin_defined_profile_type_{$listitem}");
169
				$loaded_defaults["admin_defined_profile_{$listitem}"] = $type;
170
				add_translation(get_current_language(), ["profile:admin_defined_profile_{$listitem}" => $translation]);
171
			}
172
		}
173
	}
174
175 31
	if (count($loaded_defaults)) {
176
		elgg_set_config('profile_using_custom', true);
177
		$profile_defaults = $loaded_defaults;
178
	}
179
	
180 31
	$profile_fields = elgg_trigger_plugin_hook('profile:fields', 'profile', null, $profile_defaults);
181 31
	elgg_set_config('profile_fields', $profile_fields);
182
183
	// register any tag metadata names
184 31
	foreach ($profile_fields as $name => $type) {
185 31
		if ($type == 'tags' || $type == 'location' || $type == 'tag') {
186 31
			elgg_register_tag_metadata_name($name);
187
			// register a tag name translation
188 31
			add_translation(get_current_language(), ["tag_names:$name" => elgg_echo("profile:$name")]);
189
		}
190
	}
191 31
}
192
193
/**
194
 * Register menu items for the topbar menu
195
 *
196
 * @param \Elgg\Hook $hook 'register' 'menu:topbar'
197
 *
198
 * @return void|ElggMenuItem[]
199
 *
200
 * @access private
201
 * @since 3.0
202
 */
203
function _profile_topbar_menu(\Elgg\Hook $hook) {
204
205 1
	$viewer = elgg_get_logged_in_user_entity();
206 1
	if (!$viewer) {
207 1
		 return;
208
	}
209
	$return = $hook->getValue();
210
	
211
	$return[] = \ElggMenuItem::factory([
212
		'name' => 'profile',
213
		'href' => $viewer->getURL(),
214
		'text' => elgg_echo('profile'),
215
		'icon' => 'user',
216
		'parent_name' => 'account',
217
		'section' => 'alt',
218
		'priority' => 100,
219
	]);
220
	
221
	return $return;
222
}
223
224
/**
225
 * Register menu items for the user hover menu
226
 *
227
 * @param \Elgg\Hook $hook 'register' 'menu:user_hover'
228
 *
229
 * @return void|ElggMenuItem[]
230
 *
231
 * @access private
232
 * @since 3.0
233
 */
234
function _profile_user_hover_menu(\Elgg\Hook $hook) {
235
236 1
	if (!elgg_is_logged_in()) {
237 1
		return;
238
	}
239
	
240
	$user = $hook->getEntityParam();
241
	if (!($user instanceof \ElggUser) || !$user->canEdit()) {
242
		return;
243
	}
244
	
245
	$return = $hook->getValue();
246
	$return[] = ElggMenuItem::factory([
247
		'name' => 'profile:edit',
248
		'text' => elgg_echo('profile:edit'),
249
		'icon' => 'address-card',
250
		'href' => "profile/$user->username/edit",
251
		'section' => (elgg_get_logged_in_user_guid() == $user->guid)? 'action' : 'admin',
252
	]);
253
	
254
	return $return;
255
}
256
257
/**
258
 * Register menu items for the admin page menu
259
 *
260
 * @param \Elgg\Hook $hook 'register' 'menu:page'
261
 *
262
 * @return void|ElggMenuItem[]
263
 *
264
 * @access private
265
 * @since 3.0
266
 */
267
function _profile_admin_page_menu(\Elgg\Hook $hook) {
268
269 1
	if (!elgg_in_context('admin') || !elgg_is_admin_logged_in()) {
270 1
		return;
271
	}
272
	
273
	$return = $hook->getValue();
274
	
275
	$return[] = \ElggMenuItem::factory([
276
		'name' => 'configure_utilities:profile_fields',
277
		'text' => elgg_echo('admin:configure_utilities:profile_fields'),
278
		'href' => 'admin/configure_utilities/profile_fields',
279
		'section' => 'configure',
280
		'parent_name' => 'configure_utilities',
281
	]);
282
	
283
	return $return;
284
}
285
286
/**
287
 * Register menu items for the page menu
288
 *
289
 * @param \Elgg\Hook $hook 'register' 'menu:page'
290
 *
291
 * @return void|ElggMenuItem
292
 *
293
 * @access private
294
 * @since 3.0
295
 */
296
function _profile_user_page_menu(\Elgg\Hook $hook) {
297
298 1
	$owner = elgg_get_page_owner_entity();
299 1
	if (!$owner instanceof \ElggUser) {
300
		return;
301
	}
302
	
303 1
	$return = $hook->getValue();
304
	
305 1
	$return[] = \ElggMenuItem::factory([
306 1
		'name' => 'edit_profile',
307 1
		'href' => "profile/{$owner->username}/edit",
308 1
		'text' => elgg_echo('profile:edit'),
309 1
		'section' => '1_profile',
310
		'contexts' => ['settings'],
311
	]);
312
	
313 1
	return $return;
314
}
315
316
/**
317
 * Register menu items for the title menu
318
 *
319
 * @param string $hook   'register'
320
 * @param string $type   'menu:title'
321
 * @param array  $return Current return value
322
 * @param array  $params Hook parameters
323
 *
324
 * @return void|ElggMenuItem[]
325
 *
326
 * @access private
327
 * @since 3.0
328
 */
329
function _profile_title_menu($hook, $type, $return, $params) {
3 ignored issues
show
The parameter $hook is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

329
function _profile_title_menu(/** @scrutinizer ignore-unused */ $hook, $type, $return, $params) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
The parameter $type is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

329
function _profile_title_menu($hook, /** @scrutinizer ignore-unused */ $type, $return, $params) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
The parameter $params is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

329
function _profile_title_menu($hook, $type, $return, /** @scrutinizer ignore-unused */ $params) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
330
331 1
	if (!elgg_in_context('profile') || elgg_in_context('profile_edit')) {
332 1
		return;
333
	}
334
	
335
	$user = elgg_get_page_owner_entity();
336
	
337
	// grab the actions and admin menu items from user hover
338
	$menu = elgg()->menus->getMenu('user_hover', [
339
		'entity' => $user,
340
		'username' => $user->username,
341
	]);
342
	
343
	$actions = $menu->getSection('action', []);
344
	foreach ($actions as $action) {
345
		$action->addLinkClass('elgg-button elgg-button-action');
346
		$return[] = $action;
347
	}
348
	
349
	return $return;
350
}
351
352
return function() {
353 18
	elgg_register_event_handler('init', 'system', 'profile_init', 1);
354 18
	elgg_register_event_handler('init', 'system', '_profile_fields_setup', 10000); // Ensure this runs after other plugins
355
};
356