aboutsummaryrefslogtreecommitdiff
path: root/mod/file
diff options
context:
space:
mode:
Diffstat (limited to 'mod/file')
-rw-r--r--mod/file/actions/file/delete.php6
-rw-r--r--mod/file/actions/file/upload.php132
-rw-r--r--mod/file/download.php30
-rw-r--r--mod/file/graphics/icons/application.gifbin2543 -> 2465 bytes
-rw-r--r--mod/file/graphics/icons/application_lrg.gifbin7916 -> 7781 bytes
-rw-r--r--mod/file/graphics/icons/archive.gifbin2479 -> 2419 bytes
-rw-r--r--mod/file/graphics/icons/archive_lrg.gifbin8080 -> 7918 bytes
-rw-r--r--mod/file/graphics/icons/excel.gifbin2632 -> 2509 bytes
-rw-r--r--mod/file/graphics/icons/excel_lrg.gifbin8098 -> 7571 bytes
-rw-r--r--mod/file/graphics/icons/general.gifbin1528 -> 1528 bytes
-rw-r--r--mod/file/graphics/icons/general_lrg.gifbin4731 -> 4594 bytes
-rw-r--r--mod/file/graphics/icons/music.gifbin2524 -> 2297 bytes
-rw-r--r--mod/file/graphics/icons/music_lrg.gifbin7397 -> 6748 bytes
-rw-r--r--mod/file/graphics/icons/openoffice.gifbin2502 -> 2313 bytes
-rw-r--r--mod/file/graphics/icons/openoffice_lrg.gifbin7265 -> 6617 bytes
-rw-r--r--mod/file/graphics/icons/pages.gifbin3098 -> 2766 bytes
-rw-r--r--mod/file/graphics/icons/pages_lrg.gifbin11394 -> 10234 bytes
-rw-r--r--mod/file/graphics/icons/pdf.gifbin2345 -> 2197 bytes
-rw-r--r--mod/file/graphics/icons/pdf_lrg.gifbin6770 -> 6014 bytes
-rw-r--r--mod/file/graphics/icons/ppt.gifbin2556 -> 2495 bytes
-rw-r--r--mod/file/graphics/icons/ppt_lrg.gifbin7964 -> 7423 bytes
-rw-r--r--mod/file/graphics/icons/text.gifbin2896 -> 2881 bytes
-rw-r--r--mod/file/graphics/icons/text_lrg.gifbin10928 -> 9855 bytes
-rw-r--r--mod/file/graphics/icons/vcard.gifbin2536 -> 2385 bytes
-rw-r--r--mod/file/graphics/icons/vcard_lrg.gifbin7504 -> 6798 bytes
-rw-r--r--mod/file/graphics/icons/video.gifbin2722 -> 2603 bytes
-rw-r--r--mod/file/graphics/icons/video_lrg.gifbin7868 -> 7319 bytes
-rw-r--r--mod/file/graphics/icons/word.gifbin2642 -> 2479 bytes
-rw-r--r--mod/file/graphics/icons/word_lrg.gifbin7925 -> 7350 bytes
-rw-r--r--mod/file/languages/en.php27
-rw-r--r--mod/file/lib/file.php9
-rw-r--r--mod/file/manifest.xml13
-rw-r--r--mod/file/pages/file/download.php38
-rw-r--r--mod/file/pages/file/edit.php (renamed from mod/file/edit.php)3
-rw-r--r--mod/file/pages/file/friends.php (renamed from mod/file/friends.php)10
-rw-r--r--mod/file/pages/file/owner.php (renamed from mod/file/index.php)36
-rw-r--r--mod/file/pages/file/search.php (renamed from mod/file/search.php)39
-rw-r--r--mod/file/pages/file/upload.php (renamed from mod/file/upload.php)7
-rw-r--r--mod/file/pages/file/view.php46
-rw-r--r--mod/file/pages/file/world.php (renamed from mod/file/world.php)13
-rw-r--r--mod/file/start.php205
-rw-r--r--mod/file/thumbnail.php2
-rw-r--r--mod/file/view.php35
-rw-r--r--mod/file/views/default/embed/file_upload/content.php17
-rw-r--r--mod/file/views/default/file/embed_upload.php30
-rw-r--r--mod/file/views/default/file/group_module.php18
-rw-r--r--mod/file/views/default/file/sidebar.php14
-rw-r--r--mod/file/views/default/file/specialcontent/image/default.php11
-rw-r--r--mod/file/views/default/file/typecloud.php4
-rw-r--r--mod/file/views/default/forms/file/upload.php15
-rw-r--r--mod/file/views/default/icon/object/file.php26
-rw-r--r--mod/file/views/default/object/file.php51
-rw-r--r--mod/file/views/default/river/object/file/create.php30
-rw-r--r--mod/file/views/default/widgets/filerepo/content.php3
-rw-r--r--mod/file/views/rss/file/enclosure.php16
-rw-r--r--mod/file/views/rss/object/file.php21
56 files changed, 480 insertions, 427 deletions
diff --git a/mod/file/actions/file/delete.php b/mod/file/actions/file/delete.php
index fe03e5077..72585aa36 100644
--- a/mod/file/actions/file/delete.php
+++ b/mod/file/actions/file/delete.php
@@ -10,7 +10,7 @@ $guid = (int) get_input('guid');
$file = new FilePluginFile($guid);
if (!$file->guid) {
register_error(elgg_echo("file:deletefailed"));
- forward('pg/file/all');
+ forward('file/all');
}
if (!$file->canEdit()) {
@@ -27,7 +27,7 @@ if (!$file->delete()) {
}
if (elgg_instanceof($container, 'group')) {
- forward("pg/file/group/$container->guid/owner");
+ forward("file/group/$container->guid/all");
} else {
- forward("pg/file/owner/$container->username");
+ forward("file/owner/$container->username");
}
diff --git a/mod/file/actions/file/upload.php b/mod/file/actions/file/upload.php
index 2749812d5..e20c4079f 100644
--- a/mod/file/actions/file/upload.php
+++ b/mod/file/actions/file/upload.php
@@ -6,21 +6,24 @@
*/
// Get variables
-$title = get_input("title");
+$title = htmlspecialchars(get_input('title', '', false), ENT_QUOTES, 'UTF-8');
$desc = get_input("description");
$access_id = (int) get_input("access_id");
$container_guid = (int) get_input('container_guid', 0);
$guid = (int) get_input('file_guid');
$tags = get_input("tags");
-$ajax = get_input('ajax', FALSE);
-
if ($container_guid == 0) {
$container_guid = elgg_get_logged_in_user_guid();
}
elgg_make_sticky_form('file');
+// check if upload failed
+if (!empty($_FILES['upload']['name']) && $_FILES['upload']['error'] != 0) {
+ register_error(elgg_echo('file:cannotload'));
+ forward(REFERER);
+}
// check whether this is a new file or an edit
$new_file = true;
@@ -31,19 +34,9 @@ if ($guid > 0) {
if ($new_file) {
// must have a file if a new file upload
if (empty($_FILES['upload']['name'])) {
-
$error = elgg_echo('file:nofile');
-
- if ($ajax) {
- echo json_encode(array(
- 'status' => 'error',
- 'message' => $error
- ));
- exit;
- } else {
- register_error($error);
- forward(REFERER);
- }
+ register_error($error);
+ forward(REFERER);
}
$file = new FilePluginFile();
@@ -51,7 +44,7 @@ if ($new_file) {
// if no title on new upload, grab filename
if (empty($title)) {
- $title = $_FILES['upload']['name'];
+ $title = htmlspecialchars($_FILES['upload']['name'], ENT_QUOTES, 'UTF-8');
}
} else {
@@ -67,15 +60,18 @@ if ($new_file) {
register_error(elgg_echo('file:noaccess'));
forward(REFERER);
}
+
+ if (!$title) {
+ // user blanked title, but we need one
+ $title = $file->title;
+ }
}
$file->title = $title;
$file->description = $desc;
$file->access_id = $access_id;
$file->container_guid = $container_guid;
-
-$tags = explode(",", $tags);
-$file->tags = $tags;
+$file->tags = string_to_tag_array($tags);
// we have a file upload, so process it
if (isset($_FILES['upload']['name']) && !empty($_FILES['upload']['name'])) {
@@ -96,20 +92,47 @@ if (isset($_FILES['upload']['name']) && !empty($_FILES['upload']['name'])) {
$filestorename = elgg_strtolower(time().$_FILES['upload']['name']);
}
- $file->setFilename($prefix.$filestorename);
- $file->setMimeType($_FILES['upload']['type']);
+ $file->setFilename($prefix . $filestorename);
+ $mime_type = ElggFile::detectMimeType($_FILES['upload']['tmp_name'], $_FILES['upload']['type']);
+
+ // hack for Microsoft zipped formats
+ $info = pathinfo($_FILES['upload']['name']);
+ $office_formats = array('docx', 'xlsx', 'pptx');
+ if ($mime_type == "application/zip" && in_array($info['extension'], $office_formats)) {
+ switch ($info['extension']) {
+ case 'docx':
+ $mime_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
+ break;
+ case 'xlsx':
+ $mime_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
+ break;
+ case 'pptx':
+ $mime_type = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
+ break;
+ }
+ }
+
+ // check for bad ppt detection
+ if ($mime_type == "application/vnd.ms-office" && $info['extension'] == "ppt") {
+ $mime_type = "application/vnd.ms-powerpoint";
+ }
+
+ $file->setMimeType($mime_type);
$file->originalfilename = $_FILES['upload']['name'];
- $file->simpletype = file_get_simple_type($_FILES['upload']['type']);
+ $file->simpletype = file_get_simple_type($mime_type);
+ // Open the file to guarantee the directory exists
$file->open("write");
- $file->write(get_uploaded_file('upload'));
$file->close();
+ move_uploaded_file($_FILES['upload']['tmp_name'], $file->getFilenameOnFilestore());
$guid = $file->save();
// if image, we need to create thumbnails (this should be moved into a function)
if ($guid && $file->simpletype == "image") {
- $thumbnail = get_resized_image_from_existing_file($file->getFilenameOnFilestore(),60,60, true);
+ $file->icontime = time();
+
+ $thumbnail = get_resized_image_from_existing_file($file->getFilenameOnFilestore(), 60, 60, true);
if ($thumbnail) {
$thumb = new ElggFile();
$thumb->setMimeType($_FILES['upload']['type']);
@@ -123,7 +146,7 @@ if (isset($_FILES['upload']['name']) && !empty($_FILES['upload']['name'])) {
unset($thumbnail);
}
- $thumbsmall = get_resized_image_from_existing_file($file->getFilenameOnFilestore(),153,153, true);
+ $thumbsmall = get_resized_image_from_existing_file($file->getFilenameOnFilestore(), 153, 153, true);
if ($thumbsmall) {
$thumb->setFilename($prefix."smallthumb".$filestorename);
$thumb->open("write");
@@ -133,7 +156,7 @@ if (isset($_FILES['upload']['name']) && !empty($_FILES['upload']['name'])) {
unset($thumbsmall);
}
- $thumblarge = get_resized_image_from_existing_file($file->getFilenameOnFilestore(),600,600, false);
+ $thumblarge = get_resized_image_from_existing_file($file->getFilenameOnFilestore(), 600, 600, false);
if ($thumblarge) {
$thumb->setFilename($prefix."largethumb".$filestorename);
$thumb->open("write");
@@ -142,6 +165,23 @@ if (isset($_FILES['upload']['name']) && !empty($_FILES['upload']['name'])) {
$file->largethumb = $prefix."largethumb".$filestorename;
unset($thumblarge);
}
+ } elseif ($file->icontime) {
+ // if it is not an image, we do not need thumbnails
+ unset($file->icontime);
+
+ $thumb = new ElggFile();
+
+ $thumb->setFilename($prefix . "thumb" . $filestorename);
+ $thumb->delete();
+ unset($file->thumbnail);
+
+ $thumb->setFilename($prefix . "smallthumb" . $filestorename);
+ $thumb->delete();
+ unset($file->smallthumb);
+
+ $thumb->setFilename($prefix . "largethumb" . $filestorename);
+ $thumb->delete();
+ unset($file->largethumb);
}
} else {
// not saving a file but still need to save the entity to push attributes to database
@@ -153,44 +193,22 @@ elgg_clear_sticky_form('file');
// handle results differently for new files and file updates
-// ajax is only for new files from embed right now.
if ($new_file) {
if ($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', elgg_get_logged_in_user_guid(), $file->guid);
- }
+ system_message($message);
+ add_to_river('river/object/file/create', 'create', elgg_get_logged_in_user_guid(), $file->guid);
} else {
// failed to save file object - nothing we can do about this
$error = elgg_echo("file:uploadfailed");
-
- if ($ajax) {
- echo json_encode(array(
- 'status' => 'error',
- 'message' => $error
- ));
- exit;
-
- } else {
- register_error($error);
- }
+ register_error($error);
}
- if (!$ajax) {
- $container = get_entity($container_guid);
- if (elgg_instanceof($container, 'group')) {
- forward("pg/file/group/$container->guid/owner");
- } else {
- forward("pg/file/owner/$container->username");
- }
+ $container = get_entity($container_guid);
+ if (elgg_instanceof($container, 'group')) {
+ forward("file/group/$container->guid/all");
+ } else {
+ forward("file/owner/$container->username");
}
} else {
@@ -201,4 +219,4 @@ if ($new_file) {
}
forward($file->getURL());
-}
+}
diff --git a/mod/file/download.php b/mod/file/download.php
index a386d490f..b2acdffec 100644
--- a/mod/file/download.php
+++ b/mod/file/download.php
@@ -9,32 +9,4 @@ require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
// Get the guid
$file_guid = get_input("file_guid");
-// Get the file
-$file = get_entity($file_guid);
-if (!$file) {
- register_error(elgg_echo("file:downloadfailed"));
- forward();
-}
-
-$mime = $file->getMimeType();
-if (!$mime) {
- $mime = "application/octet-stream";
-}
-
-$filename = $file->originalfilename;
-
-// fix for IE https issue
-header("Pragma: public");
-
-header("Content-type: $mime");
-if (strpos($mime, "image/") !== false) {
- header("Content-Disposition: inline; filename=\"$filename\"");
-} else {
- header("Content-Disposition: attachment; filename=\"$filename\"");
-}
-
-$contents = $file->grabFile();
-$splitString = str_split($contents, 8192);
-foreach ($splitString as $chunk) {
- echo $chunk;
-}
+forward("file/download/$file_guid");
diff --git a/mod/file/graphics/icons/application.gif b/mod/file/graphics/icons/application.gif
index f78903c0a..bfba76a97 100644
--- a/mod/file/graphics/icons/application.gif
+++ b/mod/file/graphics/icons/application.gif
Binary files differ
diff --git a/mod/file/graphics/icons/application_lrg.gif b/mod/file/graphics/icons/application_lrg.gif
index c6955f749..65f8eadb4 100644
--- a/mod/file/graphics/icons/application_lrg.gif
+++ b/mod/file/graphics/icons/application_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/archive.gif b/mod/file/graphics/icons/archive.gif
index 044cd042a..2213cdadd 100644
--- a/mod/file/graphics/icons/archive.gif
+++ b/mod/file/graphics/icons/archive.gif
Binary files differ
diff --git a/mod/file/graphics/icons/archive_lrg.gif b/mod/file/graphics/icons/archive_lrg.gif
index 0d0856cdd..6e3df3fd4 100644
--- a/mod/file/graphics/icons/archive_lrg.gif
+++ b/mod/file/graphics/icons/archive_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/excel.gif b/mod/file/graphics/icons/excel.gif
index f74f74fd7..ecd1d57d2 100644
--- a/mod/file/graphics/icons/excel.gif
+++ b/mod/file/graphics/icons/excel.gif
Binary files differ
diff --git a/mod/file/graphics/icons/excel_lrg.gif b/mod/file/graphics/icons/excel_lrg.gif
index 9b53d6dc7..84d1375d5 100644
--- a/mod/file/graphics/icons/excel_lrg.gif
+++ b/mod/file/graphics/icons/excel_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/general.gif b/mod/file/graphics/icons/general.gif
index cd5cf467a..20958b9a4 100644
--- a/mod/file/graphics/icons/general.gif
+++ b/mod/file/graphics/icons/general.gif
Binary files differ
diff --git a/mod/file/graphics/icons/general_lrg.gif b/mod/file/graphics/icons/general_lrg.gif
index 7c7a3c80a..3458915e5 100644
--- a/mod/file/graphics/icons/general_lrg.gif
+++ b/mod/file/graphics/icons/general_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/music.gif b/mod/file/graphics/icons/music.gif
index c44d7c987..5e9df08bc 100644
--- a/mod/file/graphics/icons/music.gif
+++ b/mod/file/graphics/icons/music.gif
Binary files differ
diff --git a/mod/file/graphics/icons/music_lrg.gif b/mod/file/graphics/icons/music_lrg.gif
index 780a252d6..1c0792cc3 100644
--- a/mod/file/graphics/icons/music_lrg.gif
+++ b/mod/file/graphics/icons/music_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/openoffice.gif b/mod/file/graphics/icons/openoffice.gif
index 3cfdc7196..053ad5bb5 100644
--- a/mod/file/graphics/icons/openoffice.gif
+++ b/mod/file/graphics/icons/openoffice.gif
Binary files differ
diff --git a/mod/file/graphics/icons/openoffice_lrg.gif b/mod/file/graphics/icons/openoffice_lrg.gif
index 5cdb13353..da28607fa 100644
--- a/mod/file/graphics/icons/openoffice_lrg.gif
+++ b/mod/file/graphics/icons/openoffice_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/pages.gif b/mod/file/graphics/icons/pages.gif
index 2e4ee761a..7efcb7278 100644
--- a/mod/file/graphics/icons/pages.gif
+++ b/mod/file/graphics/icons/pages.gif
Binary files differ
diff --git a/mod/file/graphics/icons/pages_lrg.gif b/mod/file/graphics/icons/pages_lrg.gif
index 2e41e4739..234a52672 100644
--- a/mod/file/graphics/icons/pages_lrg.gif
+++ b/mod/file/graphics/icons/pages_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/pdf.gif b/mod/file/graphics/icons/pdf.gif
index e7854b1e0..94362a4f0 100644
--- a/mod/file/graphics/icons/pdf.gif
+++ b/mod/file/graphics/icons/pdf.gif
Binary files differ
diff --git a/mod/file/graphics/icons/pdf_lrg.gif b/mod/file/graphics/icons/pdf_lrg.gif
index 5cd62b69c..aff869d04 100644
--- a/mod/file/graphics/icons/pdf_lrg.gif
+++ b/mod/file/graphics/icons/pdf_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/ppt.gif b/mod/file/graphics/icons/ppt.gif
index 44aef679b..88ab26d5c 100644
--- a/mod/file/graphics/icons/ppt.gif
+++ b/mod/file/graphics/icons/ppt.gif
Binary files differ
diff --git a/mod/file/graphics/icons/ppt_lrg.gif b/mod/file/graphics/icons/ppt_lrg.gif
index 71965711d..075590fd8 100644
--- a/mod/file/graphics/icons/ppt_lrg.gif
+++ b/mod/file/graphics/icons/ppt_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/text.gif b/mod/file/graphics/icons/text.gif
index 107e7ca37..897aa77f9 100644
--- a/mod/file/graphics/icons/text.gif
+++ b/mod/file/graphics/icons/text.gif
Binary files differ
diff --git a/mod/file/graphics/icons/text_lrg.gif b/mod/file/graphics/icons/text_lrg.gif
index 5f7c95519..d42ea4de1 100644
--- a/mod/file/graphics/icons/text_lrg.gif
+++ b/mod/file/graphics/icons/text_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/vcard.gif b/mod/file/graphics/icons/vcard.gif
index f7fdda9c0..202df68dd 100644
--- a/mod/file/graphics/icons/vcard.gif
+++ b/mod/file/graphics/icons/vcard.gif
Binary files differ
diff --git a/mod/file/graphics/icons/vcard_lrg.gif b/mod/file/graphics/icons/vcard_lrg.gif
index 6cd4c45e0..68ced88d2 100644
--- a/mod/file/graphics/icons/vcard_lrg.gif
+++ b/mod/file/graphics/icons/vcard_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/video.gif b/mod/file/graphics/icons/video.gif
index 09abfad3b..56aca7589 100644
--- a/mod/file/graphics/icons/video.gif
+++ b/mod/file/graphics/icons/video.gif
Binary files differ
diff --git a/mod/file/graphics/icons/video_lrg.gif b/mod/file/graphics/icons/video_lrg.gif
index b23dbad91..69cc706d9 100644
--- a/mod/file/graphics/icons/video_lrg.gif
+++ b/mod/file/graphics/icons/video_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/word.gif b/mod/file/graphics/icons/word.gif
index f906c75bd..6f7dff340 100644
--- a/mod/file/graphics/icons/word.gif
+++ b/mod/file/graphics/icons/word.gif
Binary files differ
diff --git a/mod/file/graphics/icons/word_lrg.gif b/mod/file/graphics/icons/word_lrg.gif
index 018c8e334..4c39108de 100644
--- a/mod/file/graphics/icons/word_lrg.gif
+++ b/mod/file/graphics/icons/word_lrg.gif
Binary files differ
diff --git a/mod/file/languages/en.php b/mod/file/languages/en.php
index c543dd8e4..b3344cb43 100644
--- a/mod/file/languages/en.php
+++ b/mod/file/languages/en.php
@@ -11,11 +11,8 @@ $english = array(
* Menu items and titles
*/
'file' => "Files",
- 'files' => "My Files",
- 'file:yours' => "Your files",
- 'file:yours:friends' => "Your friends' files",
'file:user' => "%s's files",
- 'file:friends' => "%s's friends' files",
+ 'file:friends' => "Friends' files",
'file:all' => "All site files",
'file:edit' => "Edit file",
'file:more' => "More files",
@@ -25,7 +22,6 @@ $english = array(
'file:gallery_list' => "Gallery or list view",
'file:num_files' => "Number of files to display",
'file:user:gallery'=>'View %s gallery',
- 'file:via' => 'via files',
'file:upload' => "Upload a file",
'file:replace' => 'Replace file content (leave blank to not change file)',
'file:list:title' => "%s's %s %s",
@@ -38,6 +34,9 @@ $english = array(
'file:desc' => "Description",
'file:tags' => "Tags",
+ 'file:list:list' => 'Switch to the list view',
+ 'file:list:gallery' => 'Switch to the gallery view',
+
'file:types' => "Uploaded file types",
'file:type:' => 'Files',
@@ -73,10 +72,22 @@ $english = array(
'file:display:number' => "Number of files to display",
- 'file:river:create' => 'uploaded the file',
+ 'river:create:object:file' => '%s uploaded the file %s',
+ 'river:comment:object:file' => '%s commented on the file %s',
'item:object:file' => 'Files',
+ 'file:newupload' => 'A new file has been uploaded',
+ 'file:notification' =>
+'%s uploaded a new file:
+
+%s
+%s
+
+View and comment on the new file:
+%s
+',
+
/**
* Embed media
**/
@@ -95,12 +106,12 @@ $english = array(
* Error messages
*/
- 'file:none' => "No files uploaded.",
+ 'file:none' => "No files.",
'file:uploadfailed' => "Sorry; we could not save your file.",
'file:downloadfailed' => "Sorry; this file is not available at this time.",
'file:deletefailed' => "Your file could not be deleted at this time.",
'file:noaccess' => "You do not have permissions to change this file",
- 'file:cannotload' => "There was an error loading the file",
+ 'file:cannotload' => "There was an error uploading the file",
'file:nofile' => "You must select a file",
);
diff --git a/mod/file/lib/file.php b/mod/file/lib/file.php
index 6ca49e95b..6f94772e7 100644
--- a/mod/file/lib/file.php
+++ b/mod/file/lib/file.php
@@ -26,13 +26,16 @@ function file_prepare_form_vars($file = null) {
if ($file) {
foreach (array_keys($values) as $field) {
- $values[$field] = $file->$field;
+ if (isset($file->$field)) {
+ $values[$field] = $file->$field;
+ }
}
}
if (elgg_is_sticky_form('file')) {
- foreach (array_keys($values) as $field) {
- $values[$field] = elgg_get_sticky_value('file', $field);
+ $sticky_values = elgg_get_sticky_values('file');
+ foreach ($sticky_values as $key => $value) {
+ $values[$key] = $value;
}
}
diff --git a/mod/file/manifest.xml b/mod/file/manifest.xml
index 51222ca94..26282a8e3 100644
--- a/mod/file/manifest.xml
+++ b/mod/file/manifest.xml
@@ -2,14 +2,17 @@
<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
<name>File</name>
<author>Core developers</author>
- <version>1.8</version>
+ <version>1.8.1</version>
+ <category>bundled</category>
+ <category>content</category>
+ <category>widget</category>
<description>File browser plugin</description>
<website>http://www.elgg.org/</website>
<copyright>See COPYRIGHT.txt</copyright>
- <license>GNU Public License version 2</license>
+ <license>GNU General Public License version 2</license>
<requires>
- <type>elgg_version</type>
- <version>2010030101</version>
+ <type>elgg_release</type>
+ <version>1.8</version>
</requires>
- <admin_interface>simple</admin_interface>
+ <activate_on_install>true</activate_on_install>
</plugin_manifest>
diff --git a/mod/file/pages/file/download.php b/mod/file/pages/file/download.php
new file mode 100644
index 000000000..76c1f1272
--- /dev/null
+++ b/mod/file/pages/file/download.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Elgg file download.
+ *
+ * @package ElggFile
+ */
+
+// Get the guid
+$file_guid = get_input("guid");
+
+// Get the file
+$file = get_entity($file_guid);
+if (!$file) {
+ register_error(elgg_echo("file:downloadfailed"));
+ forward();
+}
+
+$mime = $file->getMimeType();
+if (!$mime) {
+ $mime = "application/octet-stream";
+}
+
+$filename = $file->originalfilename;
+
+// fix for IE https issue
+header("Pragma: public");
+
+header("Content-type: $mime");
+if (strpos($mime, "image/") !== false || $mime == "application/pdf") {
+ header("Content-Disposition: inline; filename=\"$filename\"");
+} else {
+ header("Content-Disposition: attachment; filename=\"$filename\"");
+}
+
+ob_clean();
+flush();
+readfile($file->getFilenameOnFilestore());
+exit;
diff --git a/mod/file/edit.php b/mod/file/pages/file/edit.php
index 12e910a26..b396c6e9b 100644
--- a/mod/file/edit.php
+++ b/mod/file/pages/file/edit.php
@@ -20,7 +20,7 @@ if (!$file->canEdit()) {
$title = elgg_echo('file:edit');
-elgg_push_breadcrumb(elgg_echo('file'), "pg/file/all/");
+elgg_push_breadcrumb(elgg_echo('file'), "file/all");
elgg_push_breadcrumb($file->title, $file->getURL());
elgg_push_breadcrumb($title);
@@ -35,7 +35,6 @@ $body = elgg_view_layout('content', array(
'content' => $content,
'title' => $title,
'filter' => '',
- 'buttons' => '',
));
echo elgg_view_page($title, $body);
diff --git a/mod/file/friends.php b/mod/file/pages/file/friends.php
index dada7494e..d55c1e62b 100644
--- a/mod/file/friends.php
+++ b/mod/file/pages/file/friends.php
@@ -6,13 +6,17 @@
*/
$owner = elgg_get_page_owner_entity();
+if (!$owner) {
+ forward('', '404');
+}
-elgg_push_breadcrumb(elgg_echo('file'), "pg/file/all/");
-elgg_push_breadcrumb($owner->name, "pg/file/owner/$owner->username");
+elgg_push_breadcrumb(elgg_echo('file'), "file/all");
+elgg_push_breadcrumb($owner->name, "file/owner/$owner->username");
elgg_push_breadcrumb(elgg_echo('friends'));
+elgg_register_title_button();
-$title = elgg_echo("file:friends", array($owner->name));
+$title = elgg_echo("file:friends");
// offset is grabbed in list_user_friends_objects
$content = list_user_friends_objects($owner->guid, 'file', 10, false);
diff --git a/mod/file/index.php b/mod/file/pages/file/owner.php
index de2e46408..99cf62714 100644
--- a/mod/file/index.php
+++ b/mod/file/pages/file/owner.php
@@ -9,46 +9,36 @@
group_gatekeeper();
$owner = elgg_get_page_owner_entity();
+if (!$owner) {
+ forward('', '404');
+}
-elgg_push_breadcrumb(elgg_echo('file'), "pg/file/all/");
+elgg_push_breadcrumb(elgg_echo('file'), "file/all");
elgg_push_breadcrumb($owner->name);
+elgg_register_title_button();
+
$params = array();
if ($owner->guid == elgg_get_logged_in_user_guid()) {
// user looking at own files
- $title = elgg_echo('file:yours');
$params['filter_context'] = 'mine';
} else if (elgg_instanceof($owner, 'user')) {
// someone else's files
- $title = elgg_echo("file:user", array($owner()->name));
- // do not show button or select a tab when viewing someone else's posts
+ // do not show select a tab when viewing someone else's posts
$params['filter_context'] = 'none';
- $params['buttons'] = '';
} else {
// group files
- $title = elgg_echo("file:user", array($owner->name));
$params['filter'] = '';
- if ($owner->isMember(elgg_get_logged_in_user_entity())) {
- $url = "pg/file/add/$owner->guid";
- $vars = array(
- 'href' => $url,
- 'text' => elgg_echo("file:add"),
- 'class' => 'elgg-button elgg-button-action',
- );
- $button = elgg_view('output/url', $vars);
- $params['buttons'] = $button;
- } else {
- $params['buttons'] = '';
- }
}
+$title = elgg_echo("file:user", array($owner->name));
+
// List files
$content = elgg_list_entities(array(
- 'types' => 'object',
- 'subtypes' => 'file',
+ 'type' => 'object',
+ 'subtype' => 'file',
'container_guid' => $owner->guid,
- 'limit' => 10,
'full_view' => FALSE,
));
if (!$content) {
@@ -56,9 +46,7 @@ if (!$content) {
}
$sidebar = file_get_type_cloud(elgg_get_page_owner_guid());
-if (elgg_instanceof($owner, 'user')) {
- $sidebar .= elgg_view_latest_comments(elgg_get_page_owner_guid(), 'object', 'file');
-}
+$sidebar = elgg_view('file/sidebar');
$params['content'] = $content;
$params['title'] = $title;
diff --git a/mod/file/search.php b/mod/file/pages/file/search.php
index b7f82e951..d60dfb755 100644
--- a/mod/file/search.php
+++ b/mod/file/pages/file/search.php
@@ -3,12 +3,14 @@
* List files by type
*
* @package ElggFile
-
*/
-// Load Elgg engine
-require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
$page_owner_guid = get_input('page_owner', null);
+
+if ($page_owner_guid !== null) {
+ $page_owner_guid = sanitise_int($page_owner_guid);
+}
+
if ($page_owner_guid) {
elgg_set_page_owner_guid($page_owner_guid);
}
@@ -18,25 +20,25 @@ group_gatekeeper();
// Get input
$md_type = 'simpletype';
-$tag = get_input('tag');
+// avoid reflected XSS attacks by only allowing alnum characters
+$file_type = preg_replace('[\W]', '', get_input('tag'));
$listtype = get_input('listtype');
-$friends = get_input('friends', false);
-
+$friends = (bool)get_input('friends', false);
// breadcrumbs
-elgg_push_breadcrumb(elgg_echo('file'), "pg/file/all/");
+elgg_push_breadcrumb(elgg_echo('file'), "file/all");
if ($owner) {
if (elgg_instanceof($owner, 'user')) {
- elgg_push_breadcrumb($owner->name, "pg/file/owner/$owner->username");
+ elgg_push_breadcrumb($owner->name, "file/owner/$owner->username");
} else {
- elgg_push_breadcrumb($owner->name, "pg/file/group/$owner->guid/owner");
+ elgg_push_breadcrumb($owner->name, "file/group/$owner->guid/all");
}
}
if ($friends && $owner) {
- elgg_push_breadcrumb(elgg_echo('friends'), "pg/file/friends/$owner->username");
+ elgg_push_breadcrumb(elgg_echo('friends'), "file/friends/$owner->username");
}
-if ($tag) {
- elgg_push_breadcrumb(elgg_echo("file:type:$tag"));
+if ($file_type) {
+ elgg_push_breadcrumb(elgg_echo("file:type:$file_type"));
} else {
elgg_push_breadcrumb(elgg_echo('all'));
}
@@ -44,10 +46,10 @@ if ($tag) {
// title
if (!$owner) {
// world files
- $title = elgg_echo('all') . ' ' . elgg_echo("file:type:$tag");
+ $title = elgg_echo('all') . ' ' . elgg_echo("file:type:$file_type");
} else {
$friend_string = $friends ? elgg_echo('file:title:friends') : '';
- $type_string = elgg_echo("file:type:$tag");
+ $type_string = elgg_echo("file:type:$file_type");
$title = elgg_echo('file:list:title', array($owner->name, $friend_string, $type_string));
}
@@ -72,16 +74,16 @@ if ($listtype == "gallery") {
}
$params = array(
- 'types' => 'object',
- 'subtypes' => 'file',
+ 'type' => 'object',
+ 'subtype' => 'file',
'container_guid' => $page_owner_guid,
'limit' => $limit,
'full_view' => false,
);
-if ($tag) {
+if ($file_type) {
$params['metadata_name'] = $md_type;
- $params['metadata_value'] = $tag;
+ $params['metadata_value'] = $file_type;
$content = elgg_list_entities_from_metadata($params);
} else {
$content = elgg_list_entities($params);
@@ -89,7 +91,6 @@ if ($tag) {
$body = elgg_view_layout('content', array(
'filter' => '',
- 'buttons' => '',
'content' => $content,
'title' => $title,
'sidebar' => $sidebar,
diff --git a/mod/file/upload.php b/mod/file/pages/file/upload.php
index 9f0220b95..3aa25b6db 100644
--- a/mod/file/upload.php
+++ b/mod/file/pages/file/upload.php
@@ -15,11 +15,11 @@ group_gatekeeper();
$title = elgg_echo('file:add');
// set up breadcrumbs
-elgg_push_breadcrumb(elgg_echo('file'), "pg/file/all/");
+elgg_push_breadcrumb(elgg_echo('file'), "file/all");
if (elgg_instanceof($owner, 'user')) {
- elgg_push_breadcrumb($owner->name, "pg/file/owner/$owner->username");
+ elgg_push_breadcrumb($owner->name, "file/owner/$owner->username");
} else {
- elgg_push_breadcrumb($owner->name, "pg/file/group/$owner->guid/owner");
+ elgg_push_breadcrumb($owner->name, "file/group/$owner->guid/all");
}
elgg_push_breadcrumb($title);
@@ -32,7 +32,6 @@ $body = elgg_view_layout('content', array(
'content' => $content,
'title' => $title,
'filter' => '',
- 'buttons' => '',
));
echo elgg_view_page($title, $body);
diff --git a/mod/file/pages/file/view.php b/mod/file/pages/file/view.php
new file mode 100644
index 000000000..6c9566a89
--- /dev/null
+++ b/mod/file/pages/file/view.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * View a file
+ *
+ * @package ElggFile
+ */
+
+$file = get_entity(get_input('guid'));
+if (!$file) {
+ register_error(elgg_echo('noaccess'));
+ $_SESSION['last_forward_from'] = current_page_url();
+ forward('');
+}
+
+$owner = elgg_get_page_owner_entity();
+
+elgg_push_breadcrumb(elgg_echo('file'), 'file/all');
+
+$crumbs_title = $owner->name;
+if (elgg_instanceof($owner, 'group')) {
+ elgg_push_breadcrumb($crumbs_title, "file/group/$owner->guid/all");
+} else {
+ elgg_push_breadcrumb($crumbs_title, "file/owner/$owner->username");
+}
+
+$title = $file->title;
+
+elgg_push_breadcrumb($title);
+
+$content = elgg_view_entity($file, array('full_view' => true));
+$content .= elgg_view_comments($file);
+
+elgg_register_menu_item('title', array(
+ 'name' => 'download',
+ 'text' => elgg_echo('file:download'),
+ 'href' => "file/download/$file->guid",
+ 'link_class' => 'elgg-button elgg-button-action',
+));
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/file/world.php b/mod/file/pages/file/world.php
index a55dcb452..96c8de785 100644
--- a/mod/file/world.php
+++ b/mod/file/pages/file/world.php
@@ -7,20 +7,21 @@
elgg_push_breadcrumb(elgg_echo('file'));
-$limit = get_input("limit", 10);
+elgg_register_title_button();
$title = elgg_echo('file:all');
-elgg_push_context('search');
$content = elgg_list_entities(array(
- 'types' => 'object',
- 'subtypes' => 'file',
- 'limit' => $limit,
+ 'type' => 'object',
+ 'subtype' => 'file',
'full_view' => FALSE
));
-elgg_pop_context();
+if (!$content) {
+ $content = elgg_echo('file:none');
+}
$sidebar = file_get_type_cloud();
+$sidebar = elgg_view('file/sidebar');
$body = elgg_view_layout('content', array(
'filter_context' => 'all',
diff --git a/mod/file/start.php b/mod/file/start.php
index c2f445d5d..7c0c216b2 100644
--- a/mod/file/start.php
+++ b/mod/file/start.php
@@ -16,12 +16,15 @@ function file_init() {
elgg_register_library('elgg:file', elgg_get_plugins_path() . 'file/lib/file.php');
// Site navigation
- $item = new ElggMenuItem('file', elgg_echo('file'), 'pg/file/all');
+ $item = new ElggMenuItem('file', elgg_echo('file'), 'file/all');
elgg_register_menu_item('site', $item);
// Extend CSS
elgg_extend_view('css/elgg', 'file/css');
+ // add enclosure to rss item
+ elgg_extend_view('extensions/item', 'file/enclosure');
+
// extend group main page
elgg_extend_view('groups/tool_latest', 'file/group_module');
@@ -57,28 +60,48 @@ function file_init() {
// temporary - see #2010
elgg_register_action("file/download", "$action_path/download.php");
-
// embed support
- elgg_register_plugin_hook_handler('embed_get_sections', 'all', 'file_embed_get_sections');
- elgg_register_plugin_hook_handler('embed_get_items', 'file', 'file_embed_get_items');
- elgg_register_plugin_hook_handler('embed_get_upload_sections', 'all', 'file_embed_get_upload_sections');
+ $item = ElggMenuItem::factory(array(
+ 'name' => 'file',
+ 'text' => elgg_echo('file'),
+ 'priority' => 10,
+ 'data' => array(
+ 'options' => array(
+ 'type' => 'object',
+ 'subtype' => 'file',
+ ),
+ ),
+ ));
+ elgg_register_menu_item('embed', $item);
+
+ $item = ElggMenuItem::factory(array(
+ 'name' => 'file_upload',
+ 'text' => elgg_echo('file:upload'),
+ 'priority' => 100,
+ 'data' => array(
+ 'view' => 'embed/file_upload/content',
+ ),
+ ));
+
+ elgg_register_menu_item('embed', $item);
}
/**
* Dispatches file pages.
* URLs take the form of
- * All files: pg/file/all
- * User's files: pg/file/owner/<username>
- * Friends' files: pg/file/friends/<username>
- * View file: pg/file/view/<guid>/<title>
- * New file: pg/file/add/<guid>
- * Edit file: pg/file/edit/<guid>
- * Group files: pg/file/group/<guid>/owner
+ * All files: file/all
+ * User's files: file/owner/<username>
+ * Friends' files: file/friends/<username>
+ * View file: file/view/<guid>/<title>
+ * New file: file/add/<guid>
+ * Edit file: file/edit/<guid>
+ * Group files: file/group/<guid>/all
+ * Download: file/download/<guid>
*
* Title is ignored
*
* @param array $page
- * @return NULL
+ * @return bool
*/
function file_page_handler($page) {
@@ -86,16 +109,22 @@ function file_page_handler($page) {
$page[0] = 'all';
}
- $file_dir = elgg_get_plugins_path() . 'file';
+ $file_dir = elgg_get_plugins_path() . 'file/pages/file';
$page_type = $page[0];
switch ($page_type) {
case 'owner':
- include "$file_dir/index.php";
+ file_register_toggle();
+ include "$file_dir/owner.php";
break;
case 'friends':
+ file_register_toggle();
include "$file_dir/friends.php";
break;
+ case 'read': // Elgg 1.7 compatibility
+ register_error(elgg_echo("changebookmark"));
+ forward("file/view/{$page[1]}");
+ break;
case 'view':
set_input('guid', $page[1]);
include "$file_dir/view.php";
@@ -107,23 +136,65 @@ function file_page_handler($page) {
set_input('guid', $page[1]);
include "$file_dir/edit.php";
break;
+ case 'search':
+ file_register_toggle();
+ include "$file_dir/search.php";
+ break;
case 'group':
- include "$file_dir/index.php";
+ file_register_toggle();
+ include "$file_dir/owner.php";
break;
case 'all':
- default:
+ file_register_toggle();
include "$file_dir/world.php";
break;
+ case 'download':
+ set_input('guid', $page[1]);
+ include "$file_dir/download.php";
+ break;
+ default:
+ return false;
}
+ return true;
+}
+
+/**
+ * Adds a toggle to extra menu for switching between list and gallery views
+ */
+function file_register_toggle() {
+ $url = elgg_http_remove_url_query_element(current_page_url(), 'list_type');
+
+ if (get_input('list_type', 'list') == 'list') {
+ $list_type = "gallery";
+ $icon = elgg_view_icon('grid');
+ } else {
+ $list_type = "list";
+ $icon = elgg_view_icon('list');
+ }
+
+ if (substr_count($url, '?')) {
+ $url .= "&list_type=" . $list_type;
+ } else {
+ $url .= "?list_type=" . $list_type;
+ }
+
+
+ elgg_register_menu_item('extras', array(
+ 'name' => 'file_list',
+ 'text' => $icon,
+ 'href' => $url,
+ 'title' => elgg_echo("file:list:$list_type"),
+ 'priority' => 1000,
+ ));
}
/**
* Creates the notification message body
*
- * @param unknown_type $hook
- * @param unknown_type $entity_type
- * @param unknown_type $returnvalue
- * @param unknown_type $params
+ * @param string $hook
+ * @param string $entity_type
+ * @param string $returnvalue
+ * @param array $params
*/
function file_notify_message($hook, $entity_type, $returnvalue, $params) {
$entity = $params['entity'];
@@ -132,7 +203,7 @@ function file_notify_message($hook, $entity_type, $returnvalue, $params) {
if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'file')) {
$descr = $entity->description;
$title = $entity->title;
- $url = elgg_get_site_url() . "pg/view/" . $entity->guid;
+ $url = elgg_get_site_url() . "view/" . $entity->guid;
$owner = $entity->getOwnerEntity();
return $owner->name . ' ' . elgg_echo("file:via") . ': ' . $entity->title . "\n\n" . $descr . "\n\n" . $entity->getURL();
}
@@ -144,12 +215,12 @@ function file_notify_message($hook, $entity_type, $returnvalue, $params) {
*/
function file_owner_block_menu($hook, $type, $return, $params) {
if (elgg_instanceof($params['entity'], 'user')) {
- $url = "pg/file/owner/{$params['entity']->username}";
+ $url = "file/owner/{$params['entity']->username}";
$item = new ElggMenuItem('file', elgg_echo('file'), $url);
$return[] = $item;
} else {
- if ($params['entity']->files_enable != "no") {
- $url = "pg/file/group/{$params['entity']->guid}/owner";
+ if ($params['entity']->file_enable != "no") {
+ $url = "file/group/{$params['entity']->guid}/all";
$item = new ElggMenuItem('file', elgg_echo('file:group'), $url);
$return[] = $item;
}
@@ -165,14 +236,22 @@ function file_owner_block_menu($hook, $type, $return, $params) {
* @return string The overall type
*/
function file_get_simple_type($mimetype) {
+
+ if ($simpletype = elgg_trigger_plugin_hook('file:simpletype', $mimetype, null, null)) {
+ return $simpletype;
+ }
switch ($mimetype) {
case "application/msword":
+ case "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
return "document";
break;
case "application/pdf":
return "document";
break;
+ case "application/ogg":
+ return "audio";
+ break;
}
if (substr_count($mimetype, 'text/')) {
@@ -261,7 +340,7 @@ function get_filetype_cloud($owner_guid = "", $friends = false) {
function file_url_override($entity) {
$title = $entity->title;
$title = elgg_get_friendly_title($title);
- return "pg/file/view/" . $entity->getGUID() . "/" . $title;
+ return "file/view/" . $entity->getGUID() . "/" . $title;
}
/**
@@ -278,17 +357,22 @@ function file_icon_url_override($hook, $type, $returnvalue, $params) {
// thumbnails get first priority
if ($file->thumbnail) {
- return "mod/file/thumbnail.php?file_guid=$file->guid&size=$size";
+ $ts = (int)$file->icontime;
+ return "mod/file/thumbnail.php?file_guid=$file->guid&size=$size&icontime=$ts";
}
$mapping = array(
'application/excel' => 'excel',
'application/msword' => 'word',
+ 'application/ogg' => 'music',
'application/pdf' => 'pdf',
'application/powerpoint' => 'ppt',
'application/vnd.ms-excel' => 'excel',
'application/vnd.ms-powerpoint' => 'ppt',
'application/vnd.oasis.opendocument.text' => 'openoffice',
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'word',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'excel',
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'ppt',
'application/x-gzip' => 'archive',
'application/x-rar-compressed' => 'archive',
'application/x-stuffit' => 'archive',
@@ -322,7 +406,7 @@ function file_icon_url_override($hook, $type, $returnvalue, $params) {
if ($size == 'large') {
$ext = '_lrg';
} else {
- $exit = '';
+ $ext = '';
}
$url = "mod/file/graphics/icons/{$type}{$ext}.gif";
@@ -330,68 +414,3 @@ function file_icon_url_override($hook, $type, $returnvalue, $params) {
return $url;
}
}
-
-/**
- * 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_sections($hook, $type, $value, $params) {
- $value['file'] = array(
- 'name' => elgg_echo('file'),
- 'layout' => 'list',
- 'icon_size' => 'small',
- );
-
- return $value;
-}
-
-/**
- * Return a list of files for embedding
- *
- * @param unknown_type $hook
- * @param unknown_type $type
- * @param unknown_type $value
- * @param unknown_type $params
- */
-function file_embed_get_items($hook, $type, $value, $params) {
- $options = array(
- 'owner_guid' => elgg_get_logged_in_user_guid(),
- 'type_subtype_pair' => array('object' => 'file'),
- 'count' => TRUE
- );
-
- if ($count = elgg_get_entities($options)) {
- $value['count'] += $count;
-
- unset($options['count']);
- $options['offset'] = $params['offset'];
- $options['limit'] = $params['limit'];
-
- $items = elgg_get_entities($options);
-
- $value['items'] = array_merge($items, $value['items']);
- }
-
- 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;
-}
diff --git a/mod/file/thumbnail.php b/mod/file/thumbnail.php
index 35bf8c7f7..851f13a8f 100644
--- a/mod/file/thumbnail.php
+++ b/mod/file/thumbnail.php
@@ -46,7 +46,7 @@ if ($simpletype == "image") {
// caching images for 10 days
header("Content-type: $mime");
- header('Expires: ' . date('r',time() + 864000));
+ header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+10 days")), true);
header("Pragma: public", true);
header("Cache-Control: public", true);
header("Content-Length: " . strlen($contents));
diff --git a/mod/file/view.php b/mod/file/view.php
deleted file mode 100644
index 9e89fbd56..000000000
--- a/mod/file/view.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * View a file
- *
- * @package ElggFile
- */
-
-$file = get_entity(get_input('guid'));
-
-$owner = elgg_get_page_owner_entity();
-
-elgg_push_breadcrumb(elgg_echo('file'), 'pg/file/all');
-
-$crumbs_title = $owner->name;
-if (elgg_instanceof($owner, 'group')) {
- elgg_push_breadcrumb($crumbs_title, "pg/file/group/$owner->guid/owner");
-} else {
- elgg_push_breadcrumb($crumbs_title, "pg/file/owner/$owner->username");
-}
-
-$title = $file->title;
-
-elgg_push_breadcrumb($title);
-
-$content = elgg_view_entity($file, true);
-$content .= elgg_view_comments($file);
-
-$body = elgg_view_layout('content', array(
- 'content' => $content,
- 'title' => $title,
- 'filter' => '',
- 'header' => '',
-));
-
-echo elgg_view_page($title, $body);
diff --git a/mod/file/views/default/embed/file_upload/content.php b/mod/file/views/default/embed/file_upload/content.php
new file mode 100644
index 000000000..8b630c828
--- /dev/null
+++ b/mod/file/views/default/embed/file_upload/content.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Upload a file through the embed interface
+ */
+
+$form_vars = array(
+ 'enctype' => 'multipart/form-data',
+ 'class' => 'elgg-form-embed',
+);
+$body_vars = array('container_guid' => elgg_get_page_owner_guid());
+echo elgg_view_form('file/upload', $form_vars, $body_vars);
+
+// the tab we want to be forwarded to after upload is complete
+echo elgg_view('input/hidden', array(
+ 'name' => 'embed_forward',
+ 'value' => 'file',
+)); \ No newline at end of file
diff --git a/mod/file/views/default/file/embed_upload.php b/mod/file/views/default/file/embed_upload.php
deleted file mode 100644
index 8536acd77..000000000
--- a/mod/file/views/default/file/embed_upload.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-/**
- * Files upload form for embed
- */
-
-echo elgg_view_form('file/upload', array('id' => 'file_embed_upload'), array('ajax' => TRUE));
-
-?>
-
-<?php //@todo JS 1.8: no ?>
-<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 elgg_get_site_url() . 'pg/embed/embed'; ?>?active_section=file');
- } else {
- $('.popup .content').find('form').prepend('<p>' + info.message + '</p>');
- }
- }
- };
- $(this).ajaxSubmit(options);
- return false;
- });
-});
-</script>
diff --git a/mod/file/views/default/file/group_module.php b/mod/file/views/default/file/group_module.php
index 8c80f297c..ad6c58dbb 100644
--- a/mod/file/views/default/file/group_module.php
+++ b/mod/file/views/default/file/group_module.php
@@ -10,14 +10,11 @@ if ($group->file_enable == "no") {
}
$all_link = elgg_view('output/url', array(
- 'href' => "pg/file/group/$group->guid/owner",
+ 'href' => "file/group/$group->guid/all",
'text' => elgg_echo('link:view:all'),
+ 'is_trusted' => true,
));
-$header = "<span class=\"group-widget-viewall\">$all_link</span>";
-$header .= '<h3>' . elgg_echo('file:group') . '</h3>';
-
-
elgg_push_context('widgets');
$options = array(
'type' => 'object',
@@ -35,9 +32,14 @@ if (!$content) {
}
$new_link = elgg_view('output/url', array(
- 'href' => "pg/file/add/$group->guid",
+ 'href' => "file/add/$group->guid",
'text' => elgg_echo('file:add'),
+ 'is_trusted' => true,
));
-$content .= "<span class='elgg-widget-more'>$new_link</span>";
-echo elgg_view_module('info', '', $content, array('header' => $header));
+echo elgg_view('groups/profile/module', array(
+ 'title' => elgg_echo('file:group'),
+ 'content' => $content,
+ 'all_link' => $all_link,
+ 'add_link' => $new_link,
+));
diff --git a/mod/file/views/default/file/sidebar.php b/mod/file/views/default/file/sidebar.php
new file mode 100644
index 000000000..f61b8e64e
--- /dev/null
+++ b/mod/file/views/default/file/sidebar.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * File sidebar
+ */
+
+echo elgg_view('page/elements/comments_block', array(
+ 'subtypes' => 'file',
+ 'owner_guid' => elgg_get_page_owner_guid(),
+));
+
+echo elgg_view('page/elements/tagcloud_block', array(
+ 'subtypes' => 'file',
+ 'owner_guid' => elgg_get_page_owner_guid(),
+));
diff --git a/mod/file/views/default/file/specialcontent/image/default.php b/mod/file/views/default/file/specialcontent/image/default.php
index 91ec11064..431ac9f4f 100644
--- a/mod/file/views/default/file/specialcontent/image/default.php
+++ b/mod/file/views/default/file/specialcontent/image/default.php
@@ -1,12 +1,17 @@
<?php
/**
* Display an image
+ *
+ * @uses $vars['entity']
*/
-$image_url = elgg_get_site_url() . "mod/file/thumbnail.php?file_guid={$vars['entity']->getGUID()}&size=large";
-$download_url = elgg_get_site_url() . "mod/file/download.php?file_guid={$vars['entity']->getGUID()}";
+$file = $vars['entity'];
-if ($vars['full'] && $smallthumb = $vars['entity']->smallthumb) {
+$image_url = $file->getIconURL('large');
+$image_url = elgg_format_url($image_url);
+$download_url = elgg_get_site_url() . "file/download/{$file->getGUID()}";
+
+if ($vars['full_view']) {
echo <<<HTML
<div class="file-photo">
<a href="$download_url"><img class="elgg-photo" src="$image_url" /></a>
diff --git a/mod/file/views/default/file/typecloud.php b/mod/file/views/default/file/typecloud.php
index c0db7932b..4253bf674 100644
--- a/mod/file/views/default/file/typecloud.php
+++ b/mod/file/views/default/file/typecloud.php
@@ -4,7 +4,7 @@
*/
function file_type_cloud_get_url($type, $friends) {
- $url = elgg_get_site_url() . "mod/file/search.php?subtype=file";
+ $url = elgg_get_site_url() . 'file/search?subtype=file';
if ($type->tag != "all") {
$url .= "&md_type=simpletype&tag=" . urlencode($type->tag);
@@ -15,7 +15,7 @@ function file_type_cloud_get_url($type, $friends) {
}
if ($type->tag == "image") {
- $url .= "&listtype=gallery";
+ $url .= "&list_type=gallery";
}
if (elgg_get_page_owner_guid()) {
diff --git a/mod/file/views/default/forms/file/upload.php b/mod/file/views/default/forms/file/upload.php
index 001e66674..f637a419e 100644
--- a/mod/file/views/default/forms/file/upload.php
+++ b/mod/file/views/default/forms/file/upload.php
@@ -11,13 +11,17 @@ $desc = elgg_extract('description', $vars, '');
$tags = elgg_extract('tags', $vars, '');
$access_id = elgg_extract('access_id', $vars, ACCESS_DEFAULT);
$container_guid = elgg_extract('container_guid', $vars);
+if (!$container_guid) {
+ $container_guid = elgg_get_logged_in_user_guid();
+}
$guid = elgg_extract('guid', $vars, null);
-$ajax = elgg_extract('ajax', $vars, FALSE);
if ($guid) {
$file_label = elgg_echo("file:replace");
+ $submit_label = elgg_echo('save');
} else {
$file_label = elgg_echo("file:file");
+ $submit_label = elgg_echo('upload');
}
?>
@@ -49,21 +53,16 @@ if ($categories) {
<label><?php echo elgg_echo('access'); ?></label><br />
<?php echo elgg_view('input/access', array('name' => 'access_id', 'value' => $access_id)); ?>
</div>
-<div>
+<div class="elgg-foot">
<?php
echo elgg_view('input/hidden', array('name' => 'container_guid', 'value' => $container_guid));
-//@todo this should not be necessary in 1.8... -- ajax actions can be auto-detected
-if ($ajax) {
- echo elgg_view('input/hidden', array('name' => 'ajax', 'value' => 1));
-}
-
if ($guid) {
echo elgg_view('input/hidden', array('name' => 'file_guid', 'value' => $guid));
}
-echo elgg_view('input/submit', array('value' => elgg_echo("save")));
+echo elgg_view('input/submit', array('value' => $submit_label));
?>
</div>
diff --git a/mod/file/views/default/icon/object/file.php b/mod/file/views/default/icon/object/file.php
index 249dd9c99..a3190310b 100644
--- a/mod/file/views/default/icon/object/file.php
+++ b/mod/file/views/default/icon/object/file.php
@@ -2,9 +2,11 @@
/**
* File icon view
*
- * @uses $vars['entity'] The entity the icon represents - uses getIconURL() method
- * @uses $vars['size'] topbar, tiny, small, medium (default), large, master
- * @uses $vars['href'] Optional override for link
+ * @uses $vars['entity'] The entity the icon represents - uses getIconURL() method
+ * @uses $vars['size'] topbar, tiny, small, medium (default), large, master
+ * @uses $vars['href'] Optional override for link
+ * @uses $vars['img_class'] Optional CSS class added to img
+ * @uses $vars['link_class'] Optional CSS class added to link
*/
$entity = $vars['entity'];
@@ -16,6 +18,7 @@ if (!in_array($vars['size'], $sizes)) {
}
$title = $entity->title;
+$title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8', false);
$url = $entity->getURL();
if (isset($vars['href'])) {
@@ -23,18 +26,29 @@ if (isset($vars['href'])) {
}
$class = '';
+if (isset($vars['img_class'])) {
+ $class = $vars['img_class'];
+}
if ($entity->thumbnail) {
- $class = 'class="elgg-photo"';
+ $class = "class=\"elgg-photo $class\"";
+} else if ($class) {
+ $class = "class=\"$class\"";
}
$img_src = $entity->getIconURL($vars['size']);
+$img_src = elgg_format_url($img_src);
$img = "<img $class src=\"$img_src\" alt=\"$title\" />";
if ($url) {
- echo elgg_view('output/url', array(
+ $params = array(
'href' => $url,
'text' => $img,
- ));
+ 'is_trusted' => true,
+ );
+ if (isset($vars['link_class'])) {
+ $params['class'] = $vars['link_class'];
+ }
+ echo elgg_view('output/url', $params);
} else {
echo $img;
}
diff --git a/mod/file/views/default/object/file.php b/mod/file/views/default/object/file.php
index c5773600b..64f19c483 100644
--- a/mod/file/views/default/object/file.php
+++ b/mod/file/views/default/object/file.php
@@ -5,7 +5,7 @@
* @package ElggFile
*/
-$full = elgg_extract('full', $vars, FALSE);
+$full = elgg_extract('full_view', $vars, FALSE);
$file = elgg_extract('entity', $vars, FALSE);
if (!$file) {
@@ -19,17 +19,15 @@ $excerpt = elgg_get_excerpt($file->description);
$mime = $file->mimetype;
$base_type = substr($mime, 0, strpos($mime,'/'));
-$body = elgg_view('output/longtext', array('value' => $file->description));
-
$owner_link = elgg_view('output/url', array(
- 'href' => "pg/file/owner/$owner->username",
+ 'href' => "file/owner/$owner->username",
'text' => $owner->name,
+ 'is_trusted' => true,
));
$author_text = elgg_echo('byline', array($owner_link));
$file_icon = elgg_view_entity_icon($file, 'small');
-$tags = elgg_view('output/tags', array('tags' => $file->tags));
$date = elgg_view_friendly_time($file->time_created);
$comments_count = $file->countComments();
@@ -39,17 +37,20 @@ if ($comments_count != 0) {
$comments_link = elgg_view('output/url', array(
'href' => $file->getURL() . '#file-comments',
'text' => $text,
+ 'is_trusted' => true,
));
} else {
$comments_link = '';
}
-$metadata = elgg_view('navigation/menu/metadata', array(
- 'entity' => $file,
+$metadata = elgg_view_menu('entity', array(
+ 'entity' => $vars['entity'],
'handler' => 'file',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
));
-$subtitle = "$author_text $date $categories $comments_link";
+$subtitle = "$author_text $date $comments_link $categories";
// do not show the metadata and controls in widget view
if (elgg_in_context('widgets')) {
@@ -65,34 +66,24 @@ if ($full && !elgg_in_context('gallery')) {
$extra = elgg_view("file/specialcontent/$base_type/default", $vars);
}
- $download = elgg_view('output/url', array(
- 'href' => "mod/file/download.php?file_guid=$file->guid",
- 'text' => elgg_echo("file:download"),
- 'class' => 'elgg-button elgg-button-action',
- ));
-
- $header = elgg_view_title($file->title);
-
$params = array(
'entity' => $file,
'title' => false,
'metadata' => $metadata,
'subtitle' => $subtitle,
- 'tags' => $tags,
);
- $list_body = elgg_view('page/components/list/body', $params);
+ $params = $params + $vars;
+ $summary = elgg_view('object/elements/summary', $params);
- $file_info = elgg_view_image_block($file_icon, $list_body);
+ $text = elgg_view('output/longtext', array('value' => $file->description));
+ $body = "$text $extra";
- echo <<<HTML
-$header
-$file_info
-<div class="file elgg-content">
- $body
- $extra
- <p>$download</p>
-</div>
-HTML;
+ echo elgg_view('object/elements/full', array(
+ 'entity' => $file,
+ 'icon' => $file_icon,
+ 'summary' => $summary,
+ 'body' => $body,
+ ));
} elseif (elgg_in_context('gallery')) {
echo '<div class="file-gallery-item">';
@@ -107,10 +98,10 @@ HTML;
'entity' => $file,
'metadata' => $metadata,
'subtitle' => $subtitle,
- 'tags' => $tags,
'content' => $excerpt,
);
- $list_body = elgg_view('page/components/list/body', $params);
+ $params = $params + $vars;
+ $list_body = elgg_view('object/elements/summary', $params);
echo elgg_view_image_block($file_icon, $list_body);
}
diff --git a/mod/file/views/default/river/object/file/create.php b/mod/file/views/default/river/object/file/create.php
index 620d1d18c..e8e6142e0 100644
--- a/mod/file/views/default/river/object/file/create.php
+++ b/mod/file/views/default/river/object/file/create.php
@@ -7,29 +7,7 @@ $object = $vars['item']->getObjectEntity();
$excerpt = strip_tags($object->description);
$excerpt = elgg_get_excerpt($excerpt);
-$params = array(
- 'href' => $object->getURL(),
- 'text' => $object->title,
-);
-$link = elgg_view('output/url', $params);
-
-$group_string = '';
-$container = $object->getContainerEntity();
-if ($container instanceof ElggGroup) {
- $params = array(
- 'href' => $container->getURL(),
- 'text' => $container->name,
- );
- $group_link = elgg_view('output/url', $params);
- $group_string = elgg_echo('river:ingroup', array($group_link));
-}
-
-echo elgg_echo('file:river:create');
-
-echo " $link $group_string";
-
-if ($excerpt) {
- echo '<div class="elgg-river-content">';
- echo $excerpt;
- echo '</div>';
-}
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => $excerpt,
+)); \ No newline at end of file
diff --git a/mod/file/views/default/widgets/filerepo/content.php b/mod/file/views/default/widgets/filerepo/content.php
index d3deece56..f3e152de3 100644
--- a/mod/file/views/default/widgets/filerepo/content.php
+++ b/mod/file/views/default/widgets/filerepo/content.php
@@ -21,10 +21,11 @@ $content = elgg_list_entities($options);
echo $content;
if ($content) {
- $url = "pg/file/owner/" . elgg_get_page_owner_entity()->username;
+ $url = "file/owner/" . elgg_get_page_owner_entity()->username;
$more_link = elgg_view('output/url', array(
'href' => $url,
'text' => elgg_echo('file:more'),
+ 'is_trusted' => true,
));
echo "<span class=\"elgg-widget-more\">$more_link</span>";
} else {
diff --git a/mod/file/views/rss/file/enclosure.php b/mod/file/views/rss/file/enclosure.php
new file mode 100644
index 000000000..fb4a899d9
--- /dev/null
+++ b/mod/file/views/rss/file/enclosure.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Link to download the file
+ *
+ * @uses $vars['entity']
+ */
+
+if (elgg_instanceof($vars['entity'], 'object', 'file')) {
+ $download_url = elgg_get_site_url() . 'file/download/' . $vars['entity']->getGUID();
+ $size = $vars['entity']->size();
+ $mime_type = $vars['entity']->getMimeType();
+ echo <<<END
+
+ <enclosure url="$download_url" length="$size" type="$mime_type" />";
+END;
+}
diff --git a/mod/file/views/rss/object/file.php b/mod/file/views/rss/object/file.php
deleted file mode 100644
index a0660d6c8..000000000
--- a/mod/file/views/rss/object/file.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Elgg RSS file object view
- *
- * @package ElggFile
- * @subpackage Core
- */
-$title = $vars['entity']->title;
-if (empty($title)) {
- $title = elgg_get_excerpt($vars['entity']->description, 32);
-}
-?>
-
-<item>
- <guid isPermaLink='true'><?php echo $vars['entity']->getURL(); ?></guid>
- <pubDate><?php echo date("r", $vars['entity']->time_created) ?></pubDate>
- <link><?php echo $vars['entity']->getURL(); ?></link>
- <title><![CDATA[<?php echo $title; ?>]]></title>
- <description><![CDATA[<?php echo (autop($vars['entity']->description)); ?>]]></description>
- <enclosure url="<?php echo elgg_get_site_url(); ?>mod/file/download.php?file_guid=<?php echo $vars['entity']->getGUID(); ?>" length="<?php echo $vars['entity']->size(); ?>" type="<?php echo $vars['entity']->getMimeType(); ?>" />
-</item>