1
0
Fork 0
forked from OpenNeo/impress
impress/app/controllers/neopets_pages_controller.rb
Matchu a7574f0864 Don't add duplicate hangers now that closet import can specify a list
Bug report that this resolves:

...However, when I was using the "Import from SDB" tool just a few
minutes ago, it ended up adding EVERY neocash item into the "Not
In A List" section, regardless if I already that item imported
into my "Your Items". So, basically.. I had duplicates of
everything and it would not allow me to move them around into
separate catergories or anything. I know that every other time i've
used the import tool, it would only add NEW items that are not
currently already in my lists yet.
2013-06-25 23:40:02 -07:00

88 lines
3 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.list_id = @page_params[:list_id]
@neopets_page.source = @page_params[:source]
messages = [t('neopets_pages.create.success',
index: @neopets_page.index)]
saved_counts = @neopets_page.save_hangers!
any_created = saved_counts[:created] > 0
any_updated = saved_counts[:updated] > 0
if any_created && any_updated
created_msg = t('neopets_pages.create.created_and_updated_hangers.created_msg',
count: saved_counts[:created])
updated_msg = t('neopets_pages.create.created_and_updated_hangers.updated_msg',
count: saved_counts[:updated])
messages << t('neopets_pages.create.created_and_updated_hangers.text',
created_msg: created_msg,
updated_msg: updated_msg)
elsif any_created
messages << t('neopets_pages.create.created_hangers',
count: saved_counts[:created])
elsif any_updated
messages << t('neopets_pages.create.updated_hangers',
count: saved_counts[:updated])
elsif @neopets_page.hangers.size > 1 # saw items, but at same quantities
messages << t('neopets_pages.create.no_changes')
else # no items recognized
messages << t('neopets_pages.create.no_data')
end
unless @neopets_page.unknown_item_names.empty?
messages << t('neopets_pages.create.unknown_items',
item_names: @neopets_page.unknown_item_names.to_sentence,
count: @neopets_page.unknown_item_names.size)
end
if @neopets_page.last?
messages << t('neopets_pages.create.done', name: @neopets_page.name)
destination = user_closet_hangers_path(current_user)
else
messages << t('neopets_pages.create.next_page',
next_index: (@neopets_page.index + 1))
destination = {action: :new, index: @neopets_page.index + 1,
list_id: @neopets_page.list_id}
end
flash[:success] = messages.join(' ')
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]
@neopets_page.list_id = params[:list_id]
@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] = t('neopets_pages.create.parse_error')
render action: :new
end
end