diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index ff260c9677..ca80f6224f 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -100,44 +100,48 @@ def list end def profile - @user = DrupalUser.find_by(name: params[:id]) - @profile_user = User.find_by(username: params[:id]) - @title = @user.name - @notes = Node.research_notes - .page(params[:page]) - .order("nid DESC") - .where(status: 1, uid: @user.uid) - @coauthored = @profile_user.coauthored_notes - .page(params[:page]) - .order('node_revisions.timestamp DESC') - @questions = @user.user.questions - .order('node.nid DESC') - .paginate(:page => params[:page], per_page: 24) - questions = Node.questions - .where(status: 1) - .order('node.nid DESC') - @answered_questions = questions.select{|q| q.answers.collect(&:author).include?(@user)} - wikis = Revision.order("nid DESC") - .where('node.type' => 'page', 'node.status' => 1, uid: @user.uid) - .joins(:node) - .limit(20) - @wikis = wikis.collect(&:parent).uniq - - # User's social links - @github = @profile_user.social_link("github") - @twitter = @profile_user.social_link("twitter") - @facebook = @profile_user.social_link("facebook") - @instagram = @profile_user.social_link("instagram") - - if @user.status == 0 - if current_user && (current_user.role == "admin" || current_user.role == "moderator") - flash.now[:error] = I18n.t('users_controller.user_has_been_banned') - else - flash[:error] = I18n.t('users_controller.user_has_been_banned') - redirect_to "/" + if current_user && params[:id].nil? + redirect_to "/profile/#{current_user.username}" + else + @user = DrupalUser.find_by(name: params[:id]) + @profile_user = User.find_by(username: params[:id]) + @title = @user.name + @notes = Node.research_notes + .page(params[:page]) + .order("nid DESC") + .where(status: 1, uid: @user.uid) + @coauthored = @profile_user.coauthored_notes + .page(params[:page]) + .order('node_revisions.timestamp DESC') + @questions = @user.user.questions + .order('node.nid DESC') + .paginate(:page => params[:page], :per_page => 24) + questions = Node.questions + .where(status: 1) + .order('node.nid DESC') + @answered_questions = questions.select{|q| q.answers.collect(&:author).include?(@user)} + wikis = Revision.order("nid DESC") + .where('node.type' => 'page', 'node.status' => 1, uid: @user.uid) + .joins(:node) + .limit(20) + @wikis = wikis.collect(&:parent).uniq + + # User's social links + @github = @profile_user.social_link("github") + @twitter = @profile_user.social_link("twitter") + @facebook = @profile_user.social_link("facebook") + @instagram = @profile_user.social_link("instagram") + + if @user.status == 0 + if current_user && (current_user.role == "admin" || current_user.role == "moderator") + flash.now[:error] = I18n.t('users_controller.user_has_been_banned') + else + flash[:error] = I18n.t('users_controller.user_has_been_banned') + redirect_to "/" + end + elsif @user.status == 5 + flash.now[:warning] = I18n.t('users_controller.user_has_been_moderated') end - elsif @user.status == 5 - flash.now[:warning] = I18n.t('users_controller.user_has_been_moderated') end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 98857e6d17..2eb0e8cc54 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -35,6 +35,7 @@ def insert_extras(body) body = NodeShared.notes_map(body) body = NodeShared.notes_map_by_tag(body) body = NodeShared.people_grid(body) + body = NodeShared.people_map(body) body = NodeShared.graph_grid(body) body = NodeShared.wikis_grid(body) body diff --git a/app/models/concerns/node_shared.rb b/app/models/concerns/node_shared.rb index 58b60dfec1..95d0cf54e7 100644 --- a/app/models/concerns/node_shared.rb +++ b/app/models/concerns/node_shared.rb @@ -176,6 +176,32 @@ def self.notes_map_by_tag(body) end end + # in our interface, "users" are known as "people" because it's more human + def self.people_map(body, _page = 1) + body.gsub(/[^\>`](\)?\[map\:people\:(\S+)\:(\S+)\]/) do |_tagname| + tagname = Regexp.last_match(2) + lat = Regexp.last_match(2) + lon = Regexp.last_match(3) + nids = nids || [] + users = User.where(status: 1) + .includes(:user_tags) + .references(:user_tags) + .where('user_tags.value LIKE ?', 'lat:' + lat[0..lat.length - 2] + '%') + a = ActionController::Base.new() + output = a.render_to_string(template: "map/_leaflet", + layout: false, + locals: { + lat: lat, + lon: lon, + items: users, + people: true + } + ) + output + end + end + + # in our interface, "users" are known as "people" because it's more human def self.people_grid(body, _page = 1) body.gsub(/[^\>`](\)?\[people\:(\S+)\]/) do |_tagname| diff --git a/app/views/map/_leaflet.html.erb b/app/views/map/_leaflet.html.erb index 50221da0df..d8298c9a3e 100644 --- a/app/views/map/_leaflet.html.erb +++ b/app/views/map/_leaflet.html.erb @@ -3,6 +3,7 @@ #map<%= unique_id %> { width:100%; height:300px; margin: 0; position: relative;}
+<% if defined? people %>

Share your own location on your profile.

<% end %>