diff options
Diffstat (limited to 'modules/gallery/helpers')
| -rw-r--r-- | modules/gallery/helpers/gallery_event.php | 5 | ||||
| -rw-r--r-- | modules/gallery/helpers/graphics.php | 78 | ||||
| -rw-r--r-- | modules/gallery/helpers/item.php | 15 | 
3 files changed, 46 insertions, 52 deletions
| diff --git a/modules/gallery/helpers/gallery_event.php b/modules/gallery/helpers/gallery_event.php index bd9acc1c..ee3c51cc 100644 --- a/modules/gallery/helpers/gallery_event.php +++ b/modules/gallery/helpers/gallery_event.php @@ -141,10 +141,9 @@ class gallery_event_Core {      foreach (ORM::factory("item")               ->where("album_cover_item_id", "=", $item->id)               ->find_all() as $target) { -      copy($item->thumb_path(), $target->thumb_path()); -      $target->thumb_width = $item->thumb_width; -      $target->thumb_height = $item->thumb_height; +      $target->thumb_dirty = 1;        $target->save(); +      graphics::generate($target);      }    } diff --git a/modules/gallery/helpers/graphics.php b/modules/gallery/helpers/graphics.php index 3f5e2d56..19ae1036 100644 --- a/modules/gallery/helpers/graphics.php +++ b/modules/gallery/helpers/graphics.php @@ -115,36 +115,12 @@ class graphics_Core {     * @param Item_Model $item     */    static function generate($item) { -    if ($item->is_album()) { -      if (!$cover = $item->album_cover()) { -        // This album has no cover; there's nothing to generate.  Because of an old bug, it's -        // possible that there's an album cover item id that points to an invalid item.  In that -        // case, just null out the album cover item id.  It's not optimal to do that at this low -        // level, but it's not trivial to find these cases quickly in an upgrade script and if we -        // don't do this, the album may be permanently marked as "needs rebuilding" -        // -        // ref: http://sourceforge.net/apps/trac/gallery/ticket/1172 -        //      http://galleryproject.org/node/96926 -        if ($item->album_cover_item_id) { -          $item->album_cover_item_id = null; -          $item->save(); -        } -        return; -      } -      $input_file = $cover->file_path(); -      $input_item = $cover; -    } else { -      $input_file = $item->file_path(); -      $input_item = $item; -    } -      if ($item->thumb_dirty) {        $ops["thumb"] = $item->thumb_path();      } -    if ($item->resize_dirty && !$item->is_album() && !$item->is_movie()) { +    if ($item->resize_dirty && $item->is_photo()) {        $ops["resize"] = $item->resize_path();      } -      if (empty($ops)) {        $item->thumb_dirty = 0;        $item->resize_dirty = 0; @@ -154,9 +130,11 @@ class graphics_Core {      try {        foreach ($ops as $target => $output_file) { +        $working_file = $item->file_path();          // Delete anything that might already be there          @unlink($output_file); -        if ($input_item->is_movie()) { +        switch ($item->type) { +        case "movie":            // Run movie_extract_frame events, which can either:            //  - generate an output file, bypassing the ffmpeg-based movie::extract_frame            //  - add to the options sent to movie::extract_frame (e.g. change frame extract time, @@ -164,27 +142,55 @@ class graphics_Core {            // Note that the args are similar to those of the events in gallery_graphics            $movie_options_wrapper = new stdClass();            $movie_options_wrapper->movie_options = array(); -          module::event("movie_extract_frame", $input_file, $output_file, -                        $movie_options_wrapper, $input_item); +          module::event("movie_extract_frame", $working_file, $output_file, +                        $movie_options_wrapper, $item);            // If no output_file generated by events, run movie::extract_frame with movie_options            clearstatcache();            if (@filesize($output_file) == 0) {              try { -              movie::extract_frame($input_file, $output_file, $movie_options_wrapper->movie_options); +              movie::extract_frame($working_file, $output_file, $movie_options_wrapper->movie_options);              } catch (Exception $e) {                // Didn't work, likely because of MISSING_FFMPEG - use placeholder                graphics::_replace_image_with_placeholder($item, $target);              }            }            $working_file = $output_file; -        } else { -          $working_file = $input_file; -        } -        foreach (self::_get_rules($target) as $rule) { -          $args = array($working_file, $output_file, unserialize($rule->args), $item); -          call_user_func_array($rule->operation, $args); -          $working_file = $output_file; +        case "photo": +          // Run the graphics rules (for both movies and photos) +          foreach (self::_get_rules($target) as $rule) { +            $args = array($working_file, $output_file, unserialize($rule->args), $item); +            call_user_func_array($rule->operation, $args); +            $working_file = $output_file; +          } +          break; + +        case "album": +          if (!$cover = $item->album_cover()) { +            // This album has no cover; there's nothing to generate.  Because of an old bug, it's +            // possible that there's an album cover item id that points to an invalid item.  In that +            // case, just null out the album cover item id.  It's not optimal to do that at this low +            // level, but it's not trivial to find these cases quickly in an upgrade script and if we +            // don't do this, the album may be permanently marked as "needs rebuilding" +            // +            // ref: http://sourceforge.net/apps/trac/gallery/ticket/1172 +            //      http://galleryproject.org/node/96926 +            if ($item->album_cover_item_id) { +              $item->album_cover_item_id = null; +              $item->save(); +            } +            return; +          } +          if ($cover->thumb_dirty) { +            graphics::generate($cover); +          } +          if (!$cover->thumb_dirty) { +            // Make the album cover from the cover item's thumb.  Run gallery_graphics::resize with +            // null options and it will figure out if this is a direct copy or conversion to jpg. +            $working_file = $cover->thumb_path(); +            gallery_graphics::resize($working_file, $output_file, null, $item); +          } +          break;          }        } diff --git a/modules/gallery/helpers/item.php b/modules/gallery/helpers/item.php index 386eeb08..093feb2d 100644 --- a/modules/gallery/helpers/item.php +++ b/modules/gallery/helpers/item.php @@ -78,15 +78,9 @@ class item_Core {      model_cache::clear();      $parent->album_cover_item_id = $item->is_album() ? $item->album_cover_item_id : $item->id; -    if ($item->thumb_dirty) { -      $parent->thumb_dirty = 1; -      graphics::generate($parent); -    } else { -      copy($item->thumb_path(), $parent->thumb_path()); -      $parent->thumb_width = $item->thumb_width; -      $parent->thumb_height = $item->thumb_height; -    }      $parent->save(); +    graphics::generate($parent); +      $grand_parent = $parent->parent();      if ($grand_parent && access::can("edit", $grand_parent) &&          $grand_parent->album_cover_item_id == null)  { @@ -97,15 +91,10 @@ class item_Core {    static function remove_album_cover($album) {      access::required("view", $album);      access::required("edit", $album); -    @unlink($album->thumb_path());      model_cache::clear();      $album->album_cover_item_id = null; -    $album->thumb_width = 0; -    $album->thumb_height = 0; -    $album->thumb_dirty = 1;      $album->save(); -    graphics::generate($album);    }    /** | 
