diff options
Diffstat (limited to 'mod/file')
| -rw-r--r-- | mod/file/actions/upload.php | 50 | ||||
| -rw-r--r-- | mod/file/start.php | 24 | ||||
| -rw-r--r-- | mod/file/views/default/file/embed_upload.php | 49 | 
3 files changed, 114 insertions, 9 deletions
| diff --git a/mod/file/actions/upload.php b/mod/file/actions/upload.php index 5a22b1231..1f12dad9a 100644 --- a/mod/file/actions/upload.php +++ b/mod/file/actions/upload.php @@ -17,6 +17,8 @@  	$desc = get_input("description");  	$access_id = (int) get_input("access_id");  	$container_guid = (int) get_input('container_guid', 0); +	$ajax = get_input('ajax', FALSE); +	  	if ($container_guid == 0) {  		$container_guid = get_loggedin_userid();  	} @@ -38,8 +40,18 @@  			$_SESSION['uploadtags'] = $tags;  			$_SESSION['uploadaccessid'] = $access_id; -			register_error(elgg_echo('file:nofile')); -			forward($_SERVER['HTTP_REFERER']); +			$error = elgg_echo('file:nofile'); +			 +			if ($ajax) { +				echo json_encode(array( +					'status' => 'error', +					'message' => $error +				)); +				exit; +			} else { +				register_error($error); +				forward($_SERVER['HTTP_REFERER']); +			}  		}  		$file = new FilePluginFile(); @@ -151,17 +163,41 @@  	unset($_SESSION['uploadaccessid']);  	// handle results differently for new files and file updates +	// ajax is only for new files from embed right now.  	if ($new_file) {  		if ($guid) { -			system_message(elgg_echo("file:saved")); -			add_to_river('river/object/file/create', 'create', get_loggedin_userid(), $file->guid); +			$message = elgg_echo("file:saved"); +			if ($ajax) { +				echo json_encode(array( +					'status' => 'success', +					'message' => $message +				)); +				exit; +				 +			} else { +				system_message($message); +				add_to_river('river/object/file/create', 'create', get_loggedin_userid(), $file->guid); +			}  		} else {  			// failed to save file object - nothing we can do about this -			register_error(elgg_echo("file:uploadfailed")); +			$error = elgg_echo("file:uploadfailed"); +			 +			if ($ajax) { +				echo json_encode(array( +					'status' => 'error', +					'message' => $error +				)); +				exit; +				 +			} else { +				register_error($error); +			}  		} -		$container_user = get_entity($container_guid); -		forward($CONFIG->wwwroot . "pg/file/" . $container_user->username); +		if (!$ajax) { +			$container_user = get_entity($container_guid); +			forward($CONFIG->wwwroot . "pg/file/" . $container_user->username); +		}  	} else {  		if ($guid) { diff --git a/mod/file/start.php b/mod/file/start.php index f3da33caf..a2785386f 100644 --- a/mod/file/start.php +++ b/mod/file/start.php @@ -65,6 +65,8 @@  		// embed support  		register_plugin_hook('embed_get_sections', 'all', 'file_embed_get_sections');  		register_plugin_hook('embed_get_items', 'file', 'file_embed_get_items'); +		register_plugin_hook('embed_get_upload_sections', 'all', 'file_embed_get_upload_sections'); +		  	}  	/** @@ -226,9 +228,9 @@  	 */  	function file_embed_get_sections($hook, $type, $value, $params) {  		$value['file'] = array( -			'name' => elgg_echo('file:files'), +			'name' => elgg_echo('file'),  			'layout' => 'list', -			'icon_size' => 'medium', +			'icon_size' => 'small',  		);  		return $value; @@ -265,6 +267,24 @@  	}  	/** +	 * Register file as an embed type. +	 * +	 * @param unknown_type $hook +	 * @param unknown_type $type +	 * @param unknown_type $value +	 * @param unknown_type $params +	 */ +	function file_embed_get_upload_sections($hook, $type, $value, $params) { +		$value['file'] = array( +			'name' => elgg_echo('file'), +			'view' => 'file/embed_upload' +		); +	 +		return $value; +	} +	 +	 +	/**  	 * Populates the ->getUrl() method for file objects  	 *  	 * @param ElggEntity $entity File entity diff --git a/mod/file/views/default/file/embed_upload.php b/mod/file/views/default/file/embed_upload.php new file mode 100644 index 000000000..0460eb481 --- /dev/null +++ b/mod/file/views/default/file/embed_upload.php @@ -0,0 +1,49 @@ +<?php +/** + * Files upload form for embed + */ + +$access_id = get_default_access(get_loggedin_user()); +if ($categories = elgg_view('categories', $vars)) { +	$categories = "<p>$categories</p>"; +} + +// recycling the upload action so some of these options are a bit weird. +$form_body = '<p>' . elgg_view('input/file', array('internalname' => 'upload')) . '</p>'; +$form_body .= '<p>' . elgg_echo('file:title') . ": " . elgg_view("input/text", array('internalname' => 'title')) . '</p>'; +$form_body .= '<p>' . elgg_echo('file:desc') . ": " . elgg_view("input/text",array('internalname' => 'description')) . '</p>'; +$form_body .= '<p>' . elgg_echo('file:tags') . ": " . elgg_view("input/tags", array('internalname' => 'tags')) . '</p>'; +$form_body .= '<p>' . elgg_echo('access') . ": " . elgg_view('input/access', array('internalname' => 'access_id', 'value' => $access_id)) . '</p>'; +$form_body .= $categories; +$form_body .= elgg_view('input/hidden', array('internalname' => 'ajax', 'value' => TRUE)); +$form_body .= '<p>' . elgg_view('input/submit', array('value' => elgg_echo('upload'))) . '</p>'; +$form_body .= '</div>'; + +echo elgg_view('input/form', array( +	'body' => $form_body, +	'internalid' => 'file_embed_upload', +	'action' => $vars['url'] . 'action/file/upload', +)); + +?> + +<script type="text/javascript"> +$(document).ready(function() { +	// fire off the ajax upload +	$('#file_embed_upload').submit(function() { +		var options = { +			success: function(data) { +				var info = jQuery.parseJSON(data); + +				if (info.status == 'success') { +					$('.popup .content').load('<?php echo $vars['url'] . 'pg/embed/embed'; ?>?active_section=file'); +				} else { +					$('.popup .content').find('form').prepend('<p>' + info.message + '</p>'); +				} +			} +		}; +		$(this).ajaxSubmit(options); +		return false; +	}); +}); +</script> | 
