app/controllers/news_controller.rb
class NewsController < ApplicationController
attr_reader :page_title
def list
# get channels
channel_id = get_channel_id(params[:channel])
if channel_id.nil?
redirect_to "/404"
return
end
# get events
event_id = get_event_id(params[:event_name])
# proceed params
page = get_page(params[:p])
start = (page - 1) * News::PAGINATION_STEP
# get news
if params[:event_name].blank?
total = News.where(status: [News::STATUS[:ok], News::STATUS[:highlighted]], channel: channel_id)
.count
@news = News.where(status: [News::STATUS[:ok], News::STATUS[:highlighted]], channel: channel_id)
.reverse_order.limit(News::PAGINATION_STEP).offset(start)
elsif event_id == false
redirect_to "/404"
return
else
@event_name = params[:event_name]
@wiki = Events::wiki?(event_id)
total = News.where(status: [News::STATUS[:ok], News::STATUS[:highlighted]], channel: channel_id, event: event_id)
.count
@news = News.where(status: [News::STATUS[:ok], News::STATUS[:highlighted]], channel: channel_id, event: event_id)
.reverse_order.limit(News::PAGINATION_STEP).offset(start)
end
@page = {
:total => total,
:cur_page => page,
:total_page => (total.to_f/News::PAGINATION_STEP).ceil
}
set_page_title(channel_id, event_id)
end
def item
param_id = params[:id].to_i
@news = News.find(param_id)
@page_title = @news.page_title
@adjacent = News.where(id: [param_id - 1, param_id + 1])
not_available_ids = Array.new
not_available_ids << @news.id
@adjacent.each do |n|
not_available_ids << n.id
end
@related = News.where(event: @news.event).where.not(id: not_available_ids).last(2).reverse
end
def feed
@news = News.where(status: [News::STATUS[:ok], News::STATUS[:highlighted]]).last(News::PAGINATION_STEP).reverse
render "news/feed.xml"
end
private
def get_page(page_param)
page = page_param.to_i || 1
page = 1 if page <= 0
page
end
def get_channel_id(channel_param)
channel = channel_param.to_s
return nil if channel.blank?
channel_id = nil
case channel
when "news"
channel_id = 0
when "results"
channel_id = 1
when "events"
channel_id = [0, 1]
else
return nil
end
channel_id
end
def get_event_id(event_name)
return nil if event_name.blank?
Events::event_id(event_name)
end
def set_page_title(channel_id, event_id)
if channel_id == 0
@page_title = "新闻 | "
@page_icon = "fw fa-newspaper-o"
@in_page_title = "新闻"
elsif channel_id == 1
@page_title = "比分 | "
@page_icon = "fw fa-table"
@in_page_title = "比分"
end
unless event_id.nil?
@page_icon = "fw fa-flag-checkered"
@page_title = "#{Events::name(event_id)} | "
@in_page_title = Events::event_name(event_id)
end
end
end