aboutsummaryrefslogtreecommitdiff
path: root/mod
diff options
context:
space:
mode:
Diffstat (limited to 'mod')
-rw-r--r--mod/file/actions/upload.php50
-rw-r--r--mod/file/start.php24
-rw-r--r--mod/file/views/default/file/embed_upload.php49
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>