Re: K3 update effects on DB
Shad Laws <shad-xpYdmXCiSuZWk0Htik3J/[email protected]> Tue, 2 Apr 2013 18:29:11 +0200
| Newsgroups | gmane.comp.web.gallery.devel |
|---|---|
| Message-ID | <CA+z51A6Mcs3Z-ocPeLH43aEksmr-a1BLS=wptO1A9HqsL1PKsQ@mail.gmail.com> |
Hey Bharat, Cool! Although I'm not sure I follow your question... doesn't Graphics::add_rule() already do this? Take care, Shad On 2 April 2013 01:08, Bharat Mediratta <[email protected]> wrote: > > Took me a few re-reads, but I like it. Make it so! My only question is: > what is the name of the graphics operation class in modules that add new > rules? > > > On Fri, Mar 29, 2013 at 4:36 AM, Shad Laws <shad-xpYdmXCiSuZWk0Htik3J/[email protected]> wrote: >> >> cc: devel >> >> Hey Bharat, >> >> Yep, it got slept on, but I didn't get a chance to reply yesterday since I >> ended up spending too much time finishing converting all of the modules to >> K3 conventions (woohoo!!!) :-) >> >> Anyway, a couple thoughts: >> - I'm personally a fan of how the six graphics-related events currently >> work (graphics_rotate, graphics_rotate_completed, graphics_resize, >> graphics_resize_completed, graphics_composite, graphics_composite_completed) >> - I don't think we need to break backward compatibility with the events to >> accomplish what we want >> - As awesome as a module fight would be to see (tonight at 7:30, Foo vs. >> Bar!), I'm not sure it'd be a big deal. The important thing is that the >> default operation (in the gallery module) goes last. If a module thinks >> it's super important and wants to avoid all overriding abilities, it can >> just name its operation uniquely and write the graphics rule to match. In >> the rather odd case that there is still a conflict, the module order module >> would work well. >> >> So, here's my current thought: >> - remove "gallery_graphics::" and/or "GalleryGraphics::" from the graphics >> rules. >> - write a new function in Graphics that runs a generic graphics rule and >> looks something like this: >> >> static function run_graphics_rule($operation, $input_file, $output_file, >> $options=null, $item=null) { >> Graphics::init_toolkit(); >> >> $temp_file = System::temp_filename("$operation_", >> pathinfo($output_file, PATHINFO_EXTENSION)); >> Module::event("graphics_$operation", $input_file, $temp_file, >> $options, $item); >> >> if (@!filesize($temp_file) && method_exists("GraphicsOperations", >> $operation)) { >> // No events made an image, but we have a standard process to run. >> if (@filesize($input_file) == 0) { >> throw new Exception("@todo EMPTY_INPUT_FILE"); >> } >> call_user_func("GraphicsOperations::$operation", $input_file, >> $temp_file, $options, $item); >> } >> >> if (@filesize($temp_file)) { >> // We generated an output - move it to output_file and run the >> completed event. >> @rename($temp_file, $output_file); >> Module::event("graphics_{$operation}_completed", $input_file, >> $output_file, $options, $item); >> } >> } >> >> - move the guts of the three GalleryGraphics functions to >> GraphicsOperations. Note that these three functions all currently follow >> the same pattern as above with regard to init toolkit, calling events, >> checking input/output sizes, etc., so they can be largely trimmed. >> - add GraphicsOperations::crop(). This isn't there currently, but >> probably should be and it's easy to do. >> >> Here's some examples of how existing modules/themes would work with it: >> - themes - change the "resize" graphics rule to match what's desired. >> - watermark - add a "composite" graphics rule >> - square_thumbs - add a "crop" graphics rule >> - jpegtran - add a "graphics_rotate" event >> - image_optimizer - add an "optimize" graphics rule, then add a >> "graphics_optimize" event >> - quotas - add a "graphics_rotate" event (doesn't actually do anything >> with the image) >> - keeporiginal - add a "graphics_rotate" event (doesn't actually do >> anything with the image) >> >> Advantages: >> - largely/entirely backwards compatible >> - gives us the flexibility we (or at least I) want >> - makes the DB entries for graphics rules cleaner >> - eliminates my confusion between Graphics and GalleryGraphics >> >> As a separate item, I like your idea of bringing the graphics rules into >> the UI, but not sure how to do it well. Perhaps a decent first approach is >> to make it part of the advanced settings screen, then see if users demand >> something prettier? >> >> Your thoughts? >> >> Take care, >> Shad >> >> >> On 29 March 2013 05:26, Bharat Mediratta <[email protected]> wrote: >>> >>> >>> On Wed, Mar 27, 2013 at 4:14 PM, Shad Laws <shad-xpYdmXCiSuZWk0Htik3J/[email protected]> wrote: >>>> >>>> Hey Bharat, >>>> >>>> Hmm... an interesting idea! That said, I'm not yet convinced we need >>>> the extra flexibility. While I think the idea of letting modules both add >>>> their own operations and replace the existing ones is good, I think we >>>> already get it with graphics rules and events and wonder if making it a hook >>>> might be overkill. In particular, I think that: >>>> - the 6 events that GalleryGraphics calls already allow a module to >>>> replace or supplement rotate/resize/composite >>>> - implementing a structure with the three fixed names doesn't allow us >>>> to do other things (of course, this can easily be made flexible still >>>> sticking with your basic concept). >>>> >>>> I can think of four examples to use as cases to illustrate what I >>>> mean... >>>> - gallery module: the basic implementation. It adds one graphics rule >>>> to resize for thumb/resize generation. >>>> - watermark module: add a new graphics rule to run composite after the >>>> resize during thumb/resize generation. >>>> - jpegtran module: can use a graphics_rotate event to use jpegtran to >>>> losslessly rotate jpg images. >>>> - image_optimizer module: adds its own "optimize" operation as the last >>>> step in thumb/resize generation. (*) >>> >>> >>> I've thought about this some more and it does make sense to have directly >>> addressable graphics operations. For example gallery_graphics::resize does >>> something very specific. If we made a new foo_graphics::resize which was >>> similar but different, the expectation would be that when you enable the foo >>> module it updates the graphics rules to use its version of resize. If you >>> have a bar module with its own resize, which one do you use? Do they fight? >>> Module order would be the arbiter and that's a little weird. >>> >>> I think it makes more sense to have modules provide graphics rules, and >>> then let the user decide which rule they want to use. We'd need a UI, but I >>> think the end result would be more valuable for the user. >>> >>> But that approach is very similar to tasks - each module can provide a >>> set of tasks in its own hook. We call FooTask::available_tasks() to get the >>> list, then interact with each task directly. This still falls in the realm >>> of the Hook approach so I'm ok with it. Note that in this approach, one >>> graphics rule cannot replace another one. >>> >>>> >>>> >>>> To address your three specific points: >>>> 1) Yes, we definitely do need to make a unified hook interface! It's >>>> on my very short list once I get done translating all the modules to K3. >>>> 2) I *do* like that this gets the name "GalleryGraphics" out of the DB. >>>> 3) Yes - prrrrrofit! (http://www.youtube.com/watch?v=tO5sxLapAts) >>>> >>>> Hmm... maybe I need to sleep on this and rethink in the morning. >>> >>> >>> How'd the overnight though process go? :-) >>> >>> -Bharat >> >> > ------------------------------------------------------------------------------ Minimize network downtime and maximize team effectiveness. Reduce network management and security costs.Learn how to hire the most talented Cisco Certified professionals. Visit the Employer Resources Portal http://www.cisco.com/web/learning/employer_resources/index.html __[ g a l l e r y - d e v e l ]_________________________ [ list info/archive --> http://gallery.sf.net/lists.php ] [ gallery info/FAQ/download --> http://gallery.sf.net ]