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 else @photos = Photo.untouched() 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