diff options
| author | Chad Parry <github@chad.parry.org> | 2011-04-28 19:41:44 -0600 |
|---|---|---|
| committer | Chad Parry <github@chad.parry.org> | 2011-04-28 19:41:44 -0600 |
| commit | b875368167658fd7992812504674afeb61c64831 (patch) | |
| tree | 93360747c3655657f9e9bb5eb00386ec5b457228 /modules/gallery/models | |
| parent | 406064087662184ec7f85297b9cdf83a77976616 (diff) | |
This patch helps provide raw photo support with some small changes to the framework. Items can now change their extension and MIME type.
Squashed commit of the following:
commit 4c2b2ebd3f2052898fbfb175650ed4cf49c8006e
Author: Chad Parry <github@chad.parry.org>
Date: Wed Apr 27 20:52:35 2011 -0600
Remove a newline at the end of the file that I accidentally introduced.
commit 6d564f185e5279d6cca9a7385066514ff18a2455
Merge: 7ff485f 4060640
Author: Chad Parry <github@chad.parry.org>
Date: Wed Apr 27 20:35:58 2011 -0600
Merge branch 'master' of https://github.com/gallery/gallery3 into rawphoto
commit 7ff485fa48c392bbbb0370f67cb1bd6fcc00c2a4
Author: Chad Parry <github@chad.parry.org>
Date: Wed Apr 27 20:29:06 2011 -0600
Move the extensions helpers out of the Kohana system directory and into their own Gallery Extensions class.
commit 26585fed03236f0f70a75959e1d3002025f4e15e
Merge: 809567f c8f90e8
Author: Chad Parry <github@chad.parry.org>
Date: Sun Apr 24 08:28:39 2011 -0600
Merge branch 'master' of https://github.com/gallery/gallery3 into rawphoto
commit 809567f12850f59bdeb47a2963f6968b99b5a201
Author: Chad Parry <github@chad.parry.org>
Date: Sun Apr 24 08:10:04 2011 -0600
Expose the data file field.
commit fcb06bf175bb9eeff36d9c294e97ace9374ef0f3
Author: Chad Parry <github@chad.parry.org>
Date: Sun Apr 24 00:45:12 2011 -0600
Don't assign to the item->name field if the name is unchanged, because the save method will crash.
commit c6ef706d70c7e48bea1145eec1b13fb5683e023f
Author: Chad Parry <github@chad.parry.org>
Date: Sat Apr 23 22:55:59 2011 -0600
Preserve old data files long enough for them to be available to event handlers.
commit 0d6a3a3cfc4f38f450db9e18da47a5e2ad826af8
Author: Chad Parry <github@chad.parry.org>
Date: Sat Apr 23 21:19:47 2011 -0600
Create a tempnam substitute that safely creates files with a given extension.
commit e149cf7238a1f8eaddfc68580f2d636dd8255795
Author: Chad Parry <github@chad.parry.org>
Date: Sat Apr 23 16:39:25 2011 -0600
Support data files that change their extension and MIME type.
commit 6702104f571413e4d57db3515b2070c48d3e9b55
Author: Chad Parry <github@chad.parry.org>
Date: Sat Apr 23 16:35:00 2011 -0600
Resolve an infinite recursion that happens when the path caches are updated during saving.
commit 944cb72eea946f4c45a04b7e4c7c33929fa8b9f3
Merge: 567522b 5af74d4
Author: Chad Parry <github@chad.parry.org>
Date: Fri Apr 22 14:10:42 2011 -0600
Merge remote branch 'origin/master' into rawphoto
commit 567522bfa08c370bb5baf8454afc5b04bc9e49b4
Author: Chad Parry <github@chad.parry.org>
Date: Thu Apr 21 20:12:32 2011 -0600
Add an event for when a new graphics toolkit is chosen.
commit 31ba081b793141ca36866a6dd349cd2eac5af68e
Author: Chad Parry <github@chad.parry.org>
Date: Thu Apr 21 02:06:53 2011 -0600
Add an event that will collect all valid filename extensions.
Diffstat (limited to 'modules/gallery/models')
| -rw-r--r-- | modules/gallery/models/item.php | 63 |
1 files changed, 35 insertions, 28 deletions
diff --git a/modules/gallery/models/item.php b/modules/gallery/models/item.php index 2a5e6894..5ccbe75c 100644 --- a/modules/gallery/models/item.php +++ b/modules/gallery/models/item.php @@ -128,6 +128,15 @@ class Item_Model_Core extends ORM_MPTT { } /** + * Get the path to the data file associated with this item. + * This data file field is only set until you call save(). + * After that, you can get the path using get_file_path(). + */ + public function get_data_file() { + return $this->data_file; + } + + /** * Return the server-relative url to this item, eg: * /gallery3/index.php/BobsWedding?page=2 * /gallery3/index.php/BobsWedding/Eating-Cake.jpg @@ -408,6 +417,16 @@ class Item_Model_Core extends ORM_MPTT { // If any significant fields have changed, load up a copy of the original item and // keep it around. $original = ORM::factory("item", $this->id); + + // Preserve the extension of the data file. + if (isset($this->data_file)) { + $extension = pathinfo($this->data_file, PATHINFO_EXTENSION); + $new_name = pathinfo($this->name, PATHINFO_FILENAME) . ".$extension"; + if (!empty($extension) && strcmp($this->name, $new_name)) { + $this->name = $new_name; + } + } + if (array_intersect($this->changed, array("parent_id", "name", "slug"))) { $original->_build_relative_caches(); $this->relative_path_cache = null; @@ -430,7 +449,10 @@ class Item_Model_Core extends ORM_MPTT { if ($original->parent_id != $this->parent_id || $original->name != $this->name) { // Move all of the items associated data files - @rename($original->file_path(), $this->file_path()); + $this->_build_relative_caches(); + if (!isset($this->data_file)) { + @rename($original->file_path(), $this->file_path()); + } if ($this->is_album()) { @rename(dirname($original->resize_path()), dirname($this->resize_path())); @rename(dirname($original->thumb_path()), dirname($this->thumb_path())); @@ -460,8 +482,6 @@ class Item_Model_Core extends ORM_MPTT { } // Replace the data file, if requested. - // @todo: we don't handle the case where you swap in a file of a different mime type - // should we prevent that in validation? or in set_data_file() if ($this->data_file && ($this->is_photo() || $this->is_movie())) { copy($this->data_file, $this->file_path()); @@ -481,6 +501,9 @@ class Item_Model_Core extends ORM_MPTT { // Null out the data file variable here, otherwise this event will trigger another // save() which will think that we're doing another file move. $this->data_file = null; + if ($original->file_path() != $this->file_path()) { + @unlink($original->file_path()); + } module::event("item_updated_data_file", $this); } } @@ -517,6 +540,8 @@ class Item_Model_Core extends ORM_MPTT { $this->name = "$base_name-$rand"; } $this->slug = "$base_slug-$rand"; + $this->relative_path_cache = null; + $this->relative_url_cache = null; } } @@ -768,16 +793,7 @@ class Item_Model_Core extends ORM_MPTT { } if ($this->is_movie() || $this->is_photo()) { - if ($this->loaded()) { - // Existing items can't change their extension - $original = ORM::factory("item", $this->id); - $new_ext = pathinfo($this->name, PATHINFO_EXTENSION); - $old_ext = pathinfo($original->name, PATHINFO_EXTENSION); - if (strcasecmp($new_ext, $old_ext)) { - $v->add_error("name", "illegal_data_file_extension"); - return; - } - } else { + if (!$this->loaded()) { // New items must have an extension $ext = pathinfo($this->name, PATHINFO_EXTENSION); if (!$ext) { @@ -785,9 +801,11 @@ class Item_Model_Core extends ORM_MPTT { return; } - if ($this->is_movie() && !preg_match("/^(flv|mp4|m4v)$/i", $ext)) { - $v->add_error("name", "illegal_data_file_extension"); - } else if ($this->is_photo() && !preg_match("/^(gif|jpg|jpeg|png)$/i", $ext)) { + if (($this->is_movie() || $this->is_photo()) && + !preg_match("/^(" . + implode("|", array_map("preg_quote", + extensions::get_upload_extensions())) . + ")\$/i", $ext)) { $v->add_error("name", "illegal_data_file_extension"); } } @@ -813,17 +831,6 @@ class Item_Model_Core extends ORM_MPTT { } else if (filesize($this->data_file) == 0) { $v->add_error("name", "empty_data_file"); } - - if ($this->loaded()) { - if ($this->is_photo()) { - list ($a, $b, $mime_type) = photo::get_file_metadata($this->data_file); - } else if ($this->is_movie()) { - list ($a, $b, $mime_type) = movie::get_file_metadata($this->data_file); - } - if ($mime_type != $this->mime_type) { - $v->add_error("name", "cant_change_mime_type"); - } - } } /** @@ -879,7 +886,7 @@ class Item_Model_Core extends ORM_MPTT { if ($this->is_movie()) { $legal_values = array("video/flv", "video/x-flv", "video/mp4"); } if ($this->is_photo()) { - $legal_values = array("image/jpeg", "image/gif", "image/png"); + $legal_values = array("image/jpeg", "image/gif", "image/png", "image/tiff"); } break; |
