0) { $new_file = false; } 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); } } $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 = new FilePluginFile($guid); if (!$file) { register_error(elgg_echo('file:cannotload')); forward(REFERER); } // user must be able to edit file if (!$file->canEdit()) { register_error(elgg_echo('file:noaccess')); forward(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 = elgg_substr($filestorename, elgg_strlen($prefix)); } else { $filestorename = elgg_strtolower(time().$_FILES['upload']['name']); } $file->setFilename($prefix.$filestorename); $file->setMimeType($_FILES['upload']['type']); $file->originalfilename = $_FILES['upload']['name']; $file->simpletype = file_get_simple_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); } } } else { // not saving a file but still need to save the entity to push attributes to database $file->save(); } // file saved so clear sticky form 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); } } 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); } } if (!$ajax) { $container = get_entity($container_guid); if (elgg_instanceof($container, 'group')) { forward("file/group/$container->guid/owner"); } else { forward("file/owner/$container->username"); } } } else { if ($guid) { system_message(elgg_echo("file:saved")); } else { register_error(elgg_echo("file:uploadfailed")); } forward($file->getURL()); }