diff options
Diffstat (limited to 'mod')
-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> |