diff options
| author | Chad Parry <github@chad.parry.org> | 2011-04-23 16:39:25 -0600 | 
|---|---|---|
| committer | Chad Parry <github@chad.parry.org> | 2011-04-23 16:39:25 -0600 | 
| commit | e149cf7238a1f8eaddfc68580f2d636dd8255795 (patch) | |
| tree | bf625c777c9bbd9f3a7a0320bfdbff5683e4c59b /modules/gallery/models | |
| parent | 6702104f571413e4d57db3515b2070c48d3e9b55 (diff) | |
Support data files that change their extension and MIME type.
Diffstat (limited to 'modules/gallery/models')
| -rw-r--r-- | modules/gallery/models/item.php | 35 | 
1 files changed, 12 insertions, 23 deletions
| diff --git a/modules/gallery/models/item.php b/modules/gallery/models/item.php index a8bca15c..299d3584 100644 --- a/modules/gallery/models/item.php +++ b/modules/gallery/models/item.php @@ -410,6 +410,15 @@ 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); +          if (!empty($extension)) { +            $this->name = pathinfo($this->name, PATHINFO_FILENAME) . ".$extension"; +          } +        } +          if (array_intersect($this->changed, array("parent_id", "name", "slug"))) {            $original->_build_relative_caches();            $this->relative_path_cache = null; @@ -463,8 +472,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()); @@ -520,6 +527,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;      }    } @@ -771,16 +780,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) { @@ -817,17 +817,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"); -      } -    }    }    /** | 
