diff --git a/app/controllers/channels_controller.rb b/app/controllers/channels_controller.rb
index 65f65de..b61f316 100644
--- a/app/controllers/channels_controller.rb
+++ b/app/controllers/channels_controller.rb
@@ -369,7 +369,6 @@ class ChannelsController < ApplicationController
feed.longitude = params[:long] if params[:long]
feed.longitude = params[:longitude] if params[:longitude]
feed.elevation = params[:elevation] if params[:elevation]
- feed.location = params[:location] if params[:location]
# if the saves were successful
if channel.save && feed.save
@@ -518,6 +517,14 @@ class ChannelsController < ApplicationController
if !row.blank?
feed = Feed.new
+ # set location and status then delete the rows
+ # these 5 deletes must be performed in the proper (reverse) order
+ feed.status = row.delete_at(status_column) if status_column > 0
+ feed.location = row.delete_at(location_column) if location_column > 0
+ feed.elevation = row.delete_at(elevation_column) if elevation_column > 0
+ feed.longitude = row.delete_at(longitude_column) if longitude_column > 0
+ feed.latitude = row.delete_at(latitude_column) if latitude_column > 0
+
# add the fields if they are from named columns, using reverse order
feed.field8 = row.delete_at(field8_column) if field8_column != -1
feed.field7 = row.delete_at(field7_column) if field7_column != -1
@@ -528,14 +535,6 @@ class ChannelsController < ApplicationController
feed.field2 = row.delete_at(field2_column) if field2_column != -1
feed.field1 = row.delete_at(field1_column) if field1_column != -1
- # set location and status then delete the rows
- # these 5 deletes must be performed in the proper (reverse) order
- feed.status = row.delete_at(status_column) if status_column > 0
- feed.location = row.delete_at(location_column) if location_column > 0
- feed.elevation = row.delete_at(elevation_column) if elevation_column > 0
- feed.longitude = row.delete_at(longitude_column) if longitude_column > 0
- feed.latitude = row.delete_at(latitude_column) if latitude_column > 0
-
# remove entry_id column if necessary
row.delete_at(entry_id_column) if entry_id_column > 0
@@ -557,6 +556,10 @@ class ChannelsController < ApplicationController
feed.field6 = row[6] if feed.field6.blank?
feed.field7 = row[7] if feed.field7.blank?
feed.field8 = row[8] if feed.field8.blank?
+ feed.latitude = row[9] if feed.latitude.blank?
+ feed.longitude = row[10] if feed.longitude.blank?
+ feed.elevation = row[11] if feed.elevation.blank?
+ feed.status = row[12] if feed.status.blank?
# save channel and feed
feed.save
@@ -615,4 +618,3 @@ class ChannelsController < ApplicationController
end
end
-
diff --git a/app/controllers/windows_controller.rb b/app/controllers/windows_controller.rb
index be0a853..952a9d5 100644
--- a/app/controllers/windows_controller.rb
+++ b/app/controllers/windows_controller.rb
@@ -1,6 +1,7 @@
class WindowsController < ApplicationController
before_filter :require_user, :except => [:index, :html, :iframe]
+ # hides a window, returns the window id if successful or '-1' if failure
def hide
window = Window.find(params[:id])
window.show_flag = false
@@ -11,60 +12,36 @@ class WindowsController < ApplicationController
end
end
- # Call WindowsController.display when we want to display a window on the dashboard
- # params[:visibility_flag] is whether it is the private or public dashboard
- # params[:plugin] is for displaying a plugin, instead of a window
- # params[:id] is the window ID for conventional windows, but the plugin_id for plugins
- # params[:channel_id] is the channel_id
+ # displays a window on the dashboard
def display
- @visibility = params[:visibility_flag]
-
window = Window.find(params[:id])
- window = Window.new if window.nil?
window.show_flag = true
- #Just save this change, then modify the object before rendering the JSON
- savedWindow = window.save
+ # save this change
+ saved_window = window.save
- config_window window
+ # modify the object before rendering the JSON
+ window.set_title_for_display!
+ window.set_html_for_display!
- @mychannel = current_user && current_user.id == window.channel.user_id
-
- if savedWindow
+ # if the window was saved successfully
+ if saved_window
render :json => window.to_json
else
render :json => 'An error occurred'.to_json
end
end
- def config_window(window)
- if window.window_type == "plugin"
- pluginName = Plugin.find(window.content_id).name
- window.title = t(window.title, {:name => pluginName})
- elsif window.window_type == "chart"
- window.title = t(window.title, {:field_number => window.content_id})
- options = window.options if !window.nil?
- options ||= ""
- window.html["::OPTIONS::"] = options unless window.html.nil? || window.html.index("::OPTIONS::").nil?
- else
- window.title = t(window.title)
- end
- end
-
def html
window = Window.find(params[:id])
- options = window.options unless window.nil? || window.window_type != "chart"
- window.html["::OPTIONS::"] = options unless window.html.nil? || window.html.index("::OPTIONS::").nil?
- html = window.html
-
- render :text => html
+ window.set_html_for_display!
+ render :text => window.html
end
def iframe
window = Window.find(params[:id])
- options = window.options unless window.nil? || window.window_type != "chart"
- window.html["::OPTIONS::"] = options unless window.html.nil? || window.html.index("::OPTIONS::").nil?
+ window.set_html_for_display!
iframe_html = window.html
-
+ # set the domain correctly
iframe_html = iframe_html.gsub(/src=\"[\/.]/, 'src="' + api_domain);
render :text => iframe_html
end
@@ -73,26 +50,16 @@ class WindowsController < ApplicationController
channel = Channel.find(params[:channel_id])
windows = channel.public_windows(true).order(:position) unless params[:channel_id].nil?
- if channel.recent_statuses.nil? || channel.recent_statuses.size <= 0
+ if channel.recent_statuses.blank?
@windows = windows.delete_if { |w| w.window_type == "status" }
else
@windows = windows
end
@windows.each do |window|
-
- if window.window_type == "plugin"
- pluginName = Plugin.find(window.content_id).name
- window.title = t(window.title, {:name => pluginName})
- elsif window.window_type == "chart"
- window.title = t(window.title, {:field_number => window.content_id})
- options = window.options if !window.nil?
- options ||= ""
- window.html["::OPTIONS::"] = options unless window.html.nil? || window.html.index("::OPTIONS::").nil?
- else
- window.title = t(window.title)
- end
-
+ # modify the object before rendering the JSON
+ window.set_title_for_display!
+ window.set_html_for_display!
end
respond_to do |format|
@@ -108,21 +75,15 @@ class WindowsController < ApplicationController
channel = Channel.find(params[:channel_id])
if @visibility == "private"
- @windows = channel.private_windows(false) unless channel.nil?
+ @windows = channel.private_windows(false)
else
- @windows = channel.public_windows(false) unless channel.nil?
+ @windows = channel.public_windows(false)
end
@windows.reject! { |window| window.window_type == "plugin" }
@windows.each do |window|
- if window.window_type == "plugin"
- elsif window.window_type == "chart"
- window.title = t(window.title, {:field_number => window.content_id})
- options = window.options unless window.nil?
- options ||= ""
- window.html["::OPTIONS::"] = options unless window.html.nil? || window.html.index("::OPTIONS::").nil?
- else
- window.title = t(window.title)
- end
+ # modify the object before rendering the JSON
+ window.set_title_for_display!
+ window.set_html_for_display!
end
respond_to do |format|
@@ -133,26 +94,18 @@ class WindowsController < ApplicationController
def private_windows
channel = Channel.find(params[:channel_id])
- windows = channel.private_windows(true).order(:position) unless params[:channel_id].nil?
+ windows = channel.private_windows(true).order(:position)
- if channel.recent_statuses.nil? || channel.recent_statuses.size <= 0
+ if channel.recent_statuses.blank?
@windows = windows.delete_if { |w| w.window_type == "status" }
else
@windows = windows
end
@windows.each do |window|
- if window.window_type == "plugin"
- pluginName = Plugin.find(window.content_id).name
- window.title = t(window.title, {:name => pluginName})
- elsif window.window_type == "chart"
- window.title = t(window.title, {:field_number => window.content_id})
- options = window.options unless window.nil?
- options ||= ""
- window.html["::OPTIONS::"] = options unless window.html.nil? || window.html.index("::OPTIONS::").nil?
- else
- window.title = t(window.title)
- end
+ # modify the object before rendering the JSON
+ window.set_title_for_display!
+ window.set_html_for_display!
end
respond_to do |format|
@@ -163,7 +116,6 @@ class WindowsController < ApplicationController
def update
- logger.info "We're trying to update the windows with " + params.to_s
#params for this put are going to look like
# page"=>"{\"col\":0,\"positions\":[1,2,3]}"
#So.. the position values are Windows.id They should get updated with the ordinal value based
@@ -177,21 +129,20 @@ class WindowsController < ApplicationController
values = JSON(params[:page])
# .. then find each window and update with new ordinal position and col.
- logger.info "Channel id = " + params[:channel_id].to_s
@channel = current_user.channels.find(params[:channel_id])
col = values["col"]
saved = true
- values["positions"].each_with_index do |p,i|
- windows = @channel.windows.where({:id => p}) unless p.nil?
- unless windows.nil? || windows.empty?
- w = windows[0]
- w.position = i
- w.col = col
- if !w.save
+ values["positions"].each_with_index do |p, index|
+ window = @channel.windows.where({:id => p}).first unless p.nil?
+ if window.present?
+ window.position = index
+ window.col = col
+ if !window.save
saved = false
end
end
end
+ # if the windows were saved successfully
if saved
render :text => '0'
else
diff --git a/app/models/feed.rb b/app/models/feed.rb
index 6f524a9..0426db4 100644
--- a/app/models/feed.rb
+++ b/app/models/feed.rb
@@ -48,7 +48,7 @@ class Feed < ActiveRecord::Base
# for to_xml, return only the public attributes
def self.public_options
{
- :except => [:id, :updated_at]
+ :except => [:id, :updated_at, :location]
}
end
@@ -70,7 +70,6 @@ class Feed < ActiveRecord::Base
only += [:latitude]
only += [:longitude]
only += [:elevation]
- only += [:location]
end
# add status if necessary
diff --git a/app/models/window.rb b/app/models/window.rb
index b1d4d9c..1ffa91d 100644
--- a/app/models/window.rb
+++ b/app/models/window.rb
@@ -43,5 +43,29 @@ class Window < ActiveRecord::Base
window if window.save
end
+ # set the title for display to user; don't save after calling this method
+ def set_title_for_display!
+ # if this is a plugin
+ if window_type == "plugin"
+ plugin_name = Plugin.find(content_id).name
+ self.title = I18n.t(title, {:name => plugin_name})
+ # else if this is a chart
+ elsif window_type == "chart"
+ self.title = I18n.t(title, {:field_number => content_id})
+ # else set title for other window types, for example: I18n.t('window_map') = 'Channel Location'
+ else
+ self.title = I18n.t(title)
+ end
+ end
+
+ # set the html for display to user; don't save after calling this method
+ def set_html_for_display!
+ if window_type == "chart"
+ html_options = options || ''
+ # replace '::OPTIONS::' if present
+ self.html['::OPTIONS::'] = html_options if html.present? && html.index("::OPTIONS::").present?
+ end
+ end
+
end
diff --git a/app/views/docs/channels/_show.html.erb b/app/views/docs/channels/_show.html.erb
index ff336c7..9f35951 100644
--- a/app/views/docs/channels/_show.html.erb
+++ b/app/views/docs/channels/_show.html.erb
@@ -8,11 +8,15 @@ To view a specific Channel, send an HTTP GET to
<%= @ssl_api_domain %>channels/CHANNEL_ID.json.xml
.
-
-Valid parameters:
-
<%= @ssl_api_domain %>apps/thingtweet/1/statuses/update
and include your ThingTweet API key and message.
+ +POST <%= @ssl_api_domain %>apps/thingtweet/1/statuses/update + api_key=<%= @thingtweet_api_key %> + status=I just posted this from my thing!+ +
1
if the update was successful, and -1
if there was an error.
+ %%channel_CHANNEL_ID_field_FIELD_NUMBER%%
+ status=The current CheerLights color is %%channel_1417_field_1%%.
+
+ +POST <%= @ssl_api_domain %>update.json.xml + api_key=XXXXXXXXXXXXXXXX + field1=73 + twitter=thingspeaktest + tweet=I just posted this from my thing! ++ +