From 0e23ac4909bfa0971bd7253dcde80d6c174d05fc Mon Sep 17 00:00:00 2001 From: brettp Date: Tue, 6 Jul 2010 21:06:15 +0000 Subject: Added upload support to file embed. git-svn-id: http://code.elgg.org/elgg/trunk@6646 36083f99-b078-4883-b0ff-0f9b5a30f544 --- mod/file/actions/upload.php | 50 ++++++++++++++++++++++++---- mod/file/start.php | 24 +++++++++++-- mod/file/views/default/file/embed_upload.php | 49 +++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 9 deletions(-) create mode 100644 mod/file/views/default/file/embed_upload.php 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; @@ -264,6 +266,24 @@ return $value; } + /** + * 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 * 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 @@ +$categories

"; +} + +// recycling the upload action so some of these options are a bit weird. +$form_body = '

' . elgg_view('input/file', array('internalname' => 'upload')) . '

'; +$form_body .= '

' . elgg_echo('file:title') . ": " . elgg_view("input/text", array('internalname' => 'title')) . '

'; +$form_body .= '

' . elgg_echo('file:desc') . ": " . elgg_view("input/text",array('internalname' => 'description')) . '

'; +$form_body .= '

' . elgg_echo('file:tags') . ": " . elgg_view("input/tags", array('internalname' => 'tags')) . '

'; +$form_body .= '

' . elgg_echo('access') . ": " . elgg_view('input/access', array('internalname' => 'access_id', 'value' => $access_id)) . '

'; +$form_body .= $categories; +$form_body .= elgg_view('input/hidden', array('internalname' => 'ajax', 'value' => TRUE)); +$form_body .= '

' . elgg_view('input/submit', array('value' => elgg_echo('upload'))) . '

'; +$form_body .= ''; + +echo elgg_view('input/form', array( + 'body' => $form_body, + 'internalid' => 'file_embed_upload', + 'action' => $vars['url'] . 'action/file/upload', +)); + +?> + + -- cgit v1.2.3