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