diff options
Diffstat (limited to 'mod')
21 files changed, 333 insertions, 742 deletions
diff --git a/mod/embed/README.txt b/mod/embed/README.txt index 33c9fff65..51b120d96 100644 --- a/mod/embed/README.txt +++ b/mod/embed/README.txt @@ -1,198 +1,76 @@ -Embed plugin - Point-and-click embedding using ECML. +Embed plugin  CONTENTS:  	1. Overview -	2. Extending Embed -		1. Registering and Populating Embed Sections -		2. Registering Upload Sections -		3. Advanced Layouts -		4. Javascript -	3. Other Editors and Embed +	2. Adding a Tab +	3. Populating a Select Tab +	4. Populating an Upload Tab +	5. Other WYSIWYG Editors and Embed  1. Overview  	The Embed plugin is a simple way to allow users to link to or embed  	their personal network content or third party resources in any text area. -	 -	Embed includes support for the default input/longtext view, but is easily -	extendable to include support for rich text editors like TinyMCE or CK  -	Editor. +	The Embed plugin adds a menu item to the longtext menu. Clicking on this +	link pops up a lightbox. The lightbox supports lists of content for insertion +	and uploading new content. -2. Extending Embed -	The Embed plugin can be extended by other plugins using a combination -	of plugin hooks and specific views. -	 -	Plugins can register a new content section or a new upload section. -	 -	Plugins can also provide special views for their embed section, if -	they require something the default view doesn't provide. +2. Adding a Tab +	The Embed plugin uses the menu system to manage its tabs. Use +	elgg_register_menu_item() for the embed menu to add a new tab like this: -2.1  Registering and Populating Embed Sections -	Plugins providing embed content should reply to two hooks: embed_get_sections:all -	and embed_get_items:$section_name. -	 -	Embed emits the 'embed_get_sections' hook to populate the tabs of the modal display. -	Plugins supporting embed should reply by pushing an array element to the passed -	$value. -	 -	Register plugins hooks like this: -	 -		register_plugin_hook('embed_get_sections', 'all', 'my_plugin_embed_get_sections'); -		 -		function my_plugin_embed_get_sections($hook, $type, $value, $params) { -			$value['videolist'] = array( -				'name' => elgg_echo('my_plugin'), -				'layout' => 'list', -				'icon_size' => 'medium', -			); -		 -			return $value; -		} -	 -	The index of the returned array is the id used for the Embed section. -	 -	Options available in the array value are: -		name => The friendly name to display in the tab -		layout => The layout style to use.  Layouts are found in the  -				embed/layouts/$layout and embed/item/$layout views.   -				Default supported layouts are list and gallery. -		icon_size => The icon size to use for in the item list. -		 -		 -	Embed emits the 'embed_get_items' hook to populate the embed section.  Plugins -	supporting embed should reply by returning an array of ElggEntities, which will -	be formatted by Embed.  If you need specific formatting for items, see section 2.3. -	 -		register_plugin_hook('embed_get_items', 'videolist', 'videolist_embed_get_items'); -		 -		function my_plugin_embed_get_items($hook, $type, $value, $params) { -			$options = array( -				'owner_guid' => get_loggedin_userid(), -				'type_subtype_pair' => array('object' => 'my_plugin_type'), -				'count' => TRUE -			); -		 -			if ($count = elgg_get_entities($options)) { -				$value['count'] += $count; -			 -				unset($options['count']); -				$options['offset'] = $params['offset']; -				$options['limit'] = $params['limit']; -			 -				$items = elgg_get_entities($options); -			 -				$value['items'] = array_merge($items, $value['items']); -			} -		 -			return $value; -		} -		 -		Values passed in $params are: -			offset - Offset for entity list. -			limit - Limit for entity list. -			section - The current active section. -			upload_sections - Valid upload sections. -			internal_name - Internal name of the input field -			 -		The function should return $value as: -			items - An array of ElggEntities -			count - The count of all available entities to embed -			 -		In case other plugins want to mangle the value, be sure to -		check for existing values before appending. +	$item = ElggMenuItem::factory(array( +		'name' => 'file', +		'text' => elgg_echo('file'), +		'priority' => 10, +		'data' => array( +			'options' => array( +				'type' => 'object', +				'subtype' => 'file', +			), +		), +	)); +	elgg_register_menu_item('embed', $item); +	Parameters: +		name: The unique name of the tab. +		text: The text shown on the tab +		priority: Placement of the tab. +		data: An array of parameters for creating the tab and its content. +			When listing content using the embed list view, pass the options for the +			elgg_list_entities() function as 'options'. +			When using a custom view for listing content or for uploading new +			content, pass the view name as 'view'. + +	See the file plugin for examples of registering both tab types. + + +3. Populating a Content Select Tab +	Nothing should be required other than setting the options parameter array +	when registering the tab. See the view embed/item to see how an entity is +	rendered. + +	If creating a custom list, the <li> elements must have a class of .embed-item. +	The HTML content that is inserted must use the class .embed-insert. + + +4. Populating an Upload Tab +	The view that is registered must be defined. It must include a form for +	uploading the content. The form must .elgg-form-embed. Somewhere in the view +	must be a hidden input field with the name embed_hidden with its value be +	the name of the tab to forward the user to when uploading is complete. + +	See the view embed/file_upload/content for an example -2.2 Registering Upload Sections -	Embed includes a special tab, Upload, that allows users to immediatley -	upload a new item.  Like the embed sections, plugins can extend this -	to add their own upload form. -	 -	Embed emits the embed_get_upload_sections:all hook to populate the -	dropdown in the upload tab.  Plugins should respond to this hook -	by returning an array with details about the upload section:   -	 -		register_plugin_hook('embed_get_upload_sections', 'all', 'my_plugin_embed_get_upload_sections'); -		 -		function my_plugin_embed_get_upload_sections($hook, $type, $value, $params) { -			$value['my_plugin'] = array( -				'name' => elgg_echo('my_plugin'), -				'view' => 'my_plugin/forms/embed_upload' -			); -	 -			return $value; -		} -		 -	The array index is the ID of the upload section, and the values are: -		name - The friendly name of the upload section -		view - The view to use for the upload section's content -	 -	The upload form view should use AJAX to upload a file and return -	the user to the correct section or automatically insert the new upload -	into the text area.  See Tidypics as an example.  -	 -	 -2.3 Advanced Layouts -	By default, Embed will automatically format items returned by  -	embed_get_items hooks.  If you need special formatting you can -	override both the content and layout views. -	 -	Embed looks for a section-specific views before defaulting to built -	in formatting: -		embed/$section/content - The content of the embed section -								including all headers and navigation elements. -		embed/$section/item/$layout - The content of the embed section -								for the specific layout.  Inserted -								between navigation elements. -								 -	Embed also supports adhoc layouts that can be shared among different plugins. -	To use a specific layout, register the embed section with your own layout -	and create the appropriate layout view: -	 -		function my_plugin_embed_get_sections($hook, $type, $value, $params) { -			$value['videolist'] = array( -				'name' => elgg_echo('my_plugin'), -				'layout' => 'shared_embed_layout', -				'icon_size' => 'medium', -			); -		 -			return $value; -		} -		 -		Create the views 'embed/layouts/shared_embed_layout' and  -		'embed/items/shared_embed_layout.'  See the default list and  -		gallery layouts as examples. -		 -		 -2.4 Javascript -	If you use a custom layout you need to provide a way to insert -	the user's selection into the current editor.  Usually this will be -	an onClick event via Javascript.  Embed provides a helper function for -	this: -	 -	elggEmbedInsertContent(content, textAreaId) -	 -	Content is the pre-formatted content to insert into the text area, -	and textAreaId is the name of the text area.  This name is -	sent via GET as 'internal_name.' -	 -3. Other Editors and Embed +5. Other WYSIWYG Editors and Embed  	Embed ships with support for the default input/longtext textarea. -	Plugins replacing this view are expected to include Javascript to +	Plugins replacing this view are expected to include JaVascript to  	allow embed to work with the new editors. -	The elggEmbedInsertContent() JS function can be extened for custom -	text editors by extending the embed/custom_insert_js view.  Plugins  -	should extend this view with javascript code that inserts -	content into the specific text area.  Variables available within -	this view are: -		str content The content to insert. -		str textAreaId The name of the textarea to receive the content. -	 -	Note: Extend this view; don't override it.  It is important to correctly -	extend this view for compatibility across multiple plugins and textarea  -	states.  Your custom JS should run without error no matter plugin order  -	or rich text editor status.  See TinyMCE as an example of how to losely  -	extend this function.
\ No newline at end of file +	To add custom JavaScript into the Embed plugin's elgg.embed.insert() function, +	override the view embed/custom_insert_js. The textarea jQuery object is +	available as the variable textArea and the content to be inserted is the +	variable content. See the TinyMCE plugin for an example of this view.
\ No newline at end of file diff --git a/mod/embed/languages/en.php b/mod/embed/languages/en.php index 287d34ca1..6ae99a56f 100644 --- a/mod/embed/languages/en.php +++ b/mod/embed/languages/en.php @@ -5,7 +5,6 @@   */  $english = array( -	'media:insert' => 'Embed content',  	'embed:embed' => 'Embed',  	'embed:media' => 'Embed content',  	'embed:instructions' => 'Click on any file to embed it into your content.', diff --git a/mod/embed/start.php b/mod/embed/start.php index 6c26163e9..015c0c0e4 100644 --- a/mod/embed/start.php +++ b/mod/embed/start.php @@ -15,6 +15,7 @@ function embed_init() {  	elgg_extend_view('css/elgg', 'embed/css');  	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'); @@ -40,7 +41,7 @@ function embed_longtext_menu($hook, $type, $items, $vars) {  	$items[] = ElggMenuItem::factory(array(  		'name' => 'embed',  		'href' => "embed", -		'text' => elgg_echo('media:insert'), +		'text' => elgg_echo('embed:media'),  		'rel' => 'lightbox',  		'link_class' => "elgg-longtext-control elgg-lightbox embed-control embed-control-{$vars['id']}",  		'priority' => 10, @@ -54,68 +55,84 @@ function embed_longtext_menu($hook, $type, $items, $vars) {  }  /** - * Serves pages for upload and embed. + * Select the correct embed tab for display   * - * @param $page + * @param string $hook + * @param string $type + * @param array $items + * @param array $vars   */ -function embed_page_handler($page) { -	if (!isset($page[0])) { -		$page[0] = 'embed'; +function embed_select_tab($hook, $type, $items, $vars) { + +	$tab_name = array_pop(explode('/', full_url())); +	foreach ($items as $item) { +		if ($item->getName() == $tab_name) { +			$item->setSelected(); +			elgg_set_config('embed_tab', $item); +		}  	} -	switch ($page[0]) { -		case 'upload': -			echo elgg_view('embed/upload'); -			break; -		case 'embed': -		default: -			// trigger hook to get section tabs -			// use views for embed/section/ -			//	listing -			//	item -			// default to embed/listing | item if not found. - -			// @todo the menu system is good for registering and sorting, but not great for -			// displaying tabs. -			// Pulling in the menu manually and passing it through the embed/tabs view. -			// We should work on making it easier to use tabs through the menu system, then fix -			// this mess. -			$menus = get_config('menus'); -			$menu = $menus['embed:sections']; - -			$sections = array(); -			$upload_sections = array(); - -			foreach ($menu as $item) { -				switch ($item->section) { -					case 'upload': -						$upload_sections[$item->getName()] = array( -							'name' => $item->getText(), -						); -						break; - -					default: -						$sections[$item->getName()] = array( -							'name' => $item->getText(), -						); -						break; -				} -			} - -			$active_section = get_input('active_section', ''); -			$active_section = preg_replace('[\W]', '', $active_section); -			$internal_id = get_input('internal_id', ''); -			$internal_id = preg_replace('[\W]', '', $internal_id); - -			echo elgg_view('embed/embed', array( -				'sections' => $sections, -				'active_section' => $active_section, -				'upload_sections' => $upload_sections, -				'internal_id' => $internal_id -			)); -			break; +	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) { + +	echo elgg_view('embed/layout');  	// exit because this is in a modal display.  	exit; -}
\ No newline at end of file +} + +/** + * 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()) { + +	if (elgg_get_page_owner_guid()) { +		$container_guid = elgg_get_page_owner_guid(); +	} else { +		$container_guid = elgg_get_logged_in_user_guid(); +	} + +	$defaults = array( +		'limit' => 6, +		'container_guid' => $container_guid, +		'item_class' => 'embed-item', +	); + +	$options = array_merge($defaults, $options); + +	return $options; +} diff --git a/mod/embed/views/default/embed/css.php b/mod/embed/views/default/embed/css.php index 03373da2b..034c0fcfe 100644 --- a/mod/embed/views/default/embed/css.php +++ b/mod/embed/views/default/embed/css.php @@ -8,7 +8,7 @@  .embed-wrapper {  	width: 730px;  	min-height: 400px; -	margin: 15px; +	margin: 20px 15px;  }  .embed-wrapper h2 {  	color: #333333; @@ -28,270 +28,10 @@  .embed-wrapper p {  	color: #333;  } -.embed-wrapper .elgg-image-block:hover { -	background-color: #eee; -} -<?php -return true; -?> -/*************** - Form -******************/ -/* input field classes */ -.embed-wrapper .elgg-input-text, -.embed-wrapper .elgg-input-tags { -	font: 120% Arial, Helvetica, sans-serif; -	padding: 5px; -	border: 1px solid #ccc; -	color:#666; -	background-color: white; - -	-webkit-border-radius: 5px; -	-moz-border-radius: 5px; -	border-radius: 5px; - -	-webkit-box-shadow: none; -	-moz-box-shadow: none; -	box-shadow: none; -} -.embed-wrapper .elgg-input-text:focus, -.embed-wrapper .elgg-input-tags:focus { -	border: solid 1px #4690d6; -	background: #e4ecf5; -	color:#333; -} -.embed-wrapper .elgg-input-file { -	background-color: white; -} - -.embed-wrapper label { -	color:#333; -} - - - - -#facebox { -	position: absolute; -	top: 0; -	left: 0; -	z-index: 10000; -	text-align: left; -} -#facebox .popup { -	position: relative; -} -#facebox .body { -	padding: 10px 15px 20px 15px; -	background-color: white; -	width: 730px; -	min-height:400px; -	 -	-webkit-border-radius: 8px;  -	-moz-border-radius: 8px; -	border-radius: 8px; -} -#facebox .loading { -	text-align: center; -	padding: 100px 10px 100px 10px; -} -#facebox .image { -	text-align: center; -} -#facebox .footer { -	float: right; -	width:22px; -	height:22px; -	margin:-4px 0 0 0; -	padding:0; -} -#facebox .footer img.close_image { -	background: url(<?php echo elgg_get_site_url(); ?>mod/embed/images/close_button.gif) no-repeat left top; -} -#facebox .footer img.close_image:hover { -	background: url(<?php echo elgg_get_site_url(); ?>mod/embed/images/close_button.gif) no-repeat left -31px; -} -#facebox_overlay { -	position: fixed; -	top: 0px; -	left: 0px; -	height:100%; -	width:100%; -} -.facebox_hide { -	z-index:-100; -} -.facebox_overlayBG { -	background-color: #000; -	z-index: 9999; -} -* html #facebox_overlay { /* ie6 hack */ -	position: absolute; -	height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); -} - -#facebox .body .content h2 { -	color:#333333; -} - - -/* embeded content links */ -.embeded_file.link { -	display: inline; -	margin-right: 5px; -	padding-left: 14px; -	background-repeat: no-repeat; -	 -	-webkit-background-size: 12px 16px; -	-moz-background-size: 12px 16px;  -	background-size: 12px 16px; -} - -/* entity listings */ -.embed_data .elgg-image img { -	cursor: pointer; -} -.embed_data .elgg-image-block  { -	border-bottom:none; -} -.embed_modal_videolist .elgg-image img { -	width:75px; -	height:auto; -} -.embed_modal_document .embed_data .elgg-body { -	margin-top:0; -	margin-left:7px; -} -.embed_modal_tidypics .embed_data .elgg-body { -	margin-top:11px; +.embed-item { +	padding-left: 5px; +	padding-right: 5px;  } -.embed_modal_file .embed_data .elgg-body { -	margin-top:0px; -	margin-left:9px; -} -.embed_data .elgg-body { -	width:auto; -	margin-top:15px; -	margin-left:15px; -} -.embed_data .elgg-image-block { -	cursor:pointer; -} - -/* input field classes */ -#facebox .content .elgg-input-text, -#facebox .content .elgg-input-tags { -	font: 120% Arial, Helvetica, sans-serif; -	padding: 5px; -	border: 1px solid #ccc; -	color:#666; -	background-color: white; -	 -	-webkit-border-radius: 5px; -	-moz-border-radius: 5px; -	border-radius: 5px; -	 -	-webkit-box-shadow: none; -	-moz-box-shadow: none; -	box-shadow: none; -} -#facebox .content .elgg-input-text:focus, -#facebox .content .elgg-input-tags:focus { -	border: solid 1px #4690d6; -	background: #e4ecf5; -	color:#333; -} -#facebox .content .elgg-input-file { -	background-color: white; -} -#facebox .content p { -	color:#333; -} -#facebox .content p.entity-title { -	color:#666; -} -#facebox .content .elgg-image-block:hover { +.embed-item:hover {  	background-color: #eee;  } -#facebox .content label { -	color:#333; -} - - -/* *************************************** -	ELGG TABBED PAGE NAVIGATION -*************************************** */ -#facebox .body .elgg-tabs { -	margin-bottom:5px; -	padding: 0; -	border-bottom: 2px solid #ccc; -	display:table; -	width:100%; -} -#facebox .body .elgg-tabs ul { -	list-style: none; -	padding: 0; -	margin: 0; -} -#facebox .body .elgg-tabs li { -	float: left; -	border: 2px solid #ccc; -	border-bottom-width: 0; -	background: #eee; -	margin: 0 0 0 10px; -	 -	-webkit-border-radius:5px 5px 0 0; -	-moz-border-radius: 5px 5px 0 0; -	border-raidus: 5px 5px 0 0; -} -#facebox .body .elgg-tabs a { -	text-decoration: none; -	display: block; -	padding:3px 10px 0 10px; -	text-align: center; -	height:21px; -	color:#999; -} -#facebox .body .elgg-tabs a:hover { -	background: #dedede; -	color:#666; -} -#facebox .body .elgg-tabs .selected { -	border-color: #ccc; -	background: white; -} -#facebox .body .elgg-tabs .selected a { -	position: relative; -	top: 2px; -	background: white; -} - - - -/* Pagination (override core elgg css defaults) */ -#facebox .body .pagination { -	float:right;	 -} -#facebox .body .pagination .pagination-number { -	border:1px solid #999;  -	color:#666; -} -#facebox .body .pagination .pagination-number:hover { -	background-color:#aaa;  -	color:black; -} -#facebox .body .pagination .pagination-previous, -#facebox .body .pagination .pagination-next { -	border:1px solid #999;  -	color:#666; -} -#facebox .body .pagination .pagination-previous:hover, -#facebox .body .pagination .pagination-next:hover { -	background-color:#aaa;  -	color:black; -} -#facebox .body .pagination .pagination-currentpage { -	background-color:#666;  -	border:1px solid #666;  -	color:white; -}
\ No newline at end of file diff --git a/mod/embed/views/default/embed/embed.php b/mod/embed/views/default/embed/embed.php deleted file mode 100644 index 2bd329690..000000000 --- a/mod/embed/views/default/embed/embed.php +++ /dev/null @@ -1,45 +0,0 @@ -<?php -/** - * Embed landing page - * - * @todo Yes this is a lot of logic for a view.  A good bit of it can be moved - * to the page handler - * - * @uses string $vars['sections'] Array of section_id => Section Display Name - * @uses string $vars['active_section'] Currently selected section_id - */ - -$sections = elgg_extract('sections', $vars, array()); -$active_section = elgg_extract('active_section', $vars, array_shift(array_keys($sections)), false); -$upload_sections = elgg_extract('upload_sections', $vars, array()); - -if (!$sections) { -	$content = elgg_echo('embed:no_sections'); -} else { -	$content = elgg_view_title(elgg_echo('embed:media')); -	$content .= elgg_view('embed/tabs', $vars); - -	$offset = (int)max(0, get_input('offset', 0)); -	$limit = (int)get_input('limit', 5); - -	// find the view to display -	// @todo make it so you don't have to manually create views for each page -	$view = "embed/$active_section/content"; -	 -	$section_content = elgg_view($view, $vars); - -	// build the items and layout. -	if ($section_content) { -		$content .= $section_content; -	} else { -		$content .= elgg_echo('embed:no_section_content'); -	} -} - -echo '<div class="embed-wrapper">' . $content . '</div>'; - -if (isset($js)) { -	echo '<script type="text/javascript">'; -	echo $js; -	echo '</script>'; -} diff --git a/mod/embed/views/default/embed/item.php b/mod/embed/views/default/embed/item.php new file mode 100644 index 000000000..3060de879 --- /dev/null +++ b/mod/embed/views/default/embed/item.php @@ -0,0 +1,39 @@ +<?php +/** + * Embeddable content list item view + * + * @uses $vars['entity'] ElggEntity object + */ + +$entity = $vars['entity']; + +$title = $entity->title; +if (!$title) { +	$title = $entity->name; +} + +// different entity types have different title attribute names. +$title = isset($entity->name) ? $entity->name : $entity->title; +// don't let it be too long +$title = elgg_get_excerpt($title); + +$owner = $entity->getOwnerEntity(); +if ($owner) { +	$author_text = elgg_echo('byline', array($owner->name)); +	$date = elgg_view_friendly_time($entity->time_created); +	$subtitle = "$author_text $date"; +} else { +	$subtitle = ''; +} + +$params = array( +	'title' => $title, +	'entity' => $entity, +	'subtitle' => $subtitle, +	'tags' => FALSE, +); +$body = elgg_view('object/elements/summary', $params); + +$image = elgg_view_entity_icon($entity, 'small', array('link_class' => 'embed-insert')); + +echo elgg_view_image_block($image, $body); diff --git a/mod/embed/views/default/embed/layout.php b/mod/embed/views/default/embed/layout.php new file mode 100644 index 000000000..c1e43f13c --- /dev/null +++ b/mod/embed/views/default/embed/layout.php @@ -0,0 +1,30 @@ +<?php +/** + * Layout of embed panel loaded in lightbox + */ + +$title =  elgg_view_title(elgg_echo('embed:media')); + +$menu = elgg_view_menu('embed'); + +$selected = elgg_get_config('embed_tab'); +if ($selected->getData('view')) { +	$tab = elgg_view($selected->getData('view'), $vars); +} else { +	$tab = elgg_list_entities( +			embed_get_list_options($selected->getData('options')), +			'elgg_get_entities', +			'embed_list_items' +			); +	if (!$tab) { +		$tab = elgg_echo('embed:no_section_content'); +	} +} + +echo <<<HTML +<div class="embed-wrapper"> +	$title +	$menu +	$tab +</div> +HTML; diff --git a/mod/embed/views/default/embed/list.php b/mod/embed/views/default/embed/list.php new file mode 100644 index 000000000..c13639cff --- /dev/null +++ b/mod/embed/views/default/embed/list.php @@ -0,0 +1,58 @@ +<?php +/** + * View a list of embeddable items + * + * @package Elgg + * + * @uses $vars['items']       Array of ElggEntity objects + * @uses $vars['offset']      Index of the first list item in complete list + * @uses $vars['limit']       Number of items per page + * @uses $vars['count']       Number of items in the complete list + * + * @uses $vars['list_class']  Additional CSS class for the <ul> element + * @uses $vars['item_class']  Additional CSS class for the <li> elements + */ + +$items = $vars['items']; +$offset = $vars['offset']; +$limit = $vars['limit']; +$count = $vars['count']; + +$offset_key = elgg_extract('offset_key', $vars, 'offset'); + +$list_class = 'elgg-list'; +if (isset($vars['list_class'])) { +	$list_class = "$list_class {$vars['list_class']}"; +} + +$item_class = 'elgg-item'; +if (isset($vars['item_class'])) { +	$item_class = "$item_class {$vars['item_class']}"; +} + +$html = ""; +$nav = ""; + +if ($count) { +	$nav .= elgg_view('navigation/pagination', array( +		'offset' => $offset, +		'count' => $count, +		'limit' => $limit, +		'offset_key' => $offset_key, +	)); +} + +if (is_array($items) && count($items) > 0) { +	$html .= "<ul class=\"$list_class\">"; +	foreach ($items as $item) { +		$id = "elgg-{$item->getType()}-{$item->getGUID()}"; +		$html .= "<li id=\"$id\" class=\"$item_class\">"; +		$html .= elgg_view('embed/item', array('entity' => $item)); +		$html .= '</li>'; +	} +	$html .= '</ul>'; +} + +$html .= $nav; + +echo $html; diff --git a/mod/embed/views/default/embed/tabs.php b/mod/embed/views/default/embed/tabs.php deleted file mode 100644 index 3f377fee5..000000000 --- a/mod/embed/views/default/embed/tabs.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php -/** - * Embed tabs - * - * @uses $vars['sections'] - * @uses $vars['upload_sections'] - * @uses $vars['actibe_section'] - */ - -$sections = elgg_extract('sections', $vars, array()); -$active_section = elgg_extract('active_section', $vars, array_shift(array_keys($sections))); -$upload_sections = elgg_extract('upload_sections', $vars, array()); - -$tabs = array(); -foreach ($sections as $section_id => $section_info) { -	$tab = array( -		'title' => $section_info['name'], -		'url' => '#', -		'url_class' => 'embed-section', -		'url_id' => $section_id, -	); - -	if ($section_id == $active_section) { -		$tab['selected'] = TRUE; -	} -	$tabs[] = $tab; -} - -// make sure upload is always the last tab -if ($upload_sections) { -	$tabs[] = array( -		'title' => elgg_echo('embed:upload'), -		'url' => '#', -		'url_class' => 'embed-section', -		'url_id' => 'upload', -		'selected' => ($active_section == 'upload') -	); -} - -echo elgg_view('navigation/tabs', array('tabs' => $tabs)); diff --git a/mod/embed/views/default/group/default/embed.php b/mod/embed/views/default/group/default/embed.php deleted file mode 100644 index bf51f0a7d..000000000 --- a/mod/embed/views/default/group/default/embed.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php -	if ($vars['entity'] instanceof ElggGroup) { -		echo '<a href="'. $vars['entity']->getURL() .'">' . $vars['entity']->name . '</a>'; -	} -?>
\ No newline at end of file diff --git a/mod/embed/views/default/js/embed/embed.php b/mod/embed/views/default/js/embed/embed.php index e9e08f9a0..3126e12f7 100644 --- a/mod/embed/views/default/js/embed/embed.php +++ b/mod/embed/views/default/js/embed/embed.php @@ -1,10 +1,9 @@ -//<script>  elgg.provide('elgg.embed');  elgg.embed.init = function() {  	// inserts the embed content into the textarea -	$(".embed_data").live('click', elgg.embed.insert); +	$(".embed-item").live('click', elgg.embed.insert);  	// caches the current textarea id  	$(".embed-control").live('click', function() { @@ -15,28 +14,36 @@ elgg.embed.init = function() {  	});  	// special pagination helper for lightbox -	$('.embed-wrapper .elgg-pagination a').live('click', elgg.embed.pagination); +	$('.embed-wrapper .elgg-pagination a').live('click', elgg.embed.forward); -	$('.embed-section').live('click', elgg.embed.loadTab); +	$('.embed-section').live('click', elgg.embed.forward); -	$('.embed-upload .elgg-form').live('submit', elgg.embed.submit); +	$('.elgg-form-embed').live('submit', elgg.embed.submit);  }  /**   * Inserts data attached to an embed list item in textarea   * - * @todo generalize lightbox closing and wysiwyg refreshing + * @todo generalize lightbox closing   *   * @param {Object} event   * @return void   */  elgg.embed.insert = function(event) {  	var textAreaId = elgg.embed.textAreaId; +	var textArea = $('#' + textAreaId); -	var content = $(this).data('embed_code'); -	$('#' + textAreaId).val($('#' + textAreaId).val() + ' ' + content + ' '); +	// generalize this based on a css class attached to what should be inserted +	var content = ' ' + $(this).find(".embed-insert").parent().html() + ' '; +	 +	textArea.val(textArea.val() + content); +	textArea.focus(); +	 +<?php +// See the TinyMCE plugin for an example of this view + echo elgg_view('embed/custom_insert_js'); +?> -	<?php echo elgg_view('embed/custom_insert_js'); ?>  	$.fancybox.close(); @@ -67,9 +74,8 @@ elgg.embed.submit = function(event) {  					elgg.system_message(response.system_messages.success);  				}  				if (response.status >= 0) { -					// @todo - really this should forward to what the registered defined -					// For example, forward to images tab if an image was uploaded -					var url = elgg.config.wwwroot + 'embed/embed?active_section=file'; +					var forward = $('input[name=embed_forward]').val(); +					var url = elgg.normalize_url('embed/tab/' + forward);  					$('.embed-wrapper').parent().load(url);  				}  			} @@ -82,27 +88,14 @@ elgg.embed.submit = function(event) {  }  /** - * Loads the next chunk of content within the lightbox + * Loads content within the lightbox   *   * @param {Object} event   * @return void   */ -elgg.embed.pagination = function(event) { +elgg.embed.forward = function(event) {  	$('.embed-wrapper').parent().load($(this).attr('href'));  	event.preventDefault();  } -/** - * Loads an embed tab - * - * @param {Object} event - * @return void - */ -elgg.embed.loadTab = function(event) { -	var section = $(this).attr('id'); -	var url = elgg.config.wwwroot + 'embed/embed?active_section=' + section; -	$('.embed-wrapper').parent().load(url); -	event.preventDefault(); -} -  elgg.register_hook_handler('init', 'system', elgg.embed.init); diff --git a/mod/embed/views/default/navigation/menu/embed.php b/mod/embed/views/default/navigation/menu/embed.php new file mode 100644 index 000000000..1a6a18f05 --- /dev/null +++ b/mod/embed/views/default/navigation/menu/embed.php @@ -0,0 +1,18 @@ +<?php +/** + * Embed tabs + * + * @uses $vars['menu']['default'] + */ + +$tabs = array(); +foreach ($vars['menu']['default'] as $menu_item) { +	$tabs[] = array( +		'title' => $menu_item->getText(), +		'url' => 'embed/tab/' . $menu_item->getName(), +		'url_class' => 'embed-section', +		'selected' => $menu_item->getSelected(), +	); +} + +echo elgg_view('navigation/tabs', array('tabs' => $tabs)); diff --git a/mod/embed/views/default/object/default/embed.php b/mod/embed/views/default/object/default/embed.php deleted file mode 100644 index aca2ceea1..000000000 --- a/mod/embed/views/default/object/default/embed.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php - -if ($vars['entity'] instanceof ElggObject) { -	$title = htmlspecialchars($vars['entity']->title, ENT_QUOTES); -	echo "<a href=\"{$vars['entity']->getURL()}\">$title</a>"; -} diff --git a/mod/embed/views/default/object/file/embed.php b/mod/embed/views/default/object/file/embed.php deleted file mode 100644 index b93c46e5e..000000000 --- a/mod/embed/views/default/object/file/embed.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php -	$mime = $vars['entity']->mimetype; -	 -	if (elgg_view_exists('file/specialcontent/' . $mime)) { -		$content = elgg_view('file/specialcontent/' . $mime, $vars); -	} else if (elgg_view_exists("file/specialcontent/" . substr($mime,0,strpos($mime,'/')) . "/default")) { -		$content = elgg_view("file/specialcontent/" . substr($mime,0,strpos($mime,'/')) . "/default", $vars); -	} -	 -	if (empty($content) || substr_count(strtolower($content),'<embed') || substr_count(strtolower($content),'<object') || substr_count(strtolower($content),'<script')) { -		echo elgg_view('object/default/embed',$vars); -	} else { -		echo $content; -	} -	 -?>
\ No newline at end of file diff --git a/mod/embed/views/default/object/file/embedlist.php b/mod/embed/views/default/object/file/embedlist.php deleted file mode 100644 index 5a3163e4c..000000000 --- a/mod/embed/views/default/object/file/embedlist.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -	$file = $vars['entity']; -	$friendlytime = elgg_view_friendly_time($vars['entity']->time_created); -	 -	$info = "<p class='entity-title'> <a href=\"{$file->getURL()}\">{$file->title}</a></p>"; -	$info .= "<p class='elgg-subtitle'>{$friendlytime}"; -	$icon = "<a href=\"{$file->getURL()}\">" . elgg_view("file/icon", array("mimetype" => $file->mimetype, 'thumbnail' => $file->thumbnail, 'file_guid' => $file->guid, 'size' => 'small')) . "</a>"; -?> -<div id="embed_entity_<?php echo $file->guid; ?>"> -	<?php echo elgg_view_image_block($icon, $info); ?> -</div> diff --git a/mod/embed/views/default/site/default/embed.php b/mod/embed/views/default/site/default/embed.php deleted file mode 100644 index 2e8920a9a..000000000 --- a/mod/embed/views/default/site/default/embed.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php -	if ($vars['entity'] instanceof ElggSite) {	 -		echo '<a href="'. $vars['entity']->getURL() .'">' . $vars['entity']->name . '</a>';	 -	} -?>
\ No newline at end of file diff --git a/mod/embed/views/default/user/default/embed.php b/mod/embed/views/default/user/default/embed.php deleted file mode 100644 index df538c94c..000000000 --- a/mod/embed/views/default/user/default/embed.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php -	if ($vars['entity'] instanceof ElggUser) {	 -		echo '<a href="'. $vars['entity']->getURL() .'">' . $vars['entity']->name . '</a>';	 -	} -?>
\ No newline at end of file diff --git a/mod/file/start.php b/mod/file/start.php index 749d7a519..843ae0794 100644 --- a/mod/file/start.php +++ b/mod/file/start.php @@ -61,19 +61,26 @@ function file_init() {  	$item = ElggMenuItem::factory(array(  		'name' => 'file',  		'text' => elgg_echo('file'), -		'href' => '#', -		'section' => 'select' +		'priority' => 10, +		'data' => array( +			'options' => array( +				'type' => 'object', +				'subtype' => 'file', +			), +		),  	)); -	elgg_register_menu_item('embed:sections', $item); +	elgg_register_menu_item('embed', $item);  	$item = ElggMenuItem::factory(array(  		'name' => 'file_upload',  		'text' => elgg_echo('file:upload'), -		'href' => '#', -		'section' => 'upload' +		'priority' => 100, +		'data' => array( +			'view' => 'embed/file_upload/content', +		),  	)); -	elgg_register_menu_item('embed:sections', $item); +	elgg_register_menu_item('embed', $item);  }  /** diff --git a/mod/file/views/default/embed/file/content.php b/mod/file/views/default/embed/file/content.php deleted file mode 100644 index eadcd1a6d..000000000 --- a/mod/file/views/default/embed/file/content.php +++ /dev/null @@ -1,61 +0,0 @@ -<?php -/** - * List files available for upload - */ - -$active_section = elgg_extract('active_section', $vars); - -$options = array( -	'owner_guid' => elgg_get_logged_in_user_guid(), -	'type_subtype_pair' => array('object' => 'file'), -	'count' => true -); - -$count = elgg_get_entities($options); - -if ($count) { -	echo "<div class='embed_modal_$active_section'>"; - -	unset($options['count']); -	$items = elgg_get_entities($options); - -	foreach ($items as $item) { - -		// different entity types have different title attribute names. -		$title = isset($item->name) ? $item->name : $item->title; -		// don't let it be too long -		$title = elgg_get_excerpt($title); - -		$author_text = elgg_echo('byline', array($owner->name)); -		$date = elgg_view_friendly_time($item->time_created); - -		$subtitle = "$author_text $date"; - -		$icon = "<img src=\"{$item->getIconURL($icon_size)}\" />"; - -		$embed_code = elgg_view('output/url', array( -			'href' => $item->getURL(), -			'title' => $title, -			'text' => $icon, -			'encode_text' => FALSE -		)); - -		$item_icon = elgg_view_entity_icon($item, $icon_size); - -		$params = array( -			'title' => $title, -			'entity' => $item, -			'subtitle' => $subtitle, -			'tags' => FALSE, -		); -		$list_body = elgg_view('object/elements/summary', $params); - -		// @todo JS 1.8: is this approach better than inline js? -		echo "<div class=\"embed_data\" id=\"embed_{$item->getGUID()}\">" . elgg_view_image_block($item_icon, $list_body) . '</div>'; -		echo "<script type=\"text/javascript\"> -			$('#embed_{$item->getGUID()}').data('embed_code', " . json_encode($embed_code) . "); -		</script>"; -	} - -	echo '</div>'; -}
\ No newline at end of file diff --git a/mod/file/views/default/embed/file_upload/content.php b/mod/file/views/default/embed/file_upload/content.php index 13c18f745..4d3db0d97 100644 --- a/mod/file/views/default/embed/file_upload/content.php +++ b/mod/file/views/default/embed/file_upload/content.php @@ -5,11 +5,12 @@  $form_vars = array(  	'enctype' => 'multipart/form-data', -	'class' => 'elgg-form', +	'class' => 'elgg-form-embed',  ); -$upload_content = elgg_view_form('file/upload', $form_vars); +echo elgg_view_form('file/upload', $form_vars); -echo "<div class='mbm'>" . elgg_echo('embed:upload_type') . "$input</div>"; -echo "<div class='embed-upload'>"; -echo $upload_content; -echo "</div>";
\ No newline at end of file +// the tab we want to be forwarded to after upload is complete +echo elgg_view('input/hidden', array( +	'name' => 'embed_forward', +	'value' => 'file', +));
\ No newline at end of file diff --git a/mod/file/views/default/icon/object/file.php b/mod/file/views/default/icon/object/file.php index 6357d418f..7feba7af3 100644 --- a/mod/file/views/default/icon/object/file.php +++ b/mod/file/views/default/icon/object/file.php @@ -2,9 +2,10 @@  /**   * File icon view   * - * @uses $vars['entity'] The entity the icon represents - uses getIconURL() method - * @uses $vars['size']   topbar, tiny, small, medium (default), large, master - * @uses $vars['href']   Optional override for link + * @uses $vars['entity']     The entity the icon represents - uses getIconURL() method + * @uses $vars['size']       topbar, tiny, small, medium (default), large, master + * @uses $vars['href']       Optional override for link + * @uses $vars['link_class'] Optional CSS class added to img   */  $entity = $vars['entity']; @@ -32,10 +33,14 @@ $img_src = elgg_format_url($img_src);  $img = "<img $class src=\"$img_src\" alt=\"$title\" />";  if ($url) { -	echo elgg_view('output/url', array( +	$params = array(  		'href' => $url,  		'text' => $img, -	)); +	); +	if (isset($vars['link_class'])) { +		$params['class'] = $vars['link_class']; +	} +	echo elgg_view('output/url', $params);  } else {  	echo $img;  }  | 
