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) { |
|
|
|
|
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
|
|
|
|
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.