158 lines
4.9 KiB
Ruby
158 lines
4.9 KiB
Ruby
class PhotosController < ApplicationController
|
|
before_filter :check_public_access
|
|
skip_before_filter :authenticate_user!, :only => [:index, :show]
|
|
|
|
def index
|
|
if params[:tag_id] && params[:album_id]
|
|
@tag = Tag.find_by_title!( params[:tag_id] )
|
|
@photos = @tag.photos.where(:conditions => ['photos.album_id = :album', {:album => Album.find(params[:album_id] ) } ]).order("photos.id ASC")
|
|
elsif params[:tag_id]
|
|
@tag = Tag.find_by_title!( params[:tag_id] )
|
|
@photos = @tag.photos.order("photos.id ASC")
|
|
elsif params[:album_id]
|
|
@album = Album.find( params[:album_id])
|
|
@photos = @album.photos.order("photos.id ASC")
|
|
elsif params[:q]
|
|
#search = params[:q]
|
|
#search = search.split("AND").map{|q|q.strip}
|
|
#@photos = Photo.find(:all, :select => 'DISTINCT photos.id, photos.album_id, photos.title, photos.path', :limit => 20, :conditions => { :tags => {:title => search}}, :joins => 'LEFT OUTER JOIN photo_tags ON photos.id = photo_tags.photo_id LEFT OUTER JOIN tags ON photo_tags.tag_id = tags.id', :include => [:album], :order => "photos.title ASC" )
|
|
params[:q].split(" AND ").each {|q|
|
|
qphotos = Photo.find(:all, :limit => 20, :conditions => [ "photos.description LIKE :q OR photos.title LIKE :q OR photos.id IN ( SELECT photo_id FROM photo_tags LEFT OUTER JOIN tags ON photo_tags.tag_id = tags.id WHERE tags.title = :t) ", { :q => '%' + q + '%', :t => q } ], :include => :album, :order => "photos.id ASC" )
|
|
if @photos
|
|
@photos = @photos & qphotos
|
|
else
|
|
@photos = qphotos
|
|
end
|
|
}
|
|
else
|
|
@photos = Photo.popular.page(@page).per(@per_page)
|
|
end
|
|
respond_to do |format|
|
|
format.html
|
|
format.json { render :json => @photos }
|
|
format.xml { render :xml => @photos }
|
|
end
|
|
end
|
|
|
|
def untouched
|
|
if params[:album_id]
|
|
@album = Album.find( params[:album_id])
|
|
@photos = @album.photos.untouched.page(@page).per(@per_page)
|
|
else
|
|
@photos = Photo.untouched().page(@page).per(@per_page)
|
|
end
|
|
respond_to do |format|
|
|
format.html
|
|
format.json { render :json => @photos }
|
|
format.xml { render :xml => @photos }
|
|
end
|
|
end
|
|
|
|
def show
|
|
@photo = Photo.find( params[:id] )
|
|
previous_rs = Photo.previous( @photo.id, @photo.album )
|
|
@previous = previous_rs.first unless previous_rs.empty?
|
|
next_rs = Photo.next( @photo.id, @photo.album )
|
|
@next = next_rs.first unless next_rs.empty?
|
|
respond_to do |format|
|
|
format.html
|
|
format.json { render :json => @photo }
|
|
format.xml { render :xml => @photo }
|
|
end
|
|
end
|
|
|
|
def scan
|
|
require "scan"
|
|
ScanFiles.Scan(false)
|
|
redirect_to(root_path)
|
|
end
|
|
|
|
def new
|
|
@photo = Photo.new
|
|
end
|
|
|
|
def upload
|
|
@album = Album.find( params[:album_id])
|
|
end
|
|
|
|
def create
|
|
@photo = Photo.new(params[:photo])
|
|
@photo.attachment = params[:file]
|
|
respond_to do |format|
|
|
if @photo.save
|
|
format.html { render :text => "FILEID:" + @photo.attachment.album.url }
|
|
format.xml { render :nothing => true }
|
|
else
|
|
format.html { render :text => "ERRORS:" + @photo.errors.full_messages.join(" "), :status => 500 }
|
|
format.xml { render :xml => @photo.errors, :status => 500 }
|
|
end
|
|
end
|
|
end
|
|
|
|
def edit
|
|
@photo = Photo.find( params[:id])
|
|
@tags = Tag.all.map { |tag| tag.title }.join('\',\'')
|
|
end
|
|
|
|
def edit_multiple
|
|
if params[:album_id]
|
|
@album = Album.find( params[:album_id] )
|
|
@photos = @album.photos
|
|
else
|
|
@photos = Photo.find( params[:photo_ids] )
|
|
end
|
|
end
|
|
|
|
def update
|
|
@photo = Photo.find( params[:id])
|
|
if @photo.update_attributes(params[:photo])
|
|
flash[:notice] = "Photo updated!"
|
|
if params[:collection_id]
|
|
redirect_to collection_album_photo_path( params[:collection_id], params[:album_id], @photo )
|
|
elsif params[:album_id]
|
|
redirect_to album_photo_path( params[:album_id], @photo )
|
|
else
|
|
redirect_to @photo
|
|
end
|
|
else
|
|
render :action => :edit
|
|
end
|
|
end
|
|
|
|
def update_multiple
|
|
@photos = params[:photos][:photo]
|
|
@photos.each do |photo_item|
|
|
photo = Photo.find( photo_item[0] )
|
|
if photo_item[1][:_delete] == "1"
|
|
photo.destroy
|
|
else
|
|
photo.title = photo_item[1][:title]
|
|
photo.tag_list = photo_item[1][:tags]
|
|
photo.save
|
|
end
|
|
end
|
|
flash[:notice] = "Updated photos!"
|
|
redirect_to photos_path
|
|
end
|
|
|
|
def destroy
|
|
@photo = Photo.find( params[:id])
|
|
@album = @photo.album
|
|
if @photo.destroy
|
|
if params[:collection_id]
|
|
redirect_to collection_album_path( params[:collection_id], @album )
|
|
else
|
|
redirect_to @album
|
|
end
|
|
else
|
|
redirect_to @photo
|
|
end
|
|
end
|
|
|
|
def rate
|
|
@photo = Photo.find(params[:id])
|
|
@photo.rate(params[:stars], current_user, params[:dimension])
|
|
render :json => {:id => @photo.wrapper_dom_id(params), :width => 125}
|
|
end
|
|
end
|