refactor chart windows
This commit is contained in:
parent
b598a83e37
commit
5789de8f1d
@ -217,7 +217,7 @@ class ChannelsController < ApplicationController
|
|||||||
params[:channel] = params
|
params[:channel] = params
|
||||||
channel.update_attributes(channel_params)
|
channel.update_attributes(channel_params)
|
||||||
|
|
||||||
channel.set_windows
|
channel.set_windows(true)
|
||||||
channel.save
|
channel.save
|
||||||
channel.save_tags(params[:channel][:tags]) if params[:channel][:tags].present?
|
channel.save_tags(params[:channel][:tags]) if params[:channel][:tags].present?
|
||||||
channel.add_write_api_key
|
channel.add_write_api_key
|
||||||
|
@ -231,18 +231,21 @@ class Channel < ActiveRecord::Base
|
|||||||
field5_changed? || field6_changed? || field7_changed? || field8_changed?
|
field5_changed? || field6_changed? || field7_changed? || field8_changed?
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_chart_portlets
|
# update the chart windows
|
||||||
self.fields.each do |field|
|
def update_chart_windows
|
||||||
update_chart_portlet field, true
|
# for each field
|
||||||
update_chart_portlet field, false
|
self.fields.each do |field_name|
|
||||||
|
# if the field exists, update the private and public chart window
|
||||||
|
if self.send("#{field_name}").present?
|
||||||
|
update_chart_window(field_name, true)
|
||||||
|
update_chart_window(field_name, false)
|
||||||
end
|
end
|
||||||
#remove portlets for fields that don't exist
|
|
||||||
#iterate all chart windows... and look for a matching field
|
|
||||||
chart_windows = windows.where(:window_type => 'chart' )
|
|
||||||
chart_windows.each do |window|
|
|
||||||
if self.send("field#{window.content_id}").blank?
|
|
||||||
window.destroy
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# remove chart windows for fields that don't exist
|
||||||
|
chart_windows = windows.where(window_type: 'chart')
|
||||||
|
chart_windows.each do |chart_window|
|
||||||
|
chart_window.destroy if self.send("field#{chart_window.content_id}").blank?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -447,51 +450,51 @@ class Channel < ActiveRecord::Base
|
|||||||
return new_ranking
|
return new_ranking
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_windows
|
# set the windows for the channel
|
||||||
#check for video window
|
def set_windows(new_channel = false)
|
||||||
|
# check for video window
|
||||||
if video_changed?
|
if video_changed?
|
||||||
update_video_portlet true
|
update_video_portlet true
|
||||||
update_video_portlet false
|
update_video_portlet false
|
||||||
end
|
end
|
||||||
|
|
||||||
#does channel have a location and corresponding google map
|
# does channel have a location and corresponding google map
|
||||||
if location_changed?
|
if location_changed?
|
||||||
update_location_portlet true
|
update_location_portlet true
|
||||||
update_location_portlet false
|
update_location_portlet false
|
||||||
end
|
end
|
||||||
|
|
||||||
#does channel have status and corresponding status window. Add the status window no matter what. Only display if it has values
|
# does channel have status and corresponding status window. Add the status window no matter what. Only display if it has values
|
||||||
update_status_portlet true
|
update_status_portlet true
|
||||||
update_status_portlet false
|
update_status_portlet false
|
||||||
|
|
||||||
# does channel have a window for every chart element
|
# update chart windows if this is a new channel or the fields have changed
|
||||||
update_chart_portlets if fields_changed?
|
update_chart_windows if new_channel || fields_changed?
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def update_chart_portlet (field, isPrivate)
|
# set the chart window; field_name should be a string like 'field4'
|
||||||
|
def update_chart_window(field_name, private_flag)
|
||||||
|
field_number = field_name.last.to_i
|
||||||
|
|
||||||
chartWindows = windows.where(:window_type => "chart", :name => "field#{field.last.to_s}", :private_flag => isPrivate )
|
# get the chart window
|
||||||
if chartWindows.nil? || chartWindows[0].nil?
|
window = self.windows.where(window_type: 'chart', content_id: field_number, private_flag: private_flag).first
|
||||||
window = Window.new
|
|
||||||
window.window_type = 'chart'
|
# if there is no chart window for this field, add a default one
|
||||||
window.position = 0
|
if window.blank?
|
||||||
window.col = 0
|
window = Window.new(window_type: 'chart', position: 0, col: 0, title: 'window_field_chart',
|
||||||
window.title = "window_field_chart"
|
name: field_name, content_id: field_number, private_flag: private_flag)
|
||||||
window.name = field.to_s
|
|
||||||
window.options = "&results=60&dynamic=true"
|
|
||||||
else
|
|
||||||
window = chartWindows[0]
|
|
||||||
# If there are options, use them.. if options are not available, then assign defaults
|
|
||||||
window.options ||= "&results=60&dynamic=true"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
window.content_id = field.last
|
# set the options if they don't already exist
|
||||||
window.private_flag = isPrivate
|
window.options ||= "&results=60&dynamic=true"
|
||||||
windows.push window
|
# associate the window with the channel
|
||||||
window.html ="<iframe id=\"iframe#{window.id}\" width=\"450\" height=\"260\" style=\"border: 1px solid #cccccc;\" src=\"/channels/#{id}/charts/#{field.last.to_s}?width=450&height=260::OPTIONS::\" ></iframe>"
|
self.windows.push window
|
||||||
|
# set the html
|
||||||
|
window.html = "<iframe id=\"iframe#{window.id}\" width=\"450\" height=\"260\" style=\"border: 1px solid #cccccc;\" src=\"/channels/#{self.id}/charts/#{field_number.to_s}?width=450&height=260::OPTIONS::\" ></iframe>"
|
||||||
|
|
||||||
|
# save the window, and raise an exception if it fails
|
||||||
if !window.save
|
if !window.save
|
||||||
raise "The Window could not be saved"
|
raise "The Window could not be saved"
|
||||||
end
|
end
|
||||||
|
@ -20,9 +20,10 @@ describe ChannelsController do
|
|||||||
|
|
||||||
it "should allow a new channel to be created" do
|
it "should allow a new channel to be created" do
|
||||||
post :create
|
post :create
|
||||||
|
channel = Channel.last
|
||||||
response.should be_redirect
|
response.should be_redirect
|
||||||
channel_id = Channel.all.last.id
|
response.should redirect_to( channel_path(channel.id, :anchor => "channelsettings"))
|
||||||
response.should redirect_to( channel_path(channel_id, :anchor => "channelsettings"))
|
channel.windows.where(window_type: 'chart').count.should eq(2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should allow a channel to be edited" do
|
it "should allow a channel to be edited" do
|
||||||
|
Loading…
Reference in New Issue
Block a user