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

mod/embed/start.php (3 issues)

1
<?php
2
/**
3
 * Elgg media embed plugin
4
 *
5
 * @package ElggEmbed
6
 */
7
8
/**
9
 * Init function
10
 *
11
 * @return void
12
 */
13
function embed_init() {
14 31
	elgg_extend_view('elgg.css', 'embed/css');
15 31
	elgg_extend_view('admin.css', 'embed/css');
16
17 31
	if (elgg_is_logged_in()) {
18
		elgg_register_plugin_hook_handler('register', 'menu:longtext', 'embed_longtext_menu');
19
	}
20 31
	elgg_register_plugin_hook_handler('register', 'menu:embed', 'embed_select_tab', 1000);
21
22
	// Page handler for the modal media embed
23 31
	elgg_register_page_handler('embed', 'embed_page_handler');
24
25 31
	elgg_register_plugin_hook_handler('entity:icon:url', 'object', 'embed_set_thumbnail_url', 1000);
26 31
}
27
28
/**
29
 * Add the embed menu item to the long text menu
30
 *
31
 * @param string         $hook  'register'
32
 * @param string         $type  'menu:longtext'
33
 * @param ElggMenuItem[] $items current return value
34
 * @param array          $vars  supplied params
35
 *
36
 * @return void|ElggMenuItem[]
37
 */
38
function embed_longtext_menu($hook, $type, $items, $vars) {
39
40
	if (elgg_get_context() == 'embed') {
41
		return;
42
	}
43
	
44
	$id = elgg_extract('textarea_id', $vars);
45
	if ($id === null) {
46
		return;
47
	}
48
49
	$url = 'embed';
50
51
	$page_owner = elgg_get_page_owner_entity();
52
	if ($page_owner instanceof ElggGroup && $page_owner->isMember()) {
53
		$url = elgg_http_add_url_query_elements($url, [
54
			'container_guid' => $page_owner->guid,
55
		]);
56
	}
57
58
	$items[] = ElggMenuItem::factory([
59
		'name' => 'embed',
60
		'href' => 'javascript:',
61
		'data-colorbox-opts' => json_encode([
62
			'href' => elgg_normalize_url($url),
63
		]),
64
		'text' => elgg_echo('embed:media'),
65
		'rel' => "embed-lightbox-{$id}",
66
		'link_class' => "elgg-longtext-control elgg-lightbox embed-control embed-control-{$id} elgg-lightbox",
67
		'deps' => ['elgg/embed'],
68
		'priority' => 10,
69
	]);
70
71
	return $items;
72
}
73
74
/**
75
 * Select the correct embed tab for display
76
 *
77
 * @param string         $hook  'register'
78
 * @param string         $type  'menu:embed'
79
 * @param ElggMenuItem[] $items current return value
80
 * @param array          $vars  supplied params
81
 *
82
 * @return ElggMenuItem[]
83
 */
84
function embed_select_tab($hook, $type, $items, $vars) {
2 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

84
function embed_select_tab(/** @scrutinizer ignore-unused */ $hook, $type, $items, $vars) {

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 $vars 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

84
function embed_select_tab($hook, $type, $items, /** @scrutinizer ignore-unused */ $vars) {

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

84
function embed_select_tab($hook, /** @scrutinizer ignore-unused */ $type, $items, $vars) {

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...
85
86
	// can this ba called from page handler instead?
87
	$page = get_input('page');
88
	$tab_name = array_pop(explode('/', $page));
89
	foreach ($items as $item) {
90
		if ($item->getName() == $tab_name) {
91
			$item->setSelected();
92
			elgg_set_config('embed_tab', $item);
93
		}
94
	}
95
96
	if (!elgg_get_config('embed_tab') && count($items) > 0) {
97
		$items[0]->setSelected();
98
		elgg_set_config('embed_tab', $items[0]);
99
	}
100
	
101
	return $items;
102
}
103
104
/**
105
 * Serves the content for the embed lightbox
106
 *
107
 * @param array $page URL segments
108
 *
109
 * @return true
110
 */
111
function embed_page_handler($page) {
112
113
	elgg_ajax_gatekeeper();
114
115
	$container_guid = (int) get_input('container_guid');
116
	if ($container_guid) {
117
		$container = get_entity($container_guid);
118
119
		if ($container instanceof ElggGroup && $container->isMember()) {
120
			// embedding inside a group so save file to group files
121
			elgg_set_page_owner_guid($container_guid);
122
		}
123
	}
124
125
	set_input('page', $page[1]);
126
127
	echo elgg_view('embed/layout');
128
	return true;
129
}
130
131
/**
132
 * A special listing function for selectable content
133
 *
134
 * This calls a custom list view for entities.
135
 *
136
 * @param array $entities Array of ElggEntity objects
137
 * @param array $vars     Display parameters
138
 * @return string
139
 */
140
function embed_list_items($entities, $vars = []) {
141
142
	$defaults = [
143
		'items' => $entities,
144
		'list_class' => 'elgg-list-entity',
145
	];
146
147
	$vars = array_merge($defaults, $vars);
148
149
	return elgg_view('embed/list', $vars);
150
}
151
152
/**
153
 * Set the options for the list of embedable content
154
 *
155
 * @param array $options additional options
156
 *
157
 * @return array
158
 */
159
function embed_get_list_options($options = []) {
160
161
	$container_guids = [elgg_get_logged_in_user_guid()];
162
	if (elgg_get_page_owner_guid()) {
163
		$page_owner_guid = elgg_get_page_owner_guid();
164
		if ($page_owner_guid != elgg_get_logged_in_user_guid()) {
165
			$container_guids[] = $page_owner_guid;
166
		}
167
	}
168
169
	$defaults = [
170
		'limit' => 6,
171
		'container_guids' => $container_guids,
172
		'item_class' => 'embed-item',
173
		'no_results' => elgg_echo('notfound'),
174
	];
175
176
	$options = array_merge($defaults, $options);
177
178
	return $options;
179
}
180
181
/**
182
 * Substitutes thumbnail's inline URL with a permanent URL
183
 * Registered with a very late priority of 1000 to ensure we replace all previous values
184
 *
185
 * @param string $hook   "entity:icon:url"
186
 * @param string $type   "object"
187
 * @param string $return URL
188
 * @param array  $params Hook params
189
 * @return string
190
 */
191
function embed_set_thumbnail_url($hook, $type, $return, $params) {
192
193 1
	if (!elgg_in_context('embed')) {
194 1
		return;
195
	}
196
	
197
	$entity = elgg_extract('entity', $params);
198
	$size = elgg_extract('size', $params);
199
200
	$thumbnail = $entity->getIcon($size);
201
	if (!$thumbnail->exists()) {
202
		return;
203
	}
204
205
	return elgg_get_embed_url($entity, $size);
206
}
207
208
return function() {
209 18
	elgg_register_event_handler('init', 'system', 'embed_init');
210
};
211