photos-edit.tcl
Bulk edit photos in a given album
- Location:
- /packages/photo-album/www/photos-edit.tcl
- Author:
- Jeff Davis <davis@xorch.net>
- Created:
- 7/1/2002
- CVS ID:
$Id: photos-edit.tcl,v 1.9 2015/06/28 12:56:09 gustafn Exp $
Related Files
- packages/photo-album/www/photos-edit.tcl
- packages/photo-album/www/photos-edit.adp
- packages/photo-album/www/photos-edit-postgresql.xql
- packages/photo-album/www/photos-edit-oracle.xql
[ hide source ] | [ make this the default ]
File Contents
# packages/photo-album/www/photos-edit.tcl ad_page_contract { Bulk edit photos in a given album @author Jeff Davis (davis@xorch.net) @creation-date 7/1/2002 @cvs-id $Id: photos-edit.tcl,v 1.9 2015/06/28 12:56:09 gustafn Exp $ } { album_id:naturalnum,notnull {page:integer,notnull "1"} } -validate { valid_album -requires {album_id:integer} { if [string equal [pa_is_album_p $album_id] "f"] { ad_complain "[_ photo-album._The_1]" } } } -properties { album_id:onevalue title:onevalue description:onevalue story:onevalue context_list:onevalue child_photo:multirow page_nav:onevalue admin_p:onevalue photo_p:onevalue write_p:onevalue move_p:onevalue delete_p:onevalue } # These lines are to uncache the image in Netscape, Mozilla. # IE6 & Safari (mac) have a bug with the images cache ns_set put [ns_conn outputheaders] "Expires" "-" ns_set put [ns_conn outputheaders] "Last-Modified" "-" ns_set put [ns_conn outputheaders] "Cache-Control" "no-cache" set user_id [ad_conn user_id] # check for read permission on album permission::require_permission -object_id $album_id -privilege read set context_list [pa_context_bar_list -final "[_ photo-album.Edit_page] $page" $album_id] db_1row get_album_info { select cr.title, cr.description, pa.story, ci.parent_id as parent_folder_id, decode(acs_permission.permission_p(ci.item_id, :user_id, 'admin'),'t',1,0) as admin_p, decode(acs_permission.permission_p(ci.item_id, :user_id, 'pa_create_photo'),'t',1,0) as photo_p, decode(acs_permission.permission_p(ci.item_id, :user_id, 'write'),'t',1,0) as write_p, decode(acs_permission.permission_p(ci.parent_id, :user_id, 'write'),'t',1,0) as folder_write_p, decode(acs_permission.permission_p(ci.item_id, :user_id, 'delete'),'t',1,0) as album_delete_p from cr_items ci, cr_revisions cr, pa_albums pa where ci.live_revision = cr.revision_id and ci.live_revision = pa_album_id and ci.item_id = :album_id } # to move an album need write on album and write on parent folder set move_p [expr {$write_p && $folder_write_p}] # to delete an album, album must be empty, need delete on album, and write on parent folder set has_children_p [expr {[pa_count_photos_in_album $album_id] > 0}] set delete_p [expr {!($has_children_p) && $album_delete_p && $folder_write_p}] set photos_on_page [pa_all_photos_on_page $album_id $page] if {$has_children_p && [llength $photos_on_page] > 0} { # query gets all child photos in album # I query the data without an orderby in the sql to cut the querry time # and then sort the returned data manually while constructing the multirow datasource. # This goes against the theory of let oracle do the hard work, but load testing and # query tuning showed that the order by doubled the query time while sorting a few rows in tcl was fast # wtem@olywa.net, 2001-09-24 set photo_sql " select coalesce(ci.live_revision,0) as hide_p, ci.item_id as photo_id, pp.caption, pp.story as photo_story, to_char(pp.date_taken, 'MM/DD/YYYY HH:MI') as datetaken, ccra.order_n as sequence, pp.camera_model, pp.focal_length, pp.aperture, pp.exposure_time, pp.flash, it.image_id as thumb_path, it.height as thumb_height, it.width as thumb_width, iv.image_id as viewer_path, iv.height as viewer_height, iv.width as viewer_width, cr.title as photo_title, cr.description as photo_description from cr_items ci, cr_items cit, cr_child_rels ccrt, images it, cr_items civ, cr_child_rels ccrv, images iv, pa_photos pp, cr_revisions cr, cr_child_rels ccra where ccrt.relation_tag = 'thumb' and cr.revision_id = ci.latest_revision and cr.item_id = ci.item_id and ci.item_id = ccrt.parent_id and ccrt.child_id = cit.item_id and cit.latest_revision = it.image_id and ccrv.relation_tag = 'viewer' and ci.item_id = ccrv.parent_id and ccrv.child_id = civ.item_id and civ.latest_revision = iv.image_id and ccra.parent_id = :album_id and ccra.child_id = ci.item_id and pp.pa_photo_id = ci.latest_revision and ci.item_id in ([join $photos_on_page ","])" db_foreach get_child_photos $photo_sql { set val(hide_p) $hide_p set val(photo_id) $photo_id set val(sequence) $sequence set val(caption) $caption set val(photo_story) $photo_story set val(photo_description) $photo_description set val(photo_title) $photo_title set val(datetaken) $datetaken set val(camera_model) $camera_model set val(focal_length) $focal_length set val(aperture) $aperture set val(flash) $flash set val(exposure_time) $exposure_time set val(thumb_path) $thumb_path set val(thumb_height) $thumb_height set val(thumb_width) $thumb_width set val(viewer_path) $viewer_path set val(viewer_height) $viewer_height set val(viewer_width) $viewer_width set val(window_height) [expr {$viewer_height + 28}] set val(window_width) [expr {$viewer_width + 24}] set child($photo_id) [array get val] } # if the structure of the multirow datasource ever changes, this needs to be rewritten set counter 0 foreach id $photos_on_page { if {[info exists child($id)]} { incr counter set child_photo:${counter}(rownum) $counter foreach {key value} $child($id) { set child_photo:${counter}($key) $value } } } set child_photo:rowcount $counter set total_pages [pa_count_pages_in_album $album_id] for {set i 1} {$i <= $total_pages} {incr i} { lappend pages $i } set page_nav [pa_pagination_bar $page $pages "[export_vars -base photos-edit {album_id}]&page="] } else { # don't bother querying for children if we know they don't exist set child_photo:rowcount 0 set page_nav "" }