diff options
Diffstat (limited to 'mod/file/actions')
-rw-r--r-- | mod/file/actions/delete.php | 68 | ||||
-rw-r--r-- | mod/file/actions/download.php | 40 | ||||
-rw-r--r-- | mod/file/actions/save.php | 51 | ||||
-rw-r--r-- | mod/file/actions/upload.php | 171 |
4 files changed, 330 insertions, 0 deletions
diff --git a/mod/file/actions/delete.php b/mod/file/actions/delete.php new file mode 100644 index 000000000..ee6dab91e --- /dev/null +++ b/mod/file/actions/delete.php @@ -0,0 +1,68 @@ +<?php + + /** + * Elgg file delete + * + * @package ElggFile + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + $guid = (int) get_input('file'); + if ($file = get_entity($guid)) { + + if ($file->canEdit()) { + + $container = get_entity($file->container_guid); + + $thumbnail = $file->thumbnail; + $smallthumb = $file->smallthumb; + $largethumb = $file->largethumb; + if ($thumbnail) { + + $delfile = new ElggFile(); + $delfile->owner_guid = $file->owner_guid; + $delfile->setFilename($thumbnail); + $delfile->delete(); + + } + if ($smallthumb) { + + $delfile = new ElggFile(); + $delfile->owner_guid = $file->owner_guid; + $delfile->setFilename($smallthumb); + $delfile->delete(); + + } + if ($largethumb) { + + $delfile = new ElggFile(); + $delfile->owner_guid = $file->owner_guid; + $delfile->setFilename($largethumb); + $delfile->delete(); + + } + + if (!$file->delete()) { + register_error(elgg_echo("file:deletefailed")); + } else { + system_message(elgg_echo("file:deleted")); + } + + } else { + + $container = $_SESSION['user']; + register_error(elgg_echo("file:deletefailed")); + + } + + } else { + + register_error(elgg_echo("file:deletefailed")); + + } + + forward("pg/file/" . $_SESSION['user']->username); + +?>
\ No newline at end of file diff --git a/mod/file/actions/download.php b/mod/file/actions/download.php new file mode 100644 index 000000000..ef5f24964 --- /dev/null +++ b/mod/file/actions/download.php @@ -0,0 +1,40 @@ +<?php + /** + * Elgg file browser download action. + * + * @package ElggFile + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + // Get the guid + $file_guid = get_input("file_guid"); + + // Get the file + $file = get_entity($file_guid); + + if ($file) + { + $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; + exit; + } + else + register_error(elgg_echo("file:downloadfailed")); +?>
\ No newline at end of file diff --git a/mod/file/actions/save.php b/mod/file/actions/save.php new file mode 100644 index 000000000..038e61d83 --- /dev/null +++ b/mod/file/actions/save.php @@ -0,0 +1,51 @@ +<?php + /** + * Elgg file browser save action + * + * @package ElggFile + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + global $CONFIG; + + // Get variables + $title = get_input("title"); + $desc = get_input("description"); + $tags = get_input("tags"); + $access_id = (int) get_input("access_id"); + + $guid = (int) get_input('file_guid'); + + if (!$file = get_entity($guid)) { + register_error(elgg_echo("file:uploadfailed")); + forward($CONFIG->wwwroot . "pg/file/" . $_SESSION['user']->username); + exit; + } + + $result = false; + + $container_guid = $file->container_guid; + $container = get_entity($container_guid); + + if ($file->canEdit()) { + + $file->access_id = $access_id; + $file->title = $title; + $file->description = $desc; + + // Save tags + $tags = explode(",", $tags); + $file->tags = $tags; + + $result = $file->save(); + } + + if ($result) + system_message(elgg_echo("file:saved")); + else + register_error(elgg_echo("file:uploadfailed")); + + forward($CONFIG->wwwroot . "pg/file/" . $container->username); +?>
\ No newline at end of file diff --git a/mod/file/actions/upload.php b/mod/file/actions/upload.php new file mode 100644 index 000000000..e515c73e0 --- /dev/null +++ b/mod/file/actions/upload.php @@ -0,0 +1,171 @@ +<?php + /** + * Elgg file browser uploader/edit action + * + * @package ElggFile + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + global $CONFIG; + + gatekeeper(); + + // Get variables + $title = get_input("title"); + $desc = get_input("description"); + $access_id = (int) get_input("access_id"); + $container_guid = (int) get_input('container_guid', 0); + if ($container_guid == 0) { + $container_guid = get_loggedin_userid(); + } + $guid = (int) get_input('file_guid'); + $tags = get_input("tags"); + + // check whether this is a new file or an edit + $new_file = true; + if ($guid > 0) { + $new_file = false; + } + + if ($new_file) { + // must have a file if a new file upload + if (empty($_FILES['upload']['name'])) { + // cache information in session + $_SESSION['uploadtitle'] = $title; + $_SESSION['uploaddesc'] = $desc; + $_SESSION['uploadtags'] = $tags; + $_SESSION['uploadaccessid'] = $access_id; + + register_error(elgg_echo('file:nofile')); + forward($_SERVER['HTTP_REFERER']); + } + + $file = new FilePluginFile(); + $file->subtype = "file"; + + // if no title on new upload, grab filename + if (empty($title)) { + $title = $_FILES['upload']['name']; + } + + } else { + // load original file object + $file = get_entity($guid); + if (!$file) { + register_error(elgg_echo('file:cannotload')); + forward($_SERVER['HTTP_REFERER']); + } + + // user must be able to edit file + if (!$file->canEdit()) { + register_error(elgg_echo('file:noaccess')); + forward($_SERVER['HTTP_REFERER']); + } + } + + $file->title = $title; + $file->description = $desc; + $file->access_id = $access_id; + $file->container_guid = $container_guid; + + $tags = explode(",", $tags); + $file->tags = $tags; + + // we have a file upload, so process it + if (isset($_FILES['upload']['name']) && !empty($_FILES['upload']['name'])) { + + $prefix = "file/"; + + // if previous file, delete it + if ($new_file == false) { + $filename = $file->getFilenameOnFilestore(); + if (file_exists($filename)) { + unlink($filename); + } + + // use same filename on the disk - ensures thumbnails are overwritten + $filestorename = $file->getFilename(); + $filestorename = substr($filestorename, strlen($prefix)); + } else { + $filestorename = strtolower(time().$_FILES['upload']['name']); + } + + $file->setFilename($prefix.$filestorename); + $file->setMimeType($_FILES['upload']['type']); + $file->originalfilename = $_FILES['upload']['name']; + $file->simpletype = get_general_file_type($_FILES['upload']['type']); + + $file->open("write"); + $file->write(get_uploaded_file('upload')); + $file->close(); + + $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); + if ($thumbnail) { + $thumb = new ElggFile(); + $thumb->setMimeType($_FILES['upload']['type']); + + $thumb->setFilename($prefix."thumb".$filestorename); + $thumb->open("write"); + $thumb->write($thumbnail); + $thumb->close(); + + $file->thumbnail = $prefix."thumb".$filestorename; + unset($thumbnail); + } + + $thumbsmall = get_resized_image_from_existing_file($file->getFilenameOnFilestore(),153,153, true); + if ($thumbsmall) { + $thumb->setFilename($prefix."smallthumb".$filestorename); + $thumb->open("write"); + $thumb->write($thumbsmall); + $thumb->close(); + $file->smallthumb = $prefix."smallthumb".$filestorename; + unset($thumbsmall); + } + + $thumblarge = get_resized_image_from_existing_file($file->getFilenameOnFilestore(),600,600, false); + if ($thumblarge) { + $thumb->setFilename($prefix."largethumb".$filestorename); + $thumb->open("write"); + $thumb->write($thumblarge); + $thumb->close(); + $file->largethumb = $prefix."largethumb".$filestorename; + unset($thumblarge); + } + } + } + + // make sure session cache is cleared + unset($_SESSION['uploadtitle']); + unset($_SESSION['uploaddesc']); + unset($_SESSION['uploadtags']); + unset($_SESSION['uploadaccessid']); + + // handle results differently for new files and file updates + if ($new_file) { + if ($guid) { + system_message(elgg_echo("file:saved")); + 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")); + } + + $container_user = get_entity($container_guid); + forward($CONFIG->wwwroot . "pg/file/" . $container_user->username); + + } else { + if ($guid) { + system_message(elgg_echo("file:saved")); + } else { + register_error(elgg_echo("file:uploadfailed")); + } + + forward($file->getURL()); + } |