aboutsummaryrefslogtreecommitdiff
path: root/engine/lib/filestore.php
diff options
context:
space:
mode:
Diffstat (limited to 'engine/lib/filestore.php')
-rw-r--r--engine/lib/filestore.php446
1 files changed, 19 insertions, 427 deletions
diff --git a/engine/lib/filestore.php b/engine/lib/filestore.php
index 0c9f8107c..a3c7ba439 100644
--- a/engine/lib/filestore.php
+++ b/engine/lib/filestore.php
@@ -18,7 +18,7 @@
*/
function get_dir_size($dir, $totalsize = 0) {
$handle = @opendir($dir);
- while ($file = @readdir ($handle)) {
+ while ($file = @readdir($handle)) {
if (eregi("^\.{1,2}$", $file)) {
continue;
}
@@ -149,6 +149,12 @@ $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0, $upscale = FALSE) {
return FALSE;
}
+ // color transparencies white (default is black)
+ imagefilledrectangle(
+ $new_image, 0, 0, $params['newwidth'], $params['newheight'],
+ imagecolorallocate($new_image, 255, 255, 255)
+ );
+
$rtn_code = imagecopyresampled( $new_image,
$original_image,
0,
@@ -302,8 +308,6 @@ function get_image_resize_parameters($width, $height, $options) {
function file_delete($guid) {
if ($file = get_entity($guid)) {
if ($file->canEdit()) {
- $container = get_entity($file->container_guid);
-
$thumbnail = $file->thumbnail;
$smallthumb = $file->smallthumb;
$largethumb = $file->largethumb;
@@ -375,426 +379,9 @@ function file_get_general_file_type($mimetype) {
}
/**
- * Not currently used
- *
- * @todo remove
- *
- * @param string $prefix Unknown
- * @param string $subtype Unknown
- * @param string $plugin Unknown
- *
- * @return void
- */
-function file_handle_upload($prefix, $subtype, $plugin) {
- $desc = get_input("description");
- $tags = get_input("tags");
- $tags = explode(",", $tags);
- $folder = get_input("folder_text");
- if (!$folder) {
- $folder = get_input("folder_select");
- }
- $access_id = (int) get_input("access_id");
- $container_guid = (int) get_input('container_guid', 0);
- if (!$container_guid) {
- $container_guid == get_loggedin_userid();
- }
-
- // Extract file from, save to default filestore (for now)
-
- // see if a plugin has set a quota for this user
- $params = array('container_guid'=>$container_guid);
- $file_quota = trigger_plugin_hook("$plugin:quotacheck", 'user', $param);
-
- if (!$file_quota) {
- // no, see if there is a generic quota set
- $file_quota = get_plugin_setting('quota', $plugin);
- }
- if ($file_quota) {
- // convert to megabytes
- $file_quota = $file_quota * 1000 * 1024;
- }
-
- // handle uploaded files
- $number_of_files = get_input('number_of_files', 0);
- $quota_exceeded = false;
- $bad_mime_type = false;
-
- for ($i = 0; $i < $number_of_files; $i++) {
- $title = get_input("title_" . $i);
- $uploaded = $_FILES["upload_" . $i];
- if (!$uploaded || !$uploaded['name']) {
- // no such file, so skip it
- continue;
- }
- if ($plugin == "photo") {
- // do a mime type test
- $supported_types = array(
- 'image/jpeg',
- 'image/gif',
- 'image/png',
- 'image/jpg',
- 'image/jpe',
- 'image/pjpeg',
- 'image/x-png'
- );
- if (in_array($uploaded['type'], $supported_types)) {
- $file = new PhotoPluginFile();
- } else {
- $bad_mime_type = true;
- break;
- }
- } else {
- $file = new FilePluginFile();
- }
- $dir_size = $file->getFilestoreSize($prefix, $container_guid);
- $filestorename = strtolower(time() . $uploaded['name']);
- $file->setFilename($prefix . $filestorename);
- $file->setMimeType($uploaded['type']);
-
- $file->originalfilename = $uploaded['name'];
-
- $file->subtype = $subtype;
-
- $file->access_id = $access_id;
-
- $uf = get_uploaded_file('upload_' . $i);
-
- if ($file_quota) {
- $file_size = strlen($uf);
- if (($dir_size + $file_size) > $file_quota) {
- $quota_exceeded = true;
- }
- }
-
- if (!$quota_exceeded) {
- // all clear, so try to save the data
-
- $file->open("write");
- $file->write($uf);
- $file->close();
-
- $file->title = $title;
- $file->description = $desc;
- if ($container_guid) {
- $file->container_guid = $container_guid;
- }
-
- // Save tags
- $file->tags = $tags;
-
- $file->simpletype = file_get_general_file_type($uploaded['type']);
- $file->folder = $folder;
-
- $result = $file->save();
-
- if ($result) {
-
- // Generate thumbnail (if image)
- if (substr_count($file->getMimeType(), 'image/')) {
- $thumbnail = get_resized_image_from_existing_file($file->getFilenameOnFilestore(), 60,
- 60, true);
- $thumbsmall = get_resized_image_from_existing_file($file->getFilenameOnFilestore(), 153,
- 153, true);
- $thumblarge = get_resized_image_from_existing_file($file->getFilenameOnFilestore(), 600,
- 600, false);
-
- if ($thumbnail) {
- $thumb = new ElggFile();
- $thumb->setMimeType($uploaded['type']);
-
- $thumb->setFilename($prefix . "thumb" . $filestorename);
- $thumb->open("write");
- $thumb->write($thumbnail);
- $thumb->close();
-
- $file->thumbnail = $prefix . "thumb" . $filestorename;
-
- $thumb->setFilename($prefix . "smallthumb" . $filestorename);
- $thumb->open("write");
- $thumb->write($thumbsmall);
- $thumb->close();
- $file->smallthumb = $prefix . "smallthumb" . $filestorename;
-
- $thumb->setFilename($prefix . "largethumb" . $filestorename);
- $thumb->open("write");
- $thumb->write($thumblarge);
- $thumb->close();
- $file->largethumb = $prefix . "largethumb" . $filestorename;
- }
- }
-
- // add to this user's file folders
- file_add_to_folders($folder, $container_guid, $plugin);
-
- add_to_river("river/object/$plugin/create", 'create', $_SESSION['user']->guid, $file->guid);
- } else {
- break;
- }
- } else {
- break;
- }
- }
-
- if ($quota_exceeded) {
- echo elgg_echo("$plugin:quotaexceeded");
- } else if ($bad_mime_type) {
- echo elgg_echo("$plugin:badmimetype");
- } else if ($result) {
- if ($number_of_files > 1) {
- echo elgg_echo("$plugin:saved_multi");
- } else {
- echo elgg_echo("$plugin:saved");
- }
- } else {
- if ($number_of_files > 1) {
- echo elgg_echo("$plugin:uploadfailed_multi");
- } else {
- echo elgg_echo("$plugin:uploadfailed");
- }
- }
-}
-
-/**
- * @todo remove
- *
- * @param unknown_type $folder
- * @param unknown_type $container_guid
- * @param unknown_type $plugin
- */
-function file_add_to_folders($folder, $container_guid, $plugin) {
- if ($container_guid && ($container = get_entity($container_guid))) {
- $folder_field_name = 'elgg_' . $plugin . '_folders';
- $folders = $container->$folder_field_name;
- if ($folders) {
- if (is_array($folders)) {
- if (!in_array($folder, $folders)) {
- $folders[] = $folder;
- $container->$folder_field_name = $folders;
- }
- } else {
- if ($folders != $folder) {
- $container->$folder_field_name = array($folders, $folder);
- }
- }
- } else {
- $container->$folder_field_name = $folder;
- }
- }
-}
-
-/**
- * @todo remove
- *
- * @param unknown_type $forward
- * @param unknown_type $plugin
- */
-function file_handle_save($forward, $plugin) {
- // Get variables
- $title = get_input("title");
- $desc = get_input("description");
- $tags = get_input("tags");
- $folder = get_input("folder_text");
- if (!$folder) {
- $folder = get_input("folder_select");
- }
- $access_id = (int) get_input("access_id");
-
- $guid = (int) get_input('file_guid');
-
- if (!$file = get_entity($guid)) {
- register_error(elgg_echo("$plugin:uploadfailed"));
- forward($forward . $_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;
- $file->folder = $folder;
- // add to this user's file folders
- file_add_to_folders($folder, $container_guid, $plugin);
-
- // Save tags
- $tags = explode(", ", $tags);
- $file->tags = $tags;
-
- $result = $file->save();
- }
-
- if ($result) {
- system_message(elgg_echo("$plugin:saved"));
- } else {
- register_error(elgg_echo("$plugin:uploadfailed"));
- }
- forward($forward . $container->username);
-}
-
-/**
- * Manage a file download.
- *
- * @todo remove
- *
- * @param unknown_type $plugin Unknown
- * @param unknown_type $file_guid If not specified then file_guid will be found in input.
- */
-function file_manage_download($plugin, $file_guid = "") {
- // Get the guid
- $file_guid = (int)$file_guid;
-
- if (!$file_guid) {
- $file_guid = (int)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;
-
- header("Content-type: $mime");
- if (strpos($mime, "image/")!==false) {
- header("Content-Disposition: inline; filename=\"$filename\"");
- } else {
- header("Content-Disposition: attachment; filename=\"$filename\"");
- }
-
- echo $file->grabFile();
- exit;
- } else {
- register_error(elgg_echo("$plugin:downloadfailed"));
- }
-}
-
-/**
- * Manage the download of a file icon.
- *
- * @todo remove
- * @param unknown_type $plugin
- * @param unknown_type $file_guid The guid, if not specified this is obtained from the input.
- */
-function file_manage_icon_download($plugin, $file_guid = "") {
- // Get the guid
- $file_guid = (int)$file_guid;
-
- if (!$file_guid) {
- $file_guid = (int)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->thumbnail;
-
- header("Content-type: $mime");
- if (strpos($mime, "image/")!==false) {
- header("Content-Disposition: inline; filename=\"$filename\"");
- } else {
- header("Content-Disposition: attachment; filename=\"$filename\"");
- }
-
- $readfile = new ElggFile();
- $readfile->owner_guid = $file->owner_guid;
- $readfile->setFilename($filename);
-
- /*
- if ($file->open("read"));
- {
- while (!$file->eof())
- {
- echo $file->read(10240, $file->tell());
- }
- }
- */
-
- $contents = $readfile->grabFile();
- if (empty($contents)) {
- echo file_get_contents(dirname(dirname(__FILE__)) . "/graphics/icons/general.jpg" );
- } else {
- echo $contents;
- }
- exit;
- } else {
- register_error(elgg_echo("$plugin:downloadfailed"));
- }
-}
-
-/**
- * @todo remove
- *
- * @param unknown_type $file_guid
- * @param unknown_type $size
- */
-function file_display_thumbnail($file_guid, $size) {
- // Get file entity
- if ($file = get_entity($file_guid)) {
- $simpletype = $file->simpletype;
- if ($simpletype == "image") {
- // Get file thumbnail
- if ($size == "small") {
- $thumbfile = $file->smallthumb;
- } else {
- $thumbfile = $file->largethumb;
- }
-
- // Grab the file
- if ($thumbfile && !empty($thumbfile)) {
- $readfile = new ElggFile();
- $readfile->owner_guid = $file->owner_guid;
- $readfile->setFilename($thumbfile);
- $mime = $file->getMimeType();
- $contents = $readfile->grabFile();
-
- header("Content-type: $mime");
- echo $contents;
- exit;
- }
- }
- }
-}
-
-/**
- * @todo remove
- *
- * @param unknown_type $file
- */
-function file_set_page_owner($file) {
- $page_owner = page_owner_entity();
- if ($page_owner === false || is_null($page_owner)) {
- $container_guid = $file->container_guid;
- if (!empty($container_guid)) {
- if ($page_owner = get_entity($container_guid)) {
- set_page_owner($page_owner->guid);
- }
- }
-
- if (empty($page_owner)) {
- $page_owner = $_SESSION['user'];
- set_page_owner($_SESSION['guid']);
- }
- }
-}
-
-/**
* Delete a directory and all its contents
*
- * @param str $directory Directory to delete
+ * @param string $directory Directory to delete
*
* @return bool
*/
@@ -882,6 +469,7 @@ function set_default_filestore(ElggFilestore $filestore) {
* ElggFile.
*
* @return void
+ * @access private
*/
function filestore_run_once() {
// Register a class
@@ -890,16 +478,19 @@ function filestore_run_once() {
/**
* Initialise the file modules.
- * Listens to system boot and registers any appropriate file types and classes
+ * Listens to system init and configures the default filestore
*
* @return void
+ * @access private
*/
function filestore_init() {
global $CONFIG;
// Now register a default filestore
- set_default_filestore(new ElggDiskFilestore($CONFIG->dataroot));
-
+ if (isset($CONFIG->dataroot)) {
+ set_default_filestore(new ElggDiskFilestore($CONFIG->dataroot));
+ }
+
// Now run this stuff, but only once
run_function_once("filestore_run_once");
}
@@ -907,12 +498,13 @@ function filestore_init() {
/**
* Unit tests for files
*
- * @param sting $hook unit_test
+ * @param string $hook unit_test
* @param string $type system
* @param mixed $value Array of tests
* @param mixed $params Params
*
* @return array
+ * @access private
*/
function filestore_test($hook, $type, $value, $params) {
global $CONFIG;
@@ -922,7 +514,7 @@ function filestore_test($hook, $type, $value, $params) {
// Register a startup event
-register_elgg_event_handler('init', 'system', 'filestore_init', 100);
+elgg_register_event_handler('init', 'system', 'filestore_init', 100);
// Unit testing
-register_plugin_hook('unit_test', 'system', 'filestore_test'); \ No newline at end of file
+elgg_register_plugin_hook_handler('unit_test', 'system', 'filestore_test');