80 lines
2.7 KiB
Ruby
80 lines
2.7 KiB
Ruby
|
class NeopetsPagesController < ApplicationController
|
||
|
include ActionView::Helpers::TextHelper
|
||
|
|
||
|
before_filter :authenticate_user!, :build_neopets_page
|
||
|
|
||
|
rescue_from ClosetPage::ParseError, :with => :on_parse_error
|
||
|
|
||
|
def create
|
||
|
if @page_params && @page_params[:source]
|
||
|
@neopets_page.index = @page_params[:index]
|
||
|
@neopets_page.source = @page_params[:source]
|
||
|
|
||
|
saved_counts = @neopets_page.save_hangers!
|
||
|
|
||
|
any_created = saved_counts[:created] > 0
|
||
|
any_updated = saved_counts[:updated] > 0
|
||
|
if any_created || any_updated
|
||
|
message = "Page #{@neopets_page.index} saved! We "
|
||
|
message << "added " + pluralize(saved_counts[:created], 'item') + " to the items you own" if any_created
|
||
|
message << " and " if any_created && any_updated
|
||
|
message << "updated the count on " + pluralize(saved_counts[:updated], 'item') if any_updated
|
||
|
message << ". "
|
||
|
elsif @neopets_page.hangers.size > 1
|
||
|
message = "Success! We checked that page, and we already had all this data recorded. "
|
||
|
else
|
||
|
message = "Success! We checked that page, and there were no wearables to add. "
|
||
|
end
|
||
|
|
||
|
unless @neopets_page.unknown_item_names.empty?
|
||
|
message << "We also found " +
|
||
|
pluralize(@neopets_page.unknown_item_names.size, 'item') +
|
||
|
" we didn't recognize: " +
|
||
|
@neopets_page.unknown_item_names.to_sentence +
|
||
|
". Please put each item on your pet and type its name in on the " +
|
||
|
"home page so we can have a record of it. Thanks! "
|
||
|
end
|
||
|
|
||
|
if @neopets_page.last?
|
||
|
message << "That was the last page of your Neopets #{@neopets_page.name}."
|
||
|
destination = user_closet_hangers_path(current_user)
|
||
|
else
|
||
|
message << "Now the frame should contain page #{@neopets_page.index + 1}. Paste that source code over, too."
|
||
|
destination = {:action => :new, :index => (@neopets_page.index + 1)}
|
||
|
end
|
||
|
|
||
|
flash[:success] = message
|
||
|
redirect_to destination
|
||
|
else
|
||
|
redirect_to :action => :new
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def new
|
||
|
@neopets_page.index ||= 1
|
||
|
end
|
||
|
|
||
|
protected
|
||
|
|
||
|
TYPES = {
|
||
|
'closet' => ClosetPage,
|
||
|
'sdb' => SafetyDepositPage
|
||
|
}
|
||
|
def build_neopets_page
|
||
|
type_class = TYPES[params[:type]]
|
||
|
|
||
|
@neopets_page = type_class.new(current_user)
|
||
|
@neopets_page.index = params[:index]
|
||
|
@page_params = params[type_class.model_name.singular]
|
||
|
end
|
||
|
|
||
|
def on_parse_error(e)
|
||
|
Rails.logger.info "Neopets page parse error: #{e.message}"
|
||
|
flash[:alert] = "We had trouble reading your source code. Is it a valid " +
|
||
|
"HTML document? Make sure you pasted the computery-looking result of " +
|
||
|
"clicking View Frame Source, and not the pretty page itself. "
|
||
|
render :action => :new
|
||
|
end
|
||
|
end
|
||
|
|