2012-09-23 02:39:12 +00:00
|
|
|
class MainController < ApplicationController
|
2013-01-01 22:45:35 +00:00
|
|
|
include TopicsHelper
|
2014-01-29 03:46:58 +00:00
|
|
|
include MapsHelper
|
|
|
|
include UsersHelper
|
2014-02-05 01:28:06 +00:00
|
|
|
include SynapsesHelper
|
2012-09-23 02:39:12 +00:00
|
|
|
|
2012-10-29 17:52:29 +00:00
|
|
|
before_filter :require_user, only: [:invite]
|
|
|
|
|
2012-09-23 02:39:12 +00:00
|
|
|
respond_to :html, :js, :json
|
|
|
|
|
2014-01-29 03:46:58 +00:00
|
|
|
# home page
|
2013-01-08 04:03:41 +00:00
|
|
|
def home
|
2014-02-10 06:29:02 +00:00
|
|
|
@maps = Map.find_all_by_featured(true).shuffle!
|
|
|
|
@maps = @maps.slice(0,3)
|
2013-01-08 04:03:41 +00:00
|
|
|
|
2013-02-04 00:13:21 +00:00
|
|
|
respond_with(@maps)
|
2013-01-08 04:03:41 +00:00
|
|
|
end
|
|
|
|
|
2014-01-29 03:46:58 +00:00
|
|
|
# /request
|
|
|
|
def requestinvite
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
### SEARCHING ###
|
|
|
|
|
|
|
|
# get /search/topics?term=SOMETERM
|
|
|
|
def searchtopics
|
2012-12-23 06:12:56 +00:00
|
|
|
@current = current_user
|
2013-01-03 08:53:25 +00:00
|
|
|
|
2014-01-29 03:46:58 +00:00
|
|
|
term = params[:term]
|
2014-02-02 19:56:07 +00:00
|
|
|
user = params[:user] ? params[:user] : false
|
2014-01-29 03:46:58 +00:00
|
|
|
|
|
|
|
if term && !term.empty? && term.downcase[0..3] != "map:" && term.downcase[0..6] != "mapper:" && term.downcase != "topic:"
|
|
|
|
|
|
|
|
#remove "topic:" if appended at beginning
|
|
|
|
term = term[6..-1] if term.downcase[0..5] == "topic:"
|
|
|
|
|
2014-02-05 01:28:06 +00:00
|
|
|
#if desc: search desc instead
|
|
|
|
desc = false
|
|
|
|
if term.downcase[0..4] == "desc:"
|
|
|
|
term = term[5..-1]
|
|
|
|
desc = true
|
|
|
|
end
|
|
|
|
|
|
|
|
#if link: search link instead
|
|
|
|
link = false
|
|
|
|
if term.downcase[0..4] == "link:"
|
|
|
|
term = term[5..-1]
|
|
|
|
link = true
|
|
|
|
end
|
|
|
|
|
2014-01-29 03:46:58 +00:00
|
|
|
#check whether there's a filter by metacode as part of the query
|
|
|
|
filterByMetacode = false
|
|
|
|
Metacode.all.each do |m|
|
|
|
|
lOne = m.name.length+1
|
|
|
|
lTwo = m.name.length
|
|
|
|
|
|
|
|
if term.downcase[0..lTwo] == m.name.downcase + ":"
|
|
|
|
term = term[lOne..-1]
|
|
|
|
filterByMetacode = m
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
if filterByMetacode
|
2014-02-14 03:22:01 +00:00
|
|
|
# !connor : Shouldn't this be checked for all cases, not just metacodes?
|
2014-01-29 03:46:58 +00:00
|
|
|
if term == ""
|
|
|
|
@topics = []
|
|
|
|
else
|
2014-02-14 03:22:01 +00:00
|
|
|
# !connor add % to the frontof this one too? why not?
|
2014-02-05 01:28:06 +00:00
|
|
|
search = term.downcase + '%'
|
2014-02-02 19:56:07 +00:00
|
|
|
|
|
|
|
if !user
|
2014-02-05 01:28:06 +00:00
|
|
|
@topics = Topic.where('LOWER("name") like ?', search).where('metacode_id = ?', filterByMetacode.id).order('"name"')
|
|
|
|
#read this next line as 'delete a topic if its private and you're either 1. logged out or 2. logged in but not the topic creator
|
|
|
|
@topics.delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) }
|
2014-02-02 19:56:07 +00:00
|
|
|
elsif user
|
2014-02-05 01:28:06 +00:00
|
|
|
@topics = Topic.where('LOWER("name") like ?', search).where('metacode_id = ? AND user_id = ?', filterByMetacode.id, user).order('"name"')
|
|
|
|
#read this next line as 'delete a topic if its private and you're either 1. logged out or 2. logged in but not the topic creator
|
|
|
|
@topics.delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) }
|
2014-02-02 19:56:07 +00:00
|
|
|
end
|
2014-01-29 03:46:58 +00:00
|
|
|
end
|
2014-02-05 01:28:06 +00:00
|
|
|
elsif desc
|
|
|
|
search = '%' + term.downcase + '%'
|
|
|
|
if !user
|
|
|
|
@topics = Topic.where('LOWER("desc") like ?', search).order('"name"')
|
|
|
|
elsif user
|
|
|
|
@topics = Topic.where('LOWER("desc") like ?', search).where('user_id = ?', user).order('"name"')
|
|
|
|
end
|
|
|
|
elsif link
|
2014-01-29 03:46:58 +00:00
|
|
|
search = '%' + term.downcase + '%'
|
2014-02-02 19:56:07 +00:00
|
|
|
if !user
|
2014-02-05 01:28:06 +00:00
|
|
|
@topics = Topic.where('LOWER("link") like ?', search).order('"name"')
|
|
|
|
elsif user
|
|
|
|
@topics = Topic.where('LOWER("link") like ?', search).where('user_id = ?', user).order('"name"')
|
|
|
|
end
|
|
|
|
else #regular case, just search the name
|
2014-02-14 03:22:01 +00:00
|
|
|
# !connor : Definitely add the % out front here.
|
2014-02-05 01:28:06 +00:00
|
|
|
search = term.downcase + '%'
|
|
|
|
if !user
|
|
|
|
@topics = Topic.where('LOWER("name") like ?', search).order('"name"')
|
|
|
|
elsif user
|
|
|
|
@topics = Topic.where('LOWER("name") like ?', search).where('user_id = ?', user).order('"name"')
|
2014-02-02 19:56:07 +00:00
|
|
|
end
|
2013-01-03 08:53:25 +00:00
|
|
|
end
|
2014-01-29 03:46:58 +00:00
|
|
|
else
|
|
|
|
@topics = []
|
2012-12-23 06:12:56 +00:00
|
|
|
end
|
2014-02-05 01:28:06 +00:00
|
|
|
|
|
|
|
#read this next line as 'delete a topic if its private and you're either 1. logged out or 2. logged in but not the topic creator
|
|
|
|
@topics.delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) }
|
|
|
|
|
2014-01-29 03:46:58 +00:00
|
|
|
render json: autocomplete_array_json(@topics)
|
|
|
|
end
|
|
|
|
|
|
|
|
# get /search/maps?term=SOMETERM
|
|
|
|
def searchmaps
|
|
|
|
@current = current_user
|
2013-01-03 08:53:25 +00:00
|
|
|
|
2014-01-29 03:46:58 +00:00
|
|
|
term = params[:term]
|
2014-02-14 03:22:01 +00:00
|
|
|
#!connor is nil the same as false? why is it done different here?
|
2014-02-02 19:56:07 +00:00
|
|
|
user = params[:user] ? params[:user] : nil
|
|
|
|
|
2014-01-29 03:46:58 +00:00
|
|
|
if term && !term.empty? && term.downcase[0..5] != "topic:" && term.downcase[0..6] != "mapper:" && term.downcase != "map:"
|
2013-01-03 23:21:46 +00:00
|
|
|
|
2014-01-29 03:46:58 +00:00
|
|
|
#remove "map:" if appended at beginning
|
|
|
|
term = term[4..-1] if term.downcase[0..3] == "map:"
|
|
|
|
|
2014-02-05 01:28:06 +00:00
|
|
|
#if desc: search desc instead
|
|
|
|
desc = false
|
|
|
|
if term.downcase[0..4] == "desc:"
|
|
|
|
term = term[5..-1]
|
|
|
|
desc = true
|
|
|
|
end
|
2014-02-14 03:22:01 +00:00
|
|
|
# !connor make the search always '%' : term.downcase + '%'
|
2014-02-05 05:03:44 +00:00
|
|
|
search = desc ? '%' + term.downcase + '%' : term.downcase + '%'
|
2014-02-05 01:28:06 +00:00
|
|
|
query = desc ? 'LOWER("desc") like ?' : 'LOWER("name") like ?'
|
2014-02-02 19:56:07 +00:00
|
|
|
if !user
|
2014-02-14 03:22:01 +00:00
|
|
|
# !connor why is the limit 5 done here and not above? also, why not limit after sorting alphabetically?
|
2014-02-05 01:28:06 +00:00
|
|
|
@maps = Map.where(query, search).limit(5).order('"name"')
|
2014-02-02 19:56:07 +00:00
|
|
|
elsif user
|
2014-02-05 01:28:06 +00:00
|
|
|
@maps = Map.where(query, search).where('user_id = ?', user).limit(5).order('"name"')
|
2014-02-02 19:56:07 +00:00
|
|
|
end
|
2014-01-29 03:46:58 +00:00
|
|
|
else
|
|
|
|
@maps = []
|
2012-12-23 06:12:56 +00:00
|
|
|
end
|
2014-02-05 01:28:06 +00:00
|
|
|
|
|
|
|
#read this next line as 'delete a map if its private and you're either 1. logged out or 2. logged in but not the map creator
|
|
|
|
@maps.delete_if {|m| m.permission == "private" && (!authenticated? || (authenticated? && @current.id != m.user_id)) }
|
|
|
|
|
2014-01-29 03:46:58 +00:00
|
|
|
render json: autocomplete_map_array_json(@maps)
|
2012-12-23 06:12:56 +00:00
|
|
|
end
|
|
|
|
|
2014-01-29 03:46:58 +00:00
|
|
|
# get /search/mappers?term=SOMETERM
|
|
|
|
def searchmappers
|
|
|
|
@current = current_user
|
|
|
|
|
|
|
|
term = params[:term]
|
|
|
|
if term && !term.empty? && term.downcase[0..3] != "map:" && term.downcase[0..5] != "topic:" && term.downcase != "mapper:"
|
|
|
|
|
|
|
|
#remove "mapper:" if appended at beginning
|
|
|
|
term = term[7..-1] if term.downcase[0..6] == "mapper:"
|
2014-02-14 03:46:13 +00:00
|
|
|
# !connor same question as above
|
2014-02-05 01:28:06 +00:00
|
|
|
@mappers = User.where('LOWER("name") like ?', term.downcase + '%').limit(5).order('"name"')
|
2014-01-29 03:46:58 +00:00
|
|
|
else
|
|
|
|
@mappers = []
|
2012-10-29 17:52:29 +00:00
|
|
|
end
|
2014-01-29 03:46:58 +00:00
|
|
|
render json: autocomplete_user_array_json(@mappers)
|
2014-02-05 01:28:06 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
# get /search/synapses?term=SOMETERM OR
|
|
|
|
# get /search/synapses?topic1id=SOMEID&topic2id=SOMEID
|
|
|
|
def searchsynapses
|
|
|
|
@current = current_user
|
|
|
|
|
|
|
|
term = params[:term]
|
|
|
|
topic1id = params[:topic1id]
|
|
|
|
topic2id = params[:topic2id]
|
|
|
|
|
|
|
|
if term && !term.empty?
|
|
|
|
@synapses = Synapse.select('DISTINCT "desc"').
|
2014-02-14 03:46:13 +00:00
|
|
|
# !connor this should likely also have the preceeding %
|
2014-02-05 01:28:06 +00:00
|
|
|
where('LOWER("desc") like ?', term.downcase + '%').limit(5).order('"desc"')
|
|
|
|
|
|
|
|
render json: autocomplete_synapse_generic_json(@synapses)
|
|
|
|
|
|
|
|
elsif topic1id && !topic1id.empty?
|
|
|
|
@one = Synapse.where('node1_id = ? AND node2_id = ?', topic1id, topic2id)
|
|
|
|
@two = Synapse.where('node2_id = ? AND node1_id = ?', topic1id, topic2id)
|
|
|
|
@synapses = @one + @two
|
|
|
|
@synapses.sort! {|s1,s2| s1.desc <=> s2.desc }
|
|
|
|
|
|
|
|
#read this next line as 'delete a synapse if its private and you're either 1. logged out or 2. logged in but not the synapse creator
|
|
|
|
@synapses.delete_if {|s| s.permission == "private" && (!authenticated? || (authenticated? && @current.id != s.user_id)) }
|
|
|
|
|
|
|
|
render json: autocomplete_synapse_array_json(@synapses)
|
|
|
|
else
|
|
|
|
@synapses = []
|
|
|
|
render json: autocomplete_synapse_array_json(@synapses)
|
|
|
|
end
|
2014-01-29 03:46:58 +00:00
|
|
|
end
|
2012-09-23 02:39:12 +00:00
|
|
|
|
|
|
|
end
|