2012-10-05 20:40:30 +00:00
|
|
|
class Synapse < ActiveRecord::Base
|
|
|
|
|
|
|
|
belongs_to :user
|
|
|
|
|
2013-01-01 22:45:35 +00:00
|
|
|
belongs_to :topic1, :class_name => "Topic", :foreign_key => "node1_id"
|
|
|
|
belongs_to :topic2, :class_name => "Topic", :foreign_key => "node2_id"
|
2012-10-05 20:40:30 +00:00
|
|
|
|
2012-10-26 10:04:52 +00:00
|
|
|
has_many :mappings
|
|
|
|
has_many :maps, :through => :mappings
|
|
|
|
|
2013-04-26 04:07:29 +00:00
|
|
|
# sends push updates through redis to websockets for realtime updates
|
|
|
|
def message action, origin_user_id
|
|
|
|
|
|
|
|
return if self.permission == "private" and action == "create"
|
|
|
|
|
|
|
|
#get array of all maps topic appears in
|
|
|
|
@maps = self.maps
|
|
|
|
#sends update to all maps that topic appears in who have realtime on
|
|
|
|
@maps.each do |map|
|
|
|
|
msg = { origin: origin_user_id,
|
|
|
|
mapid: map.id,
|
|
|
|
resource: 'Synapse',
|
|
|
|
action: action,
|
|
|
|
id: self.id,
|
|
|
|
obj: self.self_as_json.html_safe }
|
|
|
|
$redis.publish 'maps', msg.to_json
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-10-27 08:30:56 +00:00
|
|
|
##### JSON ######
|
|
|
|
|
2012-10-19 21:26:46 +00:00
|
|
|
def self_as_json
|
2012-10-24 06:47:08 +00:00
|
|
|
Jbuilder.encode do |json|
|
|
|
|
@synapsedata = Hash.new
|
|
|
|
@synapsedata['$desc'] = self.desc
|
2012-11-04 00:14:21 +00:00
|
|
|
@synapsedata['$showDesc'] = false
|
2012-10-24 06:47:08 +00:00
|
|
|
@synapsedata['$category'] = self.category
|
2013-01-23 18:43:01 +00:00
|
|
|
@synapsedata['$id'] = self.id
|
|
|
|
@synapsedata['$userid'] = self.user.id
|
|
|
|
@synapsedata['$username'] = self.user.name
|
|
|
|
@synapsedata['$direction'] = [self.node1_id.to_s(), self.node2_id.to_s()]
|
|
|
|
@synapsedata['$permission'] = self.permission
|
2012-10-24 06:47:08 +00:00
|
|
|
json.data @synapsedata
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def selfplusnodes_as_json
|
2012-10-19 21:26:46 +00:00
|
|
|
Jbuilder.encode do |json|
|
2013-01-01 22:45:35 +00:00
|
|
|
@topics = Array.new
|
|
|
|
@topics.push(self.topic1)
|
|
|
|
@topics.push(self.topic2)
|
2012-10-19 21:26:46 +00:00
|
|
|
|
2013-01-01 22:45:35 +00:00
|
|
|
json.array!(@topics) do |topic|
|
|
|
|
json.adjacencies topic.synapses1.delete_if{|synapse| not @topics.include?(Topic.find_by_id(synapse.node2_id))} do |json, synapse|
|
2012-11-25 01:48:26 +00:00
|
|
|
json.nodeTo synapse.node2_id
|
|
|
|
json.nodeFrom synapse.node1_id
|
2012-10-19 21:26:46 +00:00
|
|
|
|
|
|
|
@synapsedata = Hash.new
|
|
|
|
@synapsedata['$desc'] = synapse.desc
|
2012-11-04 00:14:21 +00:00
|
|
|
@synapsedata['$showDesc'] = false
|
2012-10-19 21:26:46 +00:00
|
|
|
@synapsedata['$category'] = synapse.category
|
2012-11-04 00:35:37 +00:00
|
|
|
@synapsedata['$id'] = synapse.id
|
2012-10-26 10:04:52 +00:00
|
|
|
@synapsedata['$userid'] = synapse.user.id
|
|
|
|
@synapsedata['$username'] = synapse.user.name
|
2012-11-25 01:48:26 +00:00
|
|
|
@synapsedata['$direction'] = [synapse.node1_id.to_s(), synapse.node2_id.to_s()]
|
2013-01-23 18:43:01 +00:00
|
|
|
@synapsedata['$permission'] = synapse.permission
|
2012-10-19 21:26:46 +00:00
|
|
|
json.data @synapsedata
|
|
|
|
end
|
|
|
|
|
2012-12-22 08:32:12 +00:00
|
|
|
@inmaps = Array.new
|
2013-01-01 22:45:35 +00:00
|
|
|
topic.maps.each do |map|
|
2012-12-22 08:32:12 +00:00
|
|
|
@inmaps.push(map.id)
|
|
|
|
end
|
|
|
|
|
2013-01-01 22:45:35 +00:00
|
|
|
@topicdata = Hash.new
|
|
|
|
@topicdata['$desc'] = topic.desc
|
|
|
|
@topicdata['$link'] = topic.link
|
|
|
|
@topicdata['$metacode'] = topic.metacode.name
|
|
|
|
@topicdata['$inmaps'] = @inmaps
|
|
|
|
@topicdata['$userid'] = topic.user.id
|
|
|
|
@topicdata['$username'] = topic.user.name
|
2013-01-23 18:43:01 +00:00
|
|
|
@topicdata['$permission'] = topic.permission
|
2013-01-01 22:45:35 +00:00
|
|
|
json.data @topicdata
|
|
|
|
json.id topic.id
|
|
|
|
json.name topic.name
|
2012-10-19 21:26:46 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2012-10-27 08:30:56 +00:00
|
|
|
|
|
|
|
##### PERMISSIONS ######
|
|
|
|
|
|
|
|
scope :visibleToUser, lambda { |current, user|
|
|
|
|
if user != nil
|
|
|
|
if user != current
|
|
|
|
Synapse.find_all_by_user_id_and_permission(user.id, "commons") | Synapse.find_all_by_user_id_and_permission(user.id, "public")
|
|
|
|
elsif user == current
|
|
|
|
Synapse.find_all_by_user_id_and_permission(user.id, "commons") | Synapse.find_all_by_user_id_and_permission(user.id, "public") | current.synapses.where(:permission => "private")
|
|
|
|
end
|
|
|
|
elsif (current != nil && user == nil)
|
|
|
|
Synapse.find_all_by_permission("commons") | Synapse.find_all_by_permission("public") | current.synapses.where(:permission => "private")
|
|
|
|
elsif (current == nil)
|
|
|
|
Synapse.find_all_by_permission("commons") | Synapse.find_all_by_permission("public")
|
|
|
|
end
|
|
|
|
}
|
|
|
|
|
|
|
|
# returns false if user not allowed to 'show' Topic, Synapse, or Map
|
|
|
|
def authorize_to_show(user)
|
|
|
|
if (self.permission == "private" && self.user != user)
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
return self
|
|
|
|
end
|
|
|
|
|
|
|
|
# returns false if user not allowed to 'edit' Topic, Synapse, or Map
|
|
|
|
def authorize_to_edit(user)
|
|
|
|
if (self.permission == "private" && self.user != user)
|
|
|
|
return false
|
|
|
|
elsif (self.permission == "public" && self.user != user)
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
return self
|
|
|
|
end
|
|
|
|
|
|
|
|
# returns Boolean if user allowed to view Topic, Synapse, or Map
|
|
|
|
def authorize_to_view(user)
|
|
|
|
if (self.permission == "private" && self.user != user)
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
|
|
|
# returns Boolean based on whether user has permissions to edit or not
|
|
|
|
def authorize_linkto_edit(user)
|
|
|
|
if (self.user == user)
|
|
|
|
return true
|
|
|
|
elsif (self.permission == "commons")
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
return false
|
|
|
|
end
|
2012-10-19 21:26:46 +00:00
|
|
|
|
2012-10-05 20:40:30 +00:00
|
|
|
end
|