diff options
Diffstat (limited to 'mod/embed/start.php')
| -rw-r--r-- | mod/embed/start.php | 165 | 
1 files changed, 165 insertions, 0 deletions
diff --git a/mod/embed/start.php b/mod/embed/start.php new file mode 100644 index 000000000..1da35aa46 --- /dev/null +++ b/mod/embed/start.php @@ -0,0 +1,165 @@ +<?php +/** + * Elgg media embed plugin + * + * @package ElggEmbed + */ + + +elgg_register_event_handler('init', 'system', 'embed_init'); + +/** + * Init function + */ +function embed_init() { +	elgg_extend_view('css/elgg', 'embed/css'); +	elgg_extend_view('css/admin', 'embed/css'); + +	if (elgg_is_logged_in()) { +		elgg_register_plugin_hook_handler('register', 'menu:longtext', 'embed_longtext_menu'); +	} +	elgg_register_plugin_hook_handler('register', 'menu:embed', 'embed_select_tab', 1000); + +	// Page handler for the modal media embed +	elgg_register_page_handler('embed', 'embed_page_handler'); +	 +	$embed_js = elgg_get_simplecache_url('js', 'embed/embed'); +	elgg_register_simplecache_view('js/embed/embed'); +	elgg_register_js('elgg.embed', $embed_js, 'footer'); +} + +/** + * Add the embed menu item to the long text menu + * + * @param string $hook + * @param string $type + * @param array $items + * @param array $vars + * @return array + */ +function embed_longtext_menu($hook, $type, $items, $vars) { + +	if (elgg_get_context() == 'embed') { +		return $items; +	} + +	$url = 'embed'; + +	$page_owner = elgg_get_page_owner_entity(); +	if (elgg_instanceof($page_owner, 'group') && $page_owner->isMember()) { +		$url = 'embed?container_guid=' . $page_owner->getGUID(); +	} + +	$items[] = ElggMenuItem::factory(array( +		'name' => 'embed', +		'href' => $url, +		'text' => elgg_echo('embed:media'), +		'rel' => "embed-lightbox-{$vars['id']}", +		'link_class' => "elgg-longtext-control elgg-lightbox embed-control embed-control-{$vars['id']}", +		'priority' => 10, +	)); + +	elgg_load_js('lightbox'); +	elgg_load_css('lightbox'); +	elgg_load_js('jquery.form'); +	elgg_load_js('elgg.embed'); +	 +	return $items; +} + +/** + * Select the correct embed tab for display + * + * @param string $hook + * @param string $type + * @param array $items + * @param array $vars + */ +function embed_select_tab($hook, $type, $items, $vars) { + +	// can this ba called from page handler instead? +	$page = get_input('page'); +	$tab_name = array_pop(explode('/', $page)); +	foreach ($items as $item) { +		if ($item->getName() == $tab_name) { +			$item->setSelected(); +			elgg_set_config('embed_tab', $item); +		} +	} + +	if (!elgg_get_config('embed_tab') && count($items) > 0) { +		$items[0]->setSelected(); +		elgg_set_config('embed_tab', $items[0]); +	} +} + +/** + * Serves the content for the embed lightbox + * + * @param array $page URL segments + */ +function embed_page_handler($page) { + +	$container_guid = (int)get_input('container_guid'); +	if ($container_guid) { +		$container = get_entity($container_guid); + +		if (elgg_instanceof($container, 'group') && $container->isMember()) { +			// embedding inside a group so save file to group files +			elgg_set_page_owner_guid($container_guid); +		} +	} + +	echo elgg_view('embed/layout'); + +	// exit because this is in a modal display. +	exit; +} + +/** + * A special listing function for selectable content + * + * This calls a custom list view for entities.  + * + * @param array $entities Array of ElggEntity objects + * @param array $vars     Display parameters + * @return string + */ +function embed_list_items($entities, $vars = array()) { + +	$defaults = array( +		'items' => $entities, +		'list_class' => 'elgg-list-entity', +	); + +	$vars = array_merge($defaults, $vars); + +	return elgg_view('embed/list', $vars); +} + +/** + * Set the options for the list of embedable content + * + * @param array $options + * @return array + */ +function embed_get_list_options($options = array()) { + +	$container_guids = array(elgg_get_logged_in_user_guid()); +	if (elgg_get_page_owner_guid()) { +		$page_owner_guid = elgg_get_page_owner_guid(); +		if ($page_owner_guid != elgg_get_logged_in_user_guid()) { +			$container_guids[] = $page_owner_guid; +		} +	} + +	$defaults = array( +		'limit' => 6, +		'container_guids' => $container_guids, +		'item_class' => 'embed-item', +	); + +	$options = array_merge($defaults, $options); + +	return $options; +}  | 
