added support for gelocation in feeds
This commit is contained in:
parent
93a51bdc93
commit
7e964afcc6
@ -9,6 +9,7 @@ class ChannelsController < ApplicationController
|
||||
|
||||
def show
|
||||
@channel = Channel.find(params[:id]) if params[:id]
|
||||
@domain = domain
|
||||
|
||||
# if owner of channel
|
||||
get_channel_data if current_user and @channel.user_id == current_user.id
|
||||
@ -28,6 +29,10 @@ class ChannelsController < ApplicationController
|
||||
@channel.update_attributes(params[:channel])
|
||||
@channel.name = "#{t(:channel_default_name)} #{@channel.id}" if params[:channel][:name].empty?
|
||||
@channel.save
|
||||
|
||||
# save tags
|
||||
@channel.save_tags(params[:tags][:name])
|
||||
|
||||
redirect_to channel_path(@channel.id) and return
|
||||
end
|
||||
|
||||
@ -59,6 +64,20 @@ class ChannelsController < ApplicationController
|
||||
redirect_to edit_channel_path(@channel.id)
|
||||
end
|
||||
|
||||
# clear all data from a channel
|
||||
def clear
|
||||
channel = Channel.find(params[:id])
|
||||
# make sure channel belongs to current user
|
||||
check_permissions(channel)
|
||||
|
||||
# do the delete
|
||||
channel.feeds.each do |f|
|
||||
f.delete
|
||||
end
|
||||
|
||||
redirect_to channels_path
|
||||
end
|
||||
|
||||
def destroy
|
||||
@channel = Channel.find(params[:id])
|
||||
# make sure channel belongs to current user
|
||||
@ -73,13 +92,16 @@ class ChannelsController < ApplicationController
|
||||
def post_data
|
||||
status = '0'
|
||||
feed = Feed.new
|
||||
|
||||
|
||||
api_key = ApiKey.find_by_api_key(get_userkey)
|
||||
|
||||
# if write persmission, allow post
|
||||
if (api_key && api_key.write_flag)
|
||||
channel = Channel.find(api_key.channel_id)
|
||||
|
||||
# rate limit posts
|
||||
render :text => '0' and return if (Time.now < channel.updated_at + 14.seconds)
|
||||
|
||||
# update entry_id for channel and feed
|
||||
entry_id = channel.last_entry_id.nil? ? 1 : channel.last_entry_id + 1
|
||||
channel.last_entry_id = entry_id
|
||||
@ -88,15 +110,18 @@ class ChannelsController < ApplicationController
|
||||
# try to get created_at datetime if appropriate
|
||||
if params[:created_at]
|
||||
begin
|
||||
@feed.created_at = DateTime.parse(params[:created_at])
|
||||
feed.created_at = DateTime.parse(params[:created_at])
|
||||
# if invalid datetime, don't do anything--rails will set created_at
|
||||
rescue
|
||||
end
|
||||
end
|
||||
|
||||
# strip line feeds from end of parameters
|
||||
# modify parameters
|
||||
params.each do |key, value|
|
||||
params[key] = value.sub(/\\n$/, '').sub(/\\r$/, '')
|
||||
# strip line feeds from end of parameters
|
||||
params[key] = value.sub(/\\n$/, '').sub(/\\r$/, '') if value
|
||||
# use ip address if found
|
||||
params[key] = request.remote_addr if value.upcase == 'IP_ADDRESS'
|
||||
end
|
||||
|
||||
# set feed details
|
||||
@ -111,6 +136,11 @@ class ChannelsController < ApplicationController
|
||||
feed.field7 = params[:field7] if params[:field7]
|
||||
feed.field8 = params[:field8] if params[:field8]
|
||||
feed.status = params[:status] if params[:status]
|
||||
feed.latitude = params[:lat] if params[:lat]
|
||||
feed.latitude = params[:latitude] if params[:latitude]
|
||||
feed.longitude = params[:long] if params[:long]
|
||||
feed.longitude = params[:longitude] if params[:longitude]
|
||||
feed.elevation = params[:elevation] if params[:elevation]
|
||||
|
||||
if channel.save && feed.save
|
||||
status = entry_id
|
||||
@ -122,4 +152,4 @@ class ChannelsController < ApplicationController
|
||||
render :text => status
|
||||
end
|
||||
|
||||
end
|
||||
end
|
@ -1,5 +1,6 @@
|
||||
class FeedController < ApplicationController
|
||||
require 'csv'
|
||||
layout 'application', :except => :index
|
||||
|
||||
def index
|
||||
channel = Channel.find(params[:channel_id])
|
||||
@ -8,6 +9,7 @@ class FeedController < ApplicationController
|
||||
|
||||
# check for access
|
||||
if @success
|
||||
|
||||
# create options hash
|
||||
channel_options = { :only => channel_select_data(channel) }
|
||||
select_options = feed_select_data(channel)
|
||||
@ -17,7 +19,7 @@ class FeedController < ApplicationController
|
||||
:all,
|
||||
:conditions => { :channel_id => channel.id, :created_at => get_date_range(params) },
|
||||
:select => select_options,
|
||||
:order => 'created_at'
|
||||
:order => 'created_at desc'
|
||||
)
|
||||
|
||||
# if a feed has data
|
||||
@ -159,6 +161,13 @@ class FeedController < ApplicationController
|
||||
only += [:field8] unless channel.field8.blank? or (params[:field_id] and params[:field_id] != '8')
|
||||
only += [:status] if params[:status] and params[:status].upcase == 'TRUE'
|
||||
|
||||
# add geolocation data if necessary
|
||||
if params[:location] and params[:location].upcase == 'TRUE'
|
||||
only += [:latitude]
|
||||
only += [:longitude]
|
||||
only += [:elevation]
|
||||
end
|
||||
|
||||
return only
|
||||
end
|
||||
|
||||
@ -171,6 +180,7 @@ class FeedController < ApplicationController
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
# slice feed into timescales
|
||||
def feeds_into_timescales(feeds)
|
||||
# convert timescale (minutes) into seconds
|
||||
|
46
db/schema.rb
46
db/schema.rb
@ -31,14 +31,14 @@ ActiveRecord::Schema.define(:version => 20101210151518) do
|
||||
t.string "description"
|
||||
t.decimal "latitude", :precision => 15, :scale => 10
|
||||
t.decimal "longitude", :precision => 15, :scale => 10
|
||||
t.text "field1"
|
||||
t.text "field2"
|
||||
t.text "field3"
|
||||
t.text "field4"
|
||||
t.text "field5"
|
||||
t.text "field6"
|
||||
t.text "field7"
|
||||
t.text "field8"
|
||||
t.string "field1"
|
||||
t.string "field2"
|
||||
t.string "field3"
|
||||
t.string "field4"
|
||||
t.string "field5"
|
||||
t.string "field6"
|
||||
t.string "field7"
|
||||
t.string "field8"
|
||||
t.integer "scale1"
|
||||
t.integer "scale2"
|
||||
t.integer "scale3"
|
||||
@ -52,26 +52,38 @@ ActiveRecord::Schema.define(:version => 20101210151518) do
|
||||
t.string "elevation"
|
||||
t.integer "last_entry_id"
|
||||
t.boolean "public_flag", :default => false
|
||||
t.string "options1"
|
||||
t.string "options2"
|
||||
t.string "options3"
|
||||
t.string "options4"
|
||||
t.string "options5"
|
||||
t.string "options6"
|
||||
t.string "options7"
|
||||
t.string "options8"
|
||||
end
|
||||
|
||||
|
||||
create_table "feeds", :force => true do |t|
|
||||
t.integer "channel_id"
|
||||
t.text "raw_data"
|
||||
t.text "field1"
|
||||
t.text "field2"
|
||||
t.text "field3"
|
||||
t.text "field4"
|
||||
t.text "field5"
|
||||
t.text "field6"
|
||||
t.text "field7"
|
||||
t.text "field8"
|
||||
t.string "field1"
|
||||
t.string "field2"
|
||||
t.string "field3"
|
||||
t.string "field4"
|
||||
t.string "field5"
|
||||
t.string "field6"
|
||||
t.string "field7"
|
||||
t.string "field8"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.integer "entry_id"
|
||||
t.string "status"
|
||||
t.decimal "latitude", :precision => 15, :scale => 10
|
||||
t.decimal "longitude", :precision => 15, :scale => 10
|
||||
t.string "elevation"
|
||||
end
|
||||
|
||||
add_index "feeds", ["channel_id"], :name => "index_feeds_on_channel_id"
|
||||
add_index "feeds", ["channel_id", "created_at"], :name => "index_feeds_on_channel_id_and_created_at"
|
||||
|
||||
create_table "users", :force => true do |t|
|
||||
t.string "login", :null => false
|
||||
|
Loading…
Reference in New Issue
Block a user