111 lines
3.2 KiB
Ruby
111 lines
3.2 KiB
Ruby
class ChartsController < ApplicationController
|
|
before_filter :require_user, :only => [:edit]
|
|
def edit
|
|
# params[:id] is the windows ID
|
|
@channel = current_user.channels.find(params[:channel_id])
|
|
|
|
window_id = params[:id]
|
|
logger.debug "Windows ID is #{window_id}"
|
|
window_detail = @channel.windows.find(window_id).becomes(ChartWindow).window_detail
|
|
options = window_detail.options unless window_detail.nil?
|
|
logger.debug "Options for window #{window_id} are " + options.inspect
|
|
|
|
render :partial => "charts/config", :locals => {
|
|
:displayconfig => false,
|
|
:title => @channel.name,
|
|
:src => "/channels/#{@channel.id}/charts/#{window_id}",
|
|
:options => options,
|
|
:index => window_id,
|
|
:width => Chart.default_width,
|
|
:height => Chart.default_height
|
|
}
|
|
end
|
|
|
|
def index
|
|
|
|
set_channels_menu
|
|
@channel = Channel.find(params[:channel_id])
|
|
@channel_id = params[:channel_id]
|
|
@domain = domain
|
|
|
|
# default chart size
|
|
@width = Chart.default_width
|
|
@height = Chart.default_height
|
|
|
|
check_permissions(@channel)
|
|
end
|
|
|
|
def show
|
|
|
|
# allow these parameters when creating feed querystring
|
|
feed_params = ['key','days','start','end','round','timescale','average','median','sum','results','location','status']
|
|
|
|
# set chart size
|
|
width = params[:width].present? ? params[:width] : Chart.default_width
|
|
@width_style = (width == 'auto') ? '' : "width: #{width.to_i - 25}px;"
|
|
height = params[:height].present? ? params[:height] : Chart.default_height
|
|
@height_style = (height == 'auto') ? '' : "height: #{height.to_i - 25}px;"
|
|
|
|
# add extra parameters to querystring
|
|
@qs = ''
|
|
params.each do |p|
|
|
@qs += "&#{p[0]}=#{p[1]}" if feed_params.include?(p[0])
|
|
end
|
|
|
|
# fix chart colors if necessary
|
|
params[:color] = fix_color(params[:color])
|
|
params[:bgcolor] = fix_color(params[:bgcolor])
|
|
|
|
# set ssl
|
|
ssl = (get_header_value('x_ssl') == 'true')
|
|
@domain = domain(ssl)
|
|
|
|
# should data be pushed off the end in dynamic chart
|
|
@push = (params[:push] and params[:push] == 'false') ? false : true
|
|
@results = params[:results]
|
|
render :layout => false
|
|
end
|
|
|
|
|
|
# save chart options
|
|
def update
|
|
@channel = Channel.find(params[:channel_id])
|
|
@status = 0
|
|
|
|
# check permissions
|
|
if current_user.present? && @channel.user_id == current_user.id
|
|
logger.debug "Saving Data with new options " + params[:newOptions].to_s
|
|
# save data
|
|
if params[:newOptions]
|
|
logger.debug "Updating new style options on window id #{params[:id]} with #{params[:newOptions][:options]}"
|
|
chart_window = @channel.windows.find(params[:id]).becomes(ChartWindow)
|
|
chart_window.window_detail.options = params[:newOptions][:options]
|
|
if !chart_window.save
|
|
raise "Couldn't save the Chart Window"
|
|
end
|
|
end
|
|
if @channel.save
|
|
@status = 1
|
|
end
|
|
|
|
end
|
|
|
|
# return response: 1=success, 0=failure
|
|
render :json => @status.to_json
|
|
end
|
|
|
|
private
|
|
|
|
# fixes chart color if user forgets the leading '#'
|
|
def fix_color(color)
|
|
# check for 3 or 6 character hexadecimal value
|
|
if (color and color.match(/^([0-9]|[a-f]|[A-F]){3}(([0-9]|[a-f]|[A-F]){3})?$/))
|
|
color = '#' + color
|
|
end
|
|
|
|
return color
|
|
end
|
|
|
|
end
|
|
|