aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/lib/filestore.php160
1 files changed, 95 insertions, 65 deletions
diff --git a/engine/lib/filestore.php b/engine/lib/filestore.php
index a509d1a8f..6dfa8073f 100644
--- a/engine/lib/filestore.php
+++ b/engine/lib/filestore.php
@@ -95,6 +95,13 @@
abstract public function getFileSize(ElggFile $file);
/**
+ * Return the filename of a given file as stored on the filestore.
+ *
+ * @param ElggFile $file
+ */
+ abstract public function getFilenameOnFilestore(ElggFile $file);
+
+ /**
* Get the filestore's creation parameters as an associative array.
* Used for serialisation and for storing the creation details along side a file object.
*
@@ -138,7 +145,7 @@
public function open(ElggFile $file, $mode)
{
- $fullname = $this->get_systempath_from_file($file);
+ $fullname = $this->getFilenameOnFilestore($file);
// Split into path and name
$ls = strrpos($fullname,"/");
@@ -181,7 +188,7 @@
public function delete(ElggFile $file)
{
- $unlink = unlink($this->get_systempath_from_file($file));
+ $unlink = unlink($this->getFilenameOnFilestore($file));
if ($unlink)
return $file->delete();
@@ -205,7 +212,18 @@
public function getFileSize(ElggFile $file)
{
- return filesize($this->get_systempath_from_file($file));
+ return filesize($this->getFilenameOnFilestore($file));
+ }
+
+ public function getFilenameOnFilestore(ElggFile $file)
+ {
+ $owner = $file->getOwnerEntity();
+ if (!$owner)
+ $owner = $_SESSION['user'];
+
+ if ((!$owner) || (!$owner->username)) throw InvalidParameterException("All files must have an owner!");
+
+ return $this->dir_root . $this->make_file_matrix($owner->username) . $file->getFilename();
}
/**
@@ -242,17 +260,6 @@
return $matrix.$filename."/";
}
- protected function get_systempath_from_file(ElggFile $file)
- {
- $owner = $file->getOwnerEntity();
- if (!$owner)
- $owner = $_SESSION['user'];
-
- if ((!$owner) || (!$owner->username)) throw InvalidParameterException("All files must have an owner!");
-
- return $this->dir_root . $this->make_file_matrix($owner->username) . $file->getFilename();
- }
-
public function getParameters()
{
return array("dir_root" => $this->dir_root);
@@ -323,6 +330,12 @@
public function getFilename() { return $this->filename; }
/**
+ * Return the filename of this file as it is/will be stored on the filestore, which may be different
+ * to the filename.
+ */
+ public function getFilenameOnFilestore() { return $this->filestore->getFilenameOnFilestore($this); }
+
+ /**
* Get the mime type of the file.
*/
public function getMimeType()
@@ -579,57 +592,74 @@
function get_resized_image_from_uploaded_file($input_name, $maxwidth, $maxheight) {
// If our file exists ...
if (isset($_FILES[$input_name]) && $_FILES[$input_name]['error'] == 0) {
-
- // Get the size information from the image
- if ($imgsizearray = getimagesize($_FILES[$input_name]['tmp_name'])) {
-
- // Get the contents of the file
- $filecontents = file_get_contents($_FILES[$input_name]['tmp_name']);
-
- // Get width and height
- $width = $imgsizearray[0];
- $height = $imgsizearray[1];
- $newwidth = $width;
- $newheight = $height;
-
- if ($width > $maxwidth) {
- $newheight = floor($height * ($maxwidth / $width));
- $newwidth = $maxwidth;
- }
- if ($newheight > $maxheight) {
- $newwidth = floor($newwidth * ($maxheight / $newheight));
- $newheight = $maxheight;
- }
-
- $accepted_formats = array(
- 'image/jpeg' => 'jpeg',
- 'image/png' => 'png',
- 'image/gif' => 'png'
- );
-
- // If it's a file we can manipulate ...
- if (array_key_exists($imgsizearray['mime'],$accepted_formats)) {
-
- $function = "imagecreatefrom" . $accepted_formats[$imgsizearray['mime']];
- $newimage = imagecreatetruecolor($newwidth,$newheight);
- if (is_callable($function) && $oldimage = $function($_FILES[$input_name]['tmp_name'])) {
-
- // Resize and return the image contents!
- imagecopyresampled($newimage, $oldimage, 0,0,0,0,$newwidth,$newheight,$width,$height);
- // imagecopyresized($newimage, $oldimage, 0,0,0,0,$newwidth,$newheight,$width,$height);
- ob_start();
- imagejpeg($newimage, null, 90);
- $jpeg = ob_get_clean();
- return $jpeg;
-
- }
-
- }
-
- }
-
- }
- return false;
+
+ return get_resized_image_from_existing_file($_FILES[$input_name]['tmp_name'], $maxwidth, $maxheight);
+
+ }
+
+ return false;
+ }
+
+ /**
+ * Gets the jpeg contents of the resized version of an already uploaded image
+ * (Returns false if the uploaded file was not an image)
+ *
+ * @param string $input_name The name of the file input field on the submission form
+ * @param int $maxwidth The maximum width of the resized image
+ * @param int $maxheight The maximum height of the resized image
+ * @return false|mixed The contents of the resized image, or false on failure
+ */
+ function get_resized_image_from_existing_file($input_name, $maxwidth, $maxheight) {
+
+ // Get the size information from the image
+ if ($imgsizearray = getimagesize($input_name)) {
+
+ // Get the contents of the file
+ $filecontents = file_get_contents($input_name);
+
+ // Get width and height
+ $width = $imgsizearray[0];
+ $height = $imgsizearray[1];
+ $newwidth = $width;
+ $newheight = $height;
+
+ if ($width > $maxwidth) {
+ $newheight = floor($height * ($maxwidth / $width));
+ $newwidth = $maxwidth;
+ }
+ if ($newheight > $maxheight) {
+ $newwidth = floor($newwidth * ($maxheight / $newheight));
+ $newheight = $maxheight;
+ }
+
+ $accepted_formats = array(
+ 'image/jpeg' => 'jpeg',
+ 'image/png' => 'png',
+ 'image/gif' => 'png'
+ );
+
+ // If it's a file we can manipulate ...
+ if (array_key_exists($imgsizearray['mime'],$accepted_formats)) {
+
+ $function = "imagecreatefrom" . $accepted_formats[$imgsizearray['mime']];
+ $newimage = imagecreatetruecolor($newwidth,$newheight);
+ if (is_callable($function) && $oldimage = $function($input_name)) {
+
+ // Resize and return the image contents!
+ imagecopyresampled($newimage, $oldimage, 0,0,0,0,$newwidth,$newheight,$width,$height);
+ // imagecopyresized($newimage, $oldimage, 0,0,0,0,$newwidth,$newheight,$width,$height);
+ ob_start();
+ imagejpeg($newimage, null, 90);
+ $jpeg = ob_get_clean();
+ return $jpeg;
+
+ }
+
+ }
+
+ }
+
+ return false;
}