Check that arguments can be used as reference when one is expected
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)); |
||
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
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 |