Skip to content

Instantly share code, notes, and snippets.

@hgsigner
Created October 29, 2013 21:36
Show Gist options
  • Save hgsigner/7223074 to your computer and use it in GitHub Desktop.
Save hgsigner/7223074 to your computer and use it in GitHub Desktop.
Rails code sample
class PublicController < ApplicationController
layout 'public'
before_filter :confirm_client_logged_in
before_filter :public_current_album
before_filter :public_selected_assets
before_filter :check_amount_picked, :only => [:confirm_album, :create_album_confirmation]
before_filter :check_if_is_avaiabled
def index_folders
global_folder = @public_current_album.album_folders.where(:slug => "global").includes(:assets).first
@folders = @public_current_album.album_folders.includes(:assets).order_by([:name, :asc]).to_a.delete_if{ |f| f.slug == "global" }
@folders.insert(0, global_folder)
@folders.to_a.delete_if {|f| !f.assets.any?}
end
def list
@folder = @public_current_album.album_folders.where(:slug => params[:folder_slug]).includes(:assets).first
@folder_assets = @folder.assets.where(:img_processed => true).includes(:album_folder).order_by([:created_at, :asc]).page(params[:page]).per(100)
end
def selected
@assets = @public_current_album.assets.where(:selected => true).order_by([:created_at, :asc])
end
def show
@folder = @public_current_album.album_folders.where(:slug => params[:folder_slug]).includes(:assets).first
@asset = @folder.assets.where(:_id => params[:id]).includes(:album_folder).first
@comments = @asset.comments.order_by([:created_at, :asc])
@prev_asset = @folder.assets.where(:created_at.lt => @asset.created_at).order_by([:created_at, :desc]).first
@next_asset = @folder.assets.where(:created_at.gt => @asset.created_at).order_by([:created_at, :asc]).first
gon.download_permission = @public_current_album.download_permission
end
def show_asset_selected
@asset = @public_current_album.assets.find(params[:id])
@comments = @asset.comments.order_by([:created_at, :asc])
@prev_asset = @public_current_album.assets.where(:selected => true, :created_at.lt => @asset.created_at).order_by([:created_at, :desc]).first
@next_asset = @public_current_album.assets.where(:selected => true, :created_at.gt => @asset.created_at).order_by([:created_at, :asc]).first
gon.download_permission = @public_current_album.download_permission
render :template => "public/show"
end
def messages
@messages = @public_current_album.messages.order_by([:created_at, :asc])
end
def tutorial
end
def create_comment
asset = @public_current_album.assets.find(params[:id])
comment = asset.comments.create(params[:comment])
@comments = asset.comments.order_by([:created_at, :asc])
#MailingWorker.perform_async({type: "create_asset_comment_client", album_id: @public_current_album.id, asset_id: params[:id], comment: params[:comment][:content]})
CLIENT.tasks.create(
'AionphotosMailing',
type: "create_asset_comment_client",
album_id: @public_current_album.id,
asset_id: params[:id],
comment: params[:comment][:content],
args: {
img_url: view_context.get_asset_url(@public_current_album.id, asset.image, "thumb_").to_s,
client: {
closed_link: publiclogin_url(
:subdomain => "selecao",
:albun_id => @public_current_album.id,
:lref => publicshow_url(
:subdomain => "selecao",
:folder_slug => asset.album_folder.slug,
:id => asset.id
)
),
diagramming_link: ''
},
user: {
root_link: root_url(:subdomain => "app"),
asset_path: albun_asset_path(@public_current_album, asset)
}
}
)
respond_to do |format|
format.html {redirect_to publicphotos_path, only_path: true}
format.js { render :layout => false }
end
end
def create_message
message = @public_current_album.messages.create(params[:message])
#MailingWorker.perform_async({type: "create_album_message_client", album_id: @public_current_album.id, message: params[:message][:content]})
CLIENT.tasks.create(
'AionphotosMailing',
type: "create_album_message_client",
album_id: @public_current_album.id,
message: params[:message][:content]
)
@messages = @public_current_album.messages.order_by([:created_at, :asc])
respond_to do |format|
format.html {redirect_to publicphotos_path, only_path: true}
format.js { render :layout => false }
end
end
def mark_photo
@asset = @public_current_album.assets.find(params[:id])
if @asset.selected
@asset.selected = false
#@asset.process_image_upload = true
@asset.save
if session[:amount_picked].to_i > 0
session[:amount_picked] = session[:amount_picked].to_i - 1
end
else
@asset.selected = true
#@asset.process_image_upload = true
@asset.save
session[:amount_picked] = session[:amount_picked].to_i + 1
end
@selected_assets_count = @public_current_album.assets.where(:selected => true).size
respond_to do |format|
format.html {redirect_to publicphotos_path, only_path: true}
format.js {render :layout => false}
end
end
def remote_mark_photo
asset = @public_current_album.assets.find(params[:id])
if asset.selected
asset.selected = false
#asset.process_image_upload = true
asset.save
if session[:amount_picked].to_i > 0
session[:amount_picked] = session[:amount_picked].to_i - 1
end
else
asset.selected = true
#asset.process_image_upload = true
asset.save
session[:amount_picked] = session[:amount_picked].to_i + 1
end
render :nothing => true
end
def confirm_album
@extra_photos = @public_selected_assets - @public_current_album.amount_to_pick
end
def create_album_confirmation
@public_current_album.update_attributes(:status => "confirmed", :locked => true, :confirmed_in => Time.now)
analytic = Analytic.find(session[:analytic_id])
data = analytic.analyticdatas.create(:session_logged_in => session[:time_logged_in], :session_logged_out => Time.now, :session_picked => session[:amount_picked])
#MailingWorker.perform_async({type: "create_album_confirmation", album_id: @public_current_album.id})
CLIENT.tasks.create(
'AionphotosMailing',
type: "create_album_confirmation",
album_id: @public_current_album.id
)
session[:album_id] = nil
session[:time_logged_in] = nil
session[:analytic_id] = nil
session[:amount_picked] = nil
redirect_to publiclogin_url(:albun_id => params[:id]), :notice => "A confirma&ccedil;&atilde;o das suas escolhas foi enviada com sucesso para #{@public_current_album.user.name}!".html_safe
end
private
def check_if_is_avaiabled
if !@public_current_album.user.good_to_go || @public_current_album.locked || @public_current_album.album_expired?
session[:album_id] = nil
session[:time_logged_in] = nil
session[:analytic_id] = nil
session[:amount_picked] = nil
redirect_to publiclogin_url(:albun_id => @public_current_album.id), :notice => "Ops! Este &aacute;lbum est&aacute; bloqueado. Entre em <br/> contato com <span style='color:#aa2121;'>#{@public_current_album.user.name}</span> para eventual libera&ccedil;&atilde;o.".html_safe
return false
else
return true
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment