From b3511ee5e3148b21a25f3136c3e77870b367263c Mon Sep 17 00:00:00 2001 From: Dave Menninger Date: Thu, 17 Oct 2019 14:55:57 +0000 Subject: [PATCH 01/23] ran `rubocop -c ../../.rubocop_todo.yml -a` --- app/controllers/admin_controller.rb | 54 +++--- app/controllers/application_controller.rb | 30 +-- app/controllers/comment_controller.rb | 24 +-- app/controllers/csvfiles_controller.rb | 13 +- app/controllers/editor_controller.rb | 6 +- app/controllers/features_controller.rb | 14 +- app/controllers/home_controller.rb | 98 +++++----- app/controllers/images_controller.rb | 16 +- app/controllers/legacy_controller.rb | 2 + app/controllers/like_controller.rb | 4 +- app/controllers/map_controller.rb | 24 +-- app/controllers/notes_controller.rb | 80 ++++---- app/controllers/openid_controller.rb | 85 ++++----- app/controllers/questions_controller.rb | 81 ++++---- app/controllers/relationships_controller.rb | 30 +-- app/controllers/search_controller.rb | 26 +-- app/controllers/settings_controller.rb | 2 + app/controllers/stats_controller.rb | 38 ++-- app/controllers/subscription_controller.rb | 54 +++--- app/controllers/tag_controller.rb | 199 ++++++++++---------- app/controllers/talk_controller.rb | 2 + app/controllers/user_sessions_controller.rb | 59 +++--- app/controllers/user_tags_controller.rb | 42 +++-- app/controllers/users_controller.rb | 185 +++++++++--------- app/controllers/wiki_controller.rb | 140 +++++++------- 25 files changed, 679 insertions(+), 629 deletions(-) diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 701a6b2f84..d43fea83a5 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -1,5 +1,7 @@ +# frozen_string_literal: true + class AdminController < ApplicationController - before_action :require_user, only: %i(spam spam_revisions mark_comment_spam publish_comment spam_comments) + before_action :require_user, only: %i[spam spam_revisions mark_comment_spam publish_comment spam_comments] # intended to provide integration tests for assets def assets; end @@ -21,7 +23,7 @@ def promote_admin def promote_moderator @user = User.find params[:id] unless @user.nil? - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) @user.role = 'moderator' @user.save flash[:notice] = "User '" + @user.username + "' is now a moderator." @@ -35,7 +37,7 @@ def promote_moderator def demote_basic @user = User.find params[:id] unless @user.nil? - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) @user.role = 'basic' @user.save flash[:notice] = "User '" + @user.username + "' is no longer a moderator." @@ -56,17 +58,17 @@ def reset_user_password PasswordResetMailer.reset_notify(user, key).deliver_later unless user.nil? # respond the same to both successes and failures; security end flash[:notice] = "#{user.name} should receive an email with instructions on how to reset their password. If they do not, please double check that they are using the email they registered with." - redirect_to URI.parse("/profile/" + user.name).path + redirect_to URI.parse('/profile/' + user.name).path end end def useremail - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) if params[:address] # address was submitted. find the username(s) and return. @address = params[:address] @users = User.where(email: params[:address]) - .where(status: [1, 4]) + .where(status: [1, 4]) end else # unauthorized. instead of return ugly 403, just send somewhere else @@ -75,7 +77,7 @@ def useremail end def spam - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) @nodes = Node.paginate(page: params[:page]) .order('nid DESC') @nodes = if params[:type] == 'wiki' @@ -90,7 +92,7 @@ def spam end def spam_revisions - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) @revisions = Revision.paginate(page: params[:page]) .order('timestamp DESC') .where(status: 0) @@ -104,8 +106,8 @@ def spam_revisions def spam_comments if current_user &. can_moderate? @comments = Comment.paginate(page: params[:page]) - .order('timestamp DESC') - .where(status: 0) + .order('timestamp DESC') + .where(status: 0) render template: 'admin/spam' else flash[:error] = 'Only moderators can moderate comments.' @@ -115,7 +117,7 @@ def spam_comments def mark_spam @node = Node.find params[:id] - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) if @node.status == 1 || @node.status == 4 @node.spam @node.author.ban @@ -138,7 +140,7 @@ def mark_spam def mark_comment_spam @comment = Comment.find params[:id] - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) if @comment.status == 1 || @comment.status == 4 @comment.spam user = @comment.author @@ -146,7 +148,7 @@ def mark_comment_spam AdminMailer.notify_moderators_of_comment_spam(@comment, current_user).deliver_later flash[:notice] = "Comment has been marked as spam and comment author has been banned. You can undo this on the spam moderation page." else - flash[:notice] = "Comment already marked as spam." + flash[:notice] = 'Comment already marked as spam.' end else flash[:error] = 'Only moderators can moderate comments.' @@ -155,7 +157,7 @@ def mark_comment_spam end def publish_comment - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) @comment = Comment.find params[:id] if @comment.status == 1 flash[:notice] = 'Comment already published.' @@ -181,7 +183,7 @@ def publish_comment end def publish - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) @node = Node.find params[:id] if @node.status == 1 flash[:notice] = 'Item already published.' @@ -223,7 +225,7 @@ def mark_spam_revision return end - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) if @revision.status == 1 @revision.spam @revision.author.ban @@ -244,7 +246,7 @@ def mark_spam_revision end def publish_revision - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) @revision = Revision.find params[:vid] @revision.publish @revision.author.unban @@ -262,7 +264,7 @@ def publish_revision def moderate user = User.find params[:id] - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) user.moderate flash[:notice] = 'The user has been moderated.' else @@ -273,7 +275,7 @@ def moderate def unmoderate user = User.find params[:id] - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) user.unmoderate flash[:notice] = 'The user has been unmoderated.' else @@ -284,7 +286,7 @@ def unmoderate def ban user = User.find params[:id] - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) user.ban flash[:notice] = 'The user has been banned.' else @@ -295,7 +297,7 @@ def ban def unban user = User.find params[:id] - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) user.unban flash[:notice] = 'The user has been unbanned.' else @@ -305,7 +307,7 @@ def unban end def users - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) @users = User.order('uid DESC').limit(200) else flash[:error] = 'Only moderators can moderate other users.' @@ -314,7 +316,7 @@ def users end def batch - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) nodes = 0 users = [] params[:ids].split(',').uniq.each do |nid| @@ -352,7 +354,7 @@ def migrate end def queue - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) @notes = Node.where(status: 4) .paginate(page: params[:page]) flash[:warning] = "These are notes requiring moderation. Community moderators may approve or reject them." @@ -376,10 +378,10 @@ def smtp_test s.print "RCPT TO: \n" end if line.include? '250 Accepted' - render plain: "Email gateway OK" + render plain: 'Email gateway OK' s.close_write elsif line.include? '550' - render plain: "Email gateway NOT OK" + render plain: 'Email gateway NOT OK' render status: 500 s.close_write end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 700600aabf..be40617957 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + include ActionView::Helpers::DateHelper # required for time_ago_in_words() class ApplicationController < ActionController::Base protect_from_forgery @@ -28,14 +30,14 @@ def set_sidebar(type = :generic, data = :all, args = {}) @notes = @notes.where('node.nid != (?)', @node.nid) if @node @wikis = Tag.find_pages(data, 10) - @videos = Tag.find_nodes_by_type_with_all_tags(%w(video) + data, 'note', 8) if args[:videos] && data.length > 1 + @videos = Tag.find_nodes_by_type_with_all_tags(%w[video] + data, 'note', 8) if args[:videos] && data.length > 1 @maps = Tag.find_nodes_by_type(data, 'map', 20) else # type is generic # remove "classroom" postings; also switch to an EXCEPT operator in sql, see https://github.com/publiclab/plots2/issues/375 hidden_nids = Node.where(type: :note, status: 1).select { |n| n.has_a_tag('hidden:response') }.collect(&:nid) @notes = if params[:controller] == 'questions' Node.questions - .joins(:revision) + .joins(:revision) else Node.research_notes.joins(:revision).order('node.nid DESC').paginate(page: params[:page]) end @@ -43,7 +45,7 @@ def set_sidebar(type = :generic, data = :all, args = {}) @notes = @notes.where('node.nid != (?)', @node.nid) if @node @notes = @notes.where('node_revisions.status = 1 AND node.nid NOT IN (?)', hidden_nids) unless hidden_nids.empty? - @notes = if logged_in_as(['admin', 'moderator']) + @notes = if logged_in_as(%w[admin moderator]) @notes.where('(node.status = 1 OR node.status = 4)') elsif current_user @notes.where('(node.status = 1 OR (node.status = 4 AND node.uid = ?))', current_user.uid) @@ -52,11 +54,11 @@ def set_sidebar(type = :generic, data = :all, args = {}) end @wikis = Node.order('changed DESC') - .joins(:revision) - .where('node_revisions.status = 1 AND node.status = 1 AND type = "page"') - .limit(10) - .group('node_revisions.nid') - .order('node_revisions.timestamp DESC') + .joins(:revision) + .where('node_revisions.status = 1 AND node.status = 1 AND type = "page"') + .limit(10) + .group('node_revisions.nid') + .order('node_revisions.timestamp DESC') end end @@ -94,9 +96,9 @@ def current_user end - cookies.signed["user_token"] = nil + cookies.signed['user_token'] = nil if @current_user - cookies.signed["user_token"] = @current_user.persistence_token + cookies.signed['user_token'] = @current_user.persistence_token end @current_user end @@ -108,7 +110,7 @@ def require_user redirect_to login_url false end - return current_user + current_user end def require_no_user @@ -142,10 +144,10 @@ def redirect_to_node_path?(node) end def alert_and_redirect_moderated - if @node.author.status == User::Status::BANNED && !(logged_in_as(['admin', 'moderator'])) + if @node.author.status == User::Status::BANNED && !logged_in_as(%w[admin moderator]) flash[:error] = I18n.t('application_controller.author_has_been_banned') redirect_to '/' - elsif @node.status == 4 && (logged_in_as(['admin', 'moderator'])) + elsif @node.status == 4 && logged_in_as(%w[admin moderator]) flash.now[:warning] = "First-time poster #{@node.author.name} submitted this #{time_ago_in_words(@node.created_at)} ago and it has not yet been approved by a moderator. Approve Spam" elsif @node.status == 4 && current_user&.id == @node.author.id && !flash[:first_time_post] flash.now[:warning] = "Thank you for contributing open research, and thanks for your patience while your post is approved by community moderators and we'll email you when it is published. In the meantime, if you have more to contribute, feel free to do so." @@ -153,7 +155,7 @@ def alert_and_redirect_moderated flash.now[:warning] = "This is a draft note. Once you're ready, click Publish Draft to make it public. You can share it with collaborators using this private link #{@node.draft_url(request.base_url)}" elsif @node.status == 3 && (params[:token].nil? || (params[:token].present? && @node.slug.split('token:').last != params[:token])) page_not_found - elsif @node.status != 1 && @node.status != 3 && !(logged_in_as(['admin', 'moderator'])) + elsif @node.status != 1 && @node.status != 3 && !logged_in_as(%w[admin moderator]) # if it's spam or a draft # no notification; don't let people easily fish for existing draft titles; we should try to 404 it redirect_to '/' diff --git a/app/controllers/comment_controller.rb b/app/controllers/comment_controller.rb index fd9c32d0af..9e0261364a 100644 --- a/app/controllers/comment_controller.rb +++ b/app/controllers/comment_controller.rb @@ -1,16 +1,18 @@ +# frozen_string_literal: true + class CommentController < ApplicationController include CommentHelper respond_to :html, :xml, :json - before_action :require_user, only: %i(create update delete) + before_action :require_user, only: %i[create update delete] def index comments = Comment.joins(:node, :user) - .order('timestamp DESC') - .where('node.status = ?', 1) - .paginate(page: params[:page], per_page: 30) + .order('timestamp DESC') + .where('node.status = ?', 1) + .paginate(page: params[:page], per_page: 30) @normal_comments = comments.where('comments.status = 1') - if logged_in_as(%w(admin moderator)) + if logged_in_as(%w[admin moderator]) @moderated_comments = comments.where('comments.status = 4') end @@ -44,7 +46,7 @@ def create "#{tagname}" end tagnames = tagnames.join(', ') - tagnames = " Click to subscribe to updates on these tags or topics: " + tagnames unless tagnames.empty? + tagnames = ' Click to subscribe to updates on these tags or topics: ' + tagnames unless tagnames.empty? flash[:notice] = "Comment posted.#{tagnames}" redirect_to @node.path + '#last' # to last comment end @@ -60,7 +62,7 @@ def create_by_token @node = Node.find params[:id] @user = User.find_by(username: params[:username]) @body = params[:body] - @token = request.headers["HTTP_TOKEN"] + @token = request.headers['HTTP_TOKEN'] if @user && @user.token == @token begin @@ -111,7 +113,7 @@ def delete if current_user.uid == @node.uid || @comment.uid == current_user.uid || - logged_in_as(%w(admin moderator)) + logged_in_as(%w[admin moderator]) if @comment.destroy respond_with do |format| @@ -139,9 +141,9 @@ def delete end def like_comment - @comment_id = params["comment_id"].to_i - @user_id = params["user_id"].to_i - @emoji_type = params["emoji_type"] + @comment_id = params['comment_id'].to_i + @user_id = params['user_id'].to_i + @emoji_type = params['emoji_type'] comment = Comment.where(cid: @comment_id).first like = comment.likes.where(user_id: @user_id, emoji_type: @emoji_type) @is_liked = like.count.positive? diff --git a/app/controllers/csvfiles_controller.rb b/app/controllers/csvfiles_controller.rb index d9631ebc22..ae0858901b 100644 --- a/app/controllers/csvfiles_controller.rb +++ b/app/controllers/csvfiles_controller.rb @@ -1,5 +1,7 @@ +# frozen_string_literal: true + class CsvfilesController < ApplicationController - before_action :require_user, only: %i(delete user_files) + before_action :require_user, only: %i[delete user_files] def setter @csvfile = Csvfile.new( @@ -7,7 +9,7 @@ def setter filetitle: params[:filetitle], filedescription: params[:filedescription], filepath: params[:object], - filename: "file" + Time.now.to_i.to_s, + filename: 'file' + Time.now.to_i.to_s, filestring: params[:filestring] ) render json: @csvfile if @csvfile.save @@ -28,7 +30,7 @@ def add_graphobject filetitle: params[:filetitle], filedescription: params[:filedescription], filepath: params[:object], - filename: "file" + Time.now.to_i.to_s, + filename: 'file' + Time.now.to_i.to_s, filestring: params[:filestring], graphobject: params[:graphobject] ) @@ -38,11 +40,12 @@ def add_graphobject def delete return unless params[:id] && params[:uid].to_i == current_user.uid + file = Csvfile.where(id: params[:id].to_i) if file.destroy(params[:id].to_i) - flash[:notice] = "Deleted the file" + flash[:notice] = 'Deleted the file' else - flash[:error] = "Could not delete the file" + flash[:error] = 'Could not delete the file' end redirect_to "simple-data-grapher/data/#{params[:uid]}" end diff --git a/app/controllers/editor_controller.rb b/app/controllers/editor_controller.rb index 33bfcf468c..c960e142a2 100644 --- a/app/controllers/editor_controller.rb +++ b/app/controllers/editor_controller.rb @@ -1,11 +1,13 @@ +# frozen_string_literal: true + class EditorController < ApplicationController - before_action :require_user, only: %i(post rich legacy editor) + before_action :require_user, only: %i[post rich legacy editor] # main image via URL passed as GET param def legacy # /post/?i=http://myurl.com/image.jpg flash.now[:notice] = "This is the legacy editor. For the new rich editor, click here." - flash.now[:warning] = "Deprecation notice: Legacy editor will be discontinued soon, please use rich/markdown editor." + flash.now[:warning] = 'Deprecation notice: Legacy editor will be discontinued soon, please use rich/markdown editor.' image if params[:i] template if params[:n] && !params[:body] # use another node body as a template if params[:tags]&.include?('question:') diff --git a/app/controllers/features_controller.rb b/app/controllers/features_controller.rb index fe8ec5bf72..e169e4d248 100644 --- a/app/controllers/features_controller.rb +++ b/app/controllers/features_controller.rb @@ -1,10 +1,12 @@ +# frozen_string_literal: true + class FeaturesController < ApplicationController before_action :require_user, except: [:embed] def index - @title = "Features" + @title = 'Features' @features = Node.where(type: 'feature') - .paginate(page: params[:page]) + .paginate(page: params[:page]) end def embed @@ -33,17 +35,17 @@ def create flash[:warning] = 'Only admins may edit features.' redirect_to '/features?_=' + Time.now.to_i.to_s else - @node = Node.new(uid: current_user.id, + @node = Node.new(uid: current_user.id, title: params[:title], - type: 'feature') + type: 'feature') if @node.valid? saved = true @revision = false ActiveRecord::Base.transaction do @node.save! - @revision = @node.new_revision(uid: current_user.id, + @revision = @node.new_revision(uid: current_user.id, title: params[:title], - body: params[:body]) + body: params[:body]) if @revision.valid? @revision.save! @node.vid = @revision.vid diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 7aefcbb6dd..44e30398c4 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -1,5 +1,7 @@ +# frozen_string_literal: true + class HomeController < ApplicationController - before_action :require_user, only: %i(subscriptions nearby) + before_action :require_user, only: %i[subscriptions nearby] def home if current_user @@ -22,21 +24,21 @@ def front # used in front and home methods only def blog @notes = Node.where(status: 1, type: 'note') - .includes(:revision, :tag) - .references(:term_data, :node_revisions) - .where('term_data.name = ?', 'blog') - .order('created DESC') - .paginate(page: params[:page], per_page: 8) + .includes(:revision, :tag) + .references(:term_data, :node_revisions) + .where('term_data.name = ?', 'blog') + .order('created DESC') + .paginate(page: params[:page], per_page: 8) end def dashboard if current_user - @note_count = Node.select(%i(created type status)) - .where(type: 'note', status: 1, created: Time.now.to_i - 1.weeks.to_i..Time.now.to_i) - .count(:all) + @note_count = Node.select(%i[created type status]) + .where(type: 'note', status: 1, created: Time.now.to_i - 1.weeks.to_i..Time.now.to_i) + .count(:all) @wiki_count = Revision.select(:timestamp) - .where(timestamp: Time.now.to_i - 1.weeks.to_i..Time.now.to_i) - .count + .where(timestamp: Time.now.to_i - 1.weeks.to_i..Time.now.to_i) + .count @user_note_count = Node.where(type: 'note', status: 1, uid: current_user.uid).count @activity, @blog, @notes, @wikis, @revisions, @comments, @answer_comments = activity render template: 'dashboard/dashboard' @@ -49,12 +51,12 @@ def research if current_user redirect_to '/dashboard' else - @note_count = Node.select(%i(created type status)) - .where(type: 'note', status: 1, created: Time.now.to_i - 1.weeks.to_i..Time.now.to_i) - .count(:all) + @note_count = Node.select(%i[created type status]) + .where(type: 'note', status: 1, created: Time.now.to_i - 1.weeks.to_i..Time.now.to_i) + .count(:all) @wiki_count = Revision.select(:timestamp) - .where(timestamp: Time.now.to_i - 1.weeks.to_i..Time.now.to_i) - .count + .where(timestamp: Time.now.to_i - 1.weeks.to_i..Time.now.to_i) + .count @activity, @blog, @notes, @wikis, @revisions, @comments, @answer_comments = activity render template: 'dashboard/dashboard' @title = I18n.t('home_controller.community_research') @@ -67,34 +69,34 @@ def activity blog = Tag.find_nodes_by_type('blog', 'note', 1).first # remove "classroom" postings; also switch to an EXCEPT operator in sql, see https://github.com/publiclab/plots2/issues/375 hidden_nids = Node.joins(:node_tag) - .joins('LEFT OUTER JOIN term_data ON term_data.tid = community_tags.tid') - .select('node.*, term_data.*, community_tags.*') - .where(type: 'note', status: 1) - .where('term_data.name = (?)', 'hidden:response') - .collect(&:nid) + .joins('LEFT OUTER JOIN term_data ON term_data.tid = community_tags.tid') + .select('node.*, term_data.*, community_tags.*') + .where(type: 'note', status: 1) + .where('term_data.name = (?)', 'hidden:response') + .collect(&:nid) notes = Node.where(type: 'note') - .where('node.nid NOT IN (?)', hidden_nids + [0]) # in case hidden_nids is empty - .order('nid DESC') - .page(params[:page]) + .where('node.nid NOT IN (?)', hidden_nids + [0]) # in case hidden_nids is empty + .order('nid DESC') + .page(params[:page]) notes = notes.where('nid != (?)', blog.nid) if blog comments = Comment.joins(:node, :user) - .order('timestamp DESC') - .where('timestamp - node.created > ?', 86_400) # don't report edits within 1 day of page creation - .where('node.status = ?', 1) - .page(params[:page]) - .group(['title', 'comments.cid']) # ONLY_FULL_GROUP_BY, issue #3120 + .order('timestamp DESC') + .where('timestamp - node.created > ?', 86_400) # don't report edits within 1 day of page creation + .where('node.status = ?', 1) + .page(params[:page]) + .group(['title', 'comments.cid']) # ONLY_FULL_GROUP_BY, issue #3120 - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) notes = notes.where('(node.status = 1 OR node.status = 4 OR node.status = 3)') comments = comments.where('comments.status = 1 OR comments.status = 4') elsif current_user coauthor_nids = Node.joins(:node_tag) - .joins('LEFT OUTER JOIN term_data ON term_data.tid = community_tags.tid') - .select('node.*, term_data.*, community_tags.*') - .where(type: 'note', status: 3) - .where('term_data.name = (?)', "with:#{current_user.username}") - .collect(&:nid) + .joins('LEFT OUTER JOIN term_data ON term_data.tid = community_tags.tid') + .select('node.*, term_data.*, community_tags.*') + .where(type: 'note', status: 3) + .where('term_data.name = (?)', "with:#{current_user.username}") + .collect(&:nid) notes = notes.where('(node.nid IN (?) OR node.status = 1 OR ((node.status = 3 OR node.status = 4) AND node.uid = ?))', coauthor_nids, current_user.uid) comments = comments.where('comments.status = 1 OR (comments.status = 4 AND comments.uid = ?)', current_user.uid) else @@ -106,16 +108,16 @@ def activity # include revisions, then mix with new pages: wikis = Node.where(type: 'page', status: 1) - .order('nid DESC') - .limit(10) + .order('nid DESC') + .limit(10) revisions = Revision.joins(:node) - .order('timestamp DESC') - .where('type = (?)', 'page') - .where('node.status = 1') - .where('node_revisions.status = 1') - .where('timestamp - node.created > ?', 300) # don't report edits within 5 mins of page creation - .limit(10) - .group(['node.title', 'node.nid', 'node_revisions.vid']) # ONLY_FULL_GROUP_BY, issue #3120 + .order('timestamp DESC') + .where('type = (?)', 'page') + .where('node.status = 1') + .where('node_revisions.status = 1') + .where('timestamp - node.created > ?', 300) # don't report edits within 5 mins of page creation + .limit(10) + .group(['node.title', 'node.nid', 'node_revisions.vid']) # ONLY_FULL_GROUP_BY, issue #3120 # group by day: http://stackoverflow.com/questions/5970938/group-by-day-from-timestamp revisions = revisions.group('DATE(FROM_UNIXTIME(timestamp))') if Rails.env == 'production' revisions = revisions.to_a # ensure it can be serialized for caching @@ -126,10 +128,10 @@ def activity comments = comments.group('DATE(FROM_UNIXTIME(timestamp))') if Rails.env == 'production' comments = comments.to_a # ensure it can be serialized for caching answer_comments = Comment.joins(:answer, :user) - .order('timestamp DESC') - .where('timestamp - answers.created_at > ?', 86_400) - .limit(20) - .group(['answers.id', 'comments.cid']) # ONLY_FULL_GROUP_BY, issue #3120 + .order('timestamp DESC') + .where('timestamp - answers.created_at > ?', 86_400) + .limit(20) + .group(['answers.id', 'comments.cid']) # ONLY_FULL_GROUP_BY, issue #3120 answer_comments = answer_comments.group('DATE(FROM_UNIXTIME(timestamp))') if Rails.env == 'production' answer_comments = answer_comments.to_a # ensure it can be serialized for caching activity = (notes + wikis + comments + answer_comments).sort_by(&:created_at).reverse diff --git a/app/controllers/images_controller.rb b/app/controllers/images_controller.rb index 62810f9a3d..7ecc766853 100644 --- a/app/controllers/images_controller.rb +++ b/app/controllers/images_controller.rb @@ -1,17 +1,19 @@ +# frozen_string_literal: true + require 'open-uri' class ImagesController < ApplicationController respond_to :html, :xml, :json - before_action :require_user, only: %i(create new update delete) + before_action :require_user, only: %i[create new update delete] def shortlink params[:size] = params[:size] || params[:s] params[:size] = params[:size] || :large - params[:size] = :thumb if (params[:size].to_s == "t") - params[:size] = :thumb if (params[:size].to_s == "thumbnail") - params[:size] = :medium if (params[:size].to_s == "m") - params[:size] = :large if (params[:size].to_s == "l") - params[:size] = :original if (params[:size].to_s == "o") + params[:size] = :thumb if params[:size].to_s == 't' + params[:size] = :thumb if params[:size].to_s == 'thumbnail' + params[:size] = :medium if params[:size].to_s == 'm' + params[:size] = :large if params[:size].to_s == 'l' + params[:size] = :original if params[:size].to_s == 'o' image = Image.find(params[:id]) redirect_to URI.parse(image.path(params[:size])).path end @@ -43,7 +45,7 @@ def create href: @image.shortlink, # Woofmark/PublicLab.Editor title: @image.photo_file_name, results: [{ # Woofmark/PublicLab.Editor - href: @image.shortlink + "." + @image.filetype, + href: @image.shortlink + '.' + @image.filetype, title: @image.photo_file_name }] } diff --git a/app/controllers/legacy_controller.rb b/app/controllers/legacy_controller.rb index 646f4ad333..feec595e04 100644 --- a/app/controllers/legacy_controller.rb +++ b/app/controllers/legacy_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class LegacyController < ApplicationController def notes if params[:id] diff --git a/app/controllers/like_controller.rb b/app/controllers/like_controller.rb index bf29b31ce0..8de54b9a07 100644 --- a/app/controllers/like_controller.rb +++ b/app/controllers/like_controller.rb @@ -1,6 +1,8 @@ +# frozen_string_literal: true + class LikeController < ApplicationController respond_to :html, :xml, :json - before_action :require_user, only: %i(create delete) + before_action :require_user, only: %i[create delete] # list all recent likes def index diff --git a/app/controllers/map_controller.rb b/app/controllers/map_controller.rb index 2d4ad29c62..1fa364f21a 100644 --- a/app/controllers/map_controller.rb +++ b/app/controllers/map_controller.rb @@ -1,20 +1,22 @@ +# frozen_string_literal: true + class MapController < ApplicationController def index @title = 'Maps' @nodes = Node.paginate(page: params[:page], per_page: 32) - .order('nid DESC') - .where(type: 'map', status: 1) + .order('nid DESC') + .where(type: 'map', status: 1) @map_lat = nil @map_lon = nil - if current_user&.has_power_tag("lat") && current_user&.has_power_tag("lon") - @map_lat = current_user.get_value_of_power_tag("lat").to_f - @map_lon = current_user.get_value_of_power_tag("lon").to_f + if current_user&.has_power_tag('lat') && current_user&.has_power_tag('lon') + @map_lat = current_user.get_value_of_power_tag('lat').to_f + @map_lon = current_user.get_value_of_power_tag('lon').to_f end # I'm not sure if this is actually eager loading the tags... @maps = Node.joins(:tag) - .where('type = "map" AND status = 1 AND (term_data.name LIKE ? OR term_data.name LIKE ?)', 'lat:%', 'lon:%') - .distinct + .where('type = "map" AND status = 1 AND (term_data.name LIKE ? OR term_data.name LIKE ?)', 'lat:%', 'lon:%') + .distinct # This is supposed to eager load the url_aliases, and seems to run, but doesn't actually eager load them...? # @maps = Node.select("node.*,url_alias.dst AS dst").joins(:tag).where('type = "map" AND status = 1 AND (term_data.name LIKE ? OR term_data.name LIKE ?)', 'lat:%', 'lon:%').joins("INNER JOIN url_alias ON url_alias.src = CONCAT('node/',node.nid)") @@ -75,9 +77,9 @@ def update end end - %i(lat lon).each do |coordinate| + %i[lat lon].each do |coordinate| if coordinate_name = coordinate.to_s + ':' + @node.power_tag(coordinate.to_s) - existing_coordinate_node_tag = NodeTag.where(nid: @node.id).joins(:tag).where("name = ?", coordinate_name).first + existing_coordinate_node_tag = NodeTag.where(nid: @node.id).joins(:tag).where('name = ?', coordinate_name).first existing_coordinate_node_tag.delete end @node.add_tag(coordinate.to_s + ':' + params[coordinate], current_user) @@ -212,8 +214,8 @@ def tag @tagnames = params[:id].split(',') nids = Tag.find_nodes_by_type(params[:id], 'map', 20).collect(&:nid) @notes = Node.paginate(page: params[:page]) - .where('nid in (?)', nids) - .order('nid DESC') + .where('nid in (?)', nids) + .order('nid DESC') @title = @tagnames.join(', ') if @tagnames @unpaginated = true diff --git a/app/controllers/notes_controller.rb b/app/controllers/notes_controller.rb index 6fb956b231..d081174795 100644 --- a/app/controllers/notes_controller.rb +++ b/app/controllers/notes_controller.rb @@ -1,7 +1,9 @@ +# frozen_string_literal: true + class NotesController < ApplicationController respond_to :html - before_action :require_user, only: %i(create edit update delete rsvp publish_draft) - before_action :set_node, only: %i(show) + before_action :require_user, only: %i[create edit update delete rsvp publish_draft] + before_action :set_node, only: %i[show] def index @title = I18n.t('notes_controller.research_notes') @@ -17,14 +19,14 @@ def places @notes = Node.joins('LEFT OUTER JOIN node_revisions ON node_revisions.nid = node.nid LEFT OUTER JOIN community_tags ON community_tags.nid = node.nid LEFT OUTER JOIN term_data ON term_data.tid = community_tags.tid') - .select('*, max(node_revisions.timestamp)') - .where(status: 1, type: %w(page place)) - .includes(:revision, :tag) - .references(:term_data) - .where('term_data.name = ?', 'chapter') - .group('node.nid') - .order(Arel.sql('max(node_revisions.timestamp) DESC, node.nid')) - .paginate(page: params[:page], per_page: 24) + .select('*, max(node_revisions.timestamp)') + .where(status: 1, type: %w[page place]) + .includes(:revision, :tag) + .references(:term_data) + .where('term_data.name = ?', 'chapter') + .group('node.nid') + .order(Arel.sql('max(node_revisions.timestamp) DESC, node.nid')) + .paginate(page: params[:page], per_page: 24) # Arel.sql is used to remove a Deprecation warning while updating to rails 5.2. @@ -54,7 +56,7 @@ def show redirect_to @node.path(:question) return end - + alert_and_redirect_moderated redirect_power_tag_redirect @@ -85,13 +87,13 @@ def create saved, @node, @revision = new_note - if params[:draft] == "true" && current_user.first_time_poster - flash[:notice] = "First-time users are not eligible to create a draft." + if params[:draft] == 'true' && current_user.first_time_poster + flash[:notice] = 'First-time users are not eligible to create a draft.' redirect_to '/' return - elsif params[:draft] == "true" + elsif params[:draft] == 'true' token = SecureRandom.urlsafe_base64(16, false) - @node.slug = @node.slug + " token:" + token + @node.slug = @node.slug + ' token:' + token @node.save! end @@ -119,7 +121,7 @@ def create thanks_for_contribution = I18n.t('notes_controller.thank_you_for_contribution').html_safe flash[:notice] = thanks_for_contribution - elsif params[:draft] != "true" + elsif params[:draft] != 'true' question_note = I18n.t('notes_controller.question_note_published').html_safe research_note = I18n.t('notes_controller.research_note_published').html_safe @@ -262,8 +264,8 @@ def author @user = User.find_by(name: params[:id]) @title = @user.name @notes = Node.paginate(page: params[:page], per_page: 24) - .order('nid DESC') - .where(type: 'note', status: 1, uid: @user.uid) + .order('nid DESC') + .where(type: 'note', status: 1, uid: @user.uid) render template: 'notes/index' end @@ -281,13 +283,13 @@ def author_topic def liked @title = I18n.t('notes_controller.highly_liked_research_notes') @wikis = Node.limit(10) - .where(type: 'page', status: 1) - .order('nid DESC') + .where(type: 'page', status: 1) + .order('nid DESC') @notes = Node.research_notes - .where(status: 1) - .limit(20) - .order('nid DESC') + .where(status: 1) + .limit(20) + .order('nid DESC') @unpaginated = true render template: 'notes/index' end @@ -295,8 +297,8 @@ def liked def recent @title = I18n.t('notes_controller.recent_research_notes') @wikis = Node.limit(10) - .where(type: 'page', status: 1) - .order('nid DESC') + .where(type: 'page', status: 1) + .order('nid DESC') @notes = Node.where(type: 'note', status: 1, created: Time.now.to_i - 1.weeks.to_i..Time.now.to_i) @unpaginated = true render template: 'notes/index' @@ -306,12 +308,12 @@ def recent def popular @title = I18n.t('notes_controller.popular_research_notes') @wikis = Node.limit(10) - .where(type: 'page', status: 1) - .order('nid DESC') + .where(type: 'page', status: 1) + .order('nid DESC') @notes = Node.research_notes - .limit(20) - .where(status: 1) - .order('views DESC') + .limit(20) + .where(status: 1) + .order('views DESC') @unpaginated = true render template: 'notes/index' end @@ -320,12 +322,12 @@ def rss limit = 20 @notes = if params[:moderators] Node.limit(limit) - .order('nid DESC') - .where('type = ? AND status = 4', 'note') + .order('nid DESC') + .where('type = ? AND status = 4', 'note') else Node.limit(limit) - .order('nid DESC') - .where('type = ? AND status = 1', 'note') + .order('nid DESC') + .where('type = ? AND status = 1', 'note') end respond_to do |format| format.rss do @@ -338,8 +340,8 @@ def rss def liked_rss @notes = Node.limit(20) - .order('created DESC') - .where('type = ? AND status = 1 AND cached_likes > 0', 'note') + .order('created DESC') + .where('type = ? AND status = 1 AND cached_likes > 0', 'note') respond_to do |format| format.rss do render layout: false, template: 'notes/rss' @@ -362,10 +364,10 @@ def update_title node = Node.find params[:id].to_i unless current_user && current_user == node.author flash.keep[:error] = I18n.t('notes_controller.author_can_edit_note') - return redirect_to URI.parse(node.path).path + "#comments" + return redirect_to URI.parse(node.path).path + '#comments' end node.update(title: params[:title]) - redirect_to URI.parse(node.path).path + "#comments" + redirect_to URI.parse(node.path).path + '#comments' end def publish_draft @@ -412,7 +414,7 @@ def new_note end def not_draft_and_user_is_first_time_poster? - params[:draft] != "true" && current_user.first_time_poster + params[:draft] != 'true' && current_user.first_time_poster end def show_banned_flash diff --git a/app/controllers/openid_controller.rb b/app/controllers/openid_controller.rb index 968aae67c0..ebddec583a 100644 --- a/app/controllers/openid_controller.rb +++ b/app/controllers/openid_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'pathname' require 'openid' @@ -88,56 +90,55 @@ def index if oidreq - oidresp = nil if oidreq.is_a?(CheckIDRequest) - identity = oidreq.identity - - if oidreq.id_select - if oidreq.immediate - oidresp = oidreq.answer(false) - elsif session[:username] - # The user hasn't logged in. - # show_decision_page(oidreq) # this doesnt make sense... it was in the example though - session[:openid_return_to] = request.env['ORIGINAL_FULLPATH'] - if provider - # provider based authentication - redirect_to '/auth/' + provider - else - # form based authentication - redirect_to '/login' - end + identity = oidreq.identity + + if oidreq.id_select + if oidreq.immediate + oidresp = oidreq.answer(false) + elsif session[:username] + # The user hasn't logged in. + # show_decision_page(oidreq) # this doesnt make sense... it was in the example though + session[:openid_return_to] = request.env['ORIGINAL_FULLPATH'] + if provider + # provider based authentication + redirect_to '/auth/' + provider else - # Else, set the identity to the one the user is using. - identity = url_for_user + # form based authentication + redirect_to '/login' end - + else + # Else, set the identity to the one the user is using. + identity = url_for_user end - if oidresp - nil - elsif is_authorized(identity, oidreq.trust_root) - oidresp = oidreq.answer(true, nil, identity) - - # add the sreg response if requested - add_sreg(oidreq, oidresp) - # ditto pape - add_pape(oidreq, oidresp) - - elsif oidreq.immediate - server_url = url_for action: 'index' - oidresp = oidreq.answer(false, server_url) + end - else - session[:last_oidreq] = oidreq - @oidreq = oidreq - redirect_to action: 'decision' - return - end + if oidresp + nil + elsif is_authorized(identity, oidreq.trust_root) + oidresp = oidreq.answer(true, nil, identity) + + # add the sreg response if requested + add_sreg(oidreq, oidresp) + # ditto pape + add_pape(oidreq, oidresp) + + elsif oidreq.immediate + server_url = url_for action: 'index' + oidresp = oidreq.answer(false, server_url) + + else + session[:last_oidreq] = oidreq + @oidreq = oidreq + redirect_to action: 'decision' + return + end else - oidresp = server.handle_request(oidreq) + oidresp = server.handle_request(oidreq) end render_response(oidresp) @@ -246,7 +247,7 @@ def decision oidresp = oidreq.answer(true, nil, identity) add_sreg(oidreq, oidresp) add_pape(oidreq, oidresp) - return render_response(oidresp) + render_response(oidresp) end protected @@ -308,7 +309,7 @@ def add_sreg(oidreq, oidresp) sreg_data = { 'nickname' => current_user.username, # session[:username], 'email' => current_user.email, - 'fullname' => "status=" + current_user.status.to_s + ":role=" + current_user.role # fullname contains both status and role + 'fullname' => 'status=' + current_user.status.to_s + ':role=' + current_user.role # fullname contains both status and role } sregresp = OpenID::SReg::Response.extract_response(sregreq, sreg_data) diff --git a/app/controllers/questions_controller.rb b/app/controllers/questions_controller.rb index c42cd2b2c4..9d29b6f072 100644 --- a/app/controllers/questions_controller.rb +++ b/app/controllers/questions_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class QuestionsController < ApplicationController private @@ -6,9 +8,9 @@ def filter_questions_by_tag(questions, tagnames) tagnames = tagnames.split(',') nids = questions.collect(&:nid) questions = Node.where(status: 1, type: 'note') - .joins(:tag) - .where('node.nid IN (?)', nids) - .group('node.nid') + .joins(:tag) + .where('node.nid IN (?)', nids) + .group('node.nid') if !tagnames.empty? questions.where('term_data.name IN (?)', tagnames) else @@ -22,30 +24,29 @@ def index @title = 'Questions and Answers' set_sidebar @questions = Node.questions - .where(status: 1) - .order('node.nid DESC') - .paginate(page: params[:page], per_page: 24) + .where(status: 1) + .order('node.nid DESC') + .paginate(page: params[:page], per_page: 24) end def index_shadow @title = 'Questions and Answers' @questions = Node.questions - .where(status: 1) - .order('node.nid DESC') - .paginate(page: params[:page], per_page: 24) - + .where(status: 1) + .order('node.nid DESC') + .paginate(page: params[:page], per_page: 24) + @populartitle = 'Popular Questions' @popularquestions = Node.questions - .where(status: 1) + .where(status: 1) @popularquestions = filter_questions_by_tag(@questions, params[:tagnames]) - .order('views DESC') - .limit(20) + .order('views DESC') + .limit(20) @popularwikis = Node.limit(10) - .where(type: 'page', status: 1) - .order('nid DESC') + .where(type: 'page', status: 1) + .order('nid DESC') @unpaginated = true - end # a form for new questions, at /questions/new @@ -58,7 +59,7 @@ def new end if current_user.nil? redirect_to new_user_session_path(return_to: request.path) - flash[:notice] = "Your question is important and we want to hear from you! Please log in or sign up to post a question" + flash[:notice] = 'Your question is important and we want to hear from you! Please log in or sign up to post a question' else if params[:legacy] render 'editor/question' @@ -94,28 +95,28 @@ def show def answered @title = 'Recently Commented' @questions = Node.questions - .where(status: 1) + .where(status: 1) @questions = filter_questions_by_tag(@questions, params[:tagnames]) - .joins(:comments) - .order('comments.timestamp DESC') - .group('node.nid') - .paginate(page: params[:page], per_page: 24) + .joins(:comments) + .order('comments.timestamp DESC') + .group('node.nid') + .paginate(page: params[:page], per_page: 24) @wikis = Node.limit(10) - .where(type: 'page', status: 1) - .order('nid DESC') + .where(type: 'page', status: 1) + .order('nid DESC') render template: 'questions/index' end def unanswered @title = 'Unanswered questions' @questions = Node.questions - .where(status: 1) - .includes(:answers) - .references(:answers) - .where(answers: { id: nil }) - .order('node.nid DESC') - .group('node.nid') - .paginate(page: params[:page], per_page: 24) + .where(status: 1) + .includes(:answers) + .references(:answers) + .where(answers: { id: nil }) + .order('node.nid DESC') + .group('node.nid') + .paginate(page: params[:page], per_page: 24) render template: 'questions/index' end @@ -131,14 +132,14 @@ def shortlink def popular @title = 'Popular Questions' @questions = Node.questions - .where(status: 1) + .where(status: 1) @questions = filter_questions_by_tag(@questions, params[:tagnames]) - .order('views DESC') - .limit(20) + .order('views DESC') + .limit(20) @wikis = Node.limit(10) - .where(type: 'page', status: 1) - .order('nid DESC') + .where(type: 'page', status: 1) + .order('nid DESC') @unpaginated = true render template: 'questions/index' end @@ -147,12 +148,12 @@ def liked @title = 'Highly liked Questions' @questions = Node.questions.where(status: 1) @questions = filter_questions_by_tag(@questions, params[:tagnames]) - .order('cached_likes DESC') - .limit(20) + .order('cached_likes DESC') + .limit(20) @wikis = Node.limit(10) - .where(type: 'page', status: 1) - .order('nid DESC') + .where(type: 'page', status: 1) + .order('nid DESC') @unpaginated = true render template: 'questions/index' end diff --git a/app/controllers/relationships_controller.rb b/app/controllers/relationships_controller.rb index 37475c7eb6..20b81e2266 100644 --- a/app/controllers/relationships_controller.rb +++ b/app/controllers/relationships_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RelationshipsController < ApplicationController before_action :require_user @@ -6,14 +8,14 @@ def create respond_to do |format| if !current_user.following?(user) current_user.follow(user) - format.html { redirect_to URI.parse(request.referer || "/").path, notice: "You have started following " + user.username } - format.js { render "create", locals: { following: true, profile_user: user } } + format.html { redirect_to URI.parse(request.referer || '/').path, notice: 'You have started following ' + user.username } + format.js { render 'create', locals: { following: true, profile_user: user } } else - format.html { - flash[:error] = "Error in following user" - redirect_to URI.parse(request.referer || "/").path - } - format.js { render "create", locals: { following: false, profile_user: user } } + format.html do + flash[:error] = 'Error in following user' + redirect_to URI.parse(request.referer || '/').path + end + format.js { render 'create', locals: { following: false, profile_user: user } } end end end @@ -24,14 +26,14 @@ def destroy respond_to do |format| if !relation.nil? current_user.unfollow(user) - format.html { redirect_to URI.parse(request.referer || "/").path, notice: "You have unfollowed " + user.username } - format.js { render "destroy", locals: { unfollowing: true, profile_user: user } } + format.html { redirect_to URI.parse(request.referer || '/').path, notice: 'You have unfollowed ' + user.username } + format.js { render 'destroy', locals: { unfollowing: true, profile_user: user } } else - format.html { - flash[:error] = "Error in unfollowing user" - redirect_to URI.parse(request.referer || "/").path - } - format.js { render "destroy", locals: { unfollowing: false, profile_user: user } } + format.html do + flash[:error] = 'Error in unfollowing user' + redirect_to URI.parse(request.referer || '/').path + end + format.js { render 'destroy', locals: { unfollowing: false, profile_user: user } } end end end diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index b2abc405f9..73ec879f6b 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -1,10 +1,12 @@ +# frozen_string_literal: true + class SearchController < ApplicationController - before_action :set_search_criteria, except: %i(notes wikis) + before_action :set_search_criteria, except: %i[notes wikis] def new; end def google - @title = "Search" + @title = 'Search' end # a route to convert /search/_____ to /search?q=______ style search queries @@ -13,20 +15,20 @@ def google_redirect end def notes - @title = "Search notes" + @title = 'Search notes' @notes = SearchService.new.search_notes(params[:query], 15, params[:order].to_s.to_sym, params[:type].to_s.to_sym) - .paginate(page: params[:page], per_page: 24) + .paginate(page: params[:page], per_page: 24) end def wikis - @title = "Search wikis" + @title = 'Search wikis' @wikis = SearchService.new.search_wikis(params[:query], 15, params[:order].to_s.to_sym, params[:type].to_s.to_sym) - .paginate(page: params[:page], per_page: 24) + .paginate(page: params[:page], per_page: 24) end def profiles - @title = "Search profiles" - @search_criteria.sort_by = "recent" + @title = 'Search profiles' + @search_criteria.sort_by = 'recent' if params[:query] @profiles = ExecuteSearch.new.by(:profiles, @search_criteria).paginate(page: params[:page], per_page: 20) else @@ -37,23 +39,23 @@ def profiles end def questions - @title = "Search questions" + @title = 'Search questions' @questions = ExecuteSearch.new.by(:questions, @search_criteria).paginate(page: params[:page], per_page: 20) end def places - @title = "Search maps" + @title = 'Search maps' # it's called nodes because the map/_maps partials expects nodes objects @nodes = ExecuteSearch.new.by(:places, @search_criteria).paginate(page: params[:page], per_page: 20) end def tags - @title = "Search tags" + @title = 'Search tags' @tags = ExecuteSearch.new.by(:tags, @search_criteria).paginate(page: params[:page], per_page: 20) end def all_content - @title = "Search all content" + @title = 'Search all content' @nodes = ExecuteSearch.new.by(:all, @search_criteria) @wikis = wikis @notes = notes diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index d6a80a0603..b02e563a23 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class SettingsController < ApplicationController # Check the locale was passed and if it is a valid one, set the locale in cookies def change_locale diff --git a/app/controllers/stats_controller.rb b/app/controllers/stats_controller.rb index 7f5c48a6a6..03d2e3ee29 100644 --- a/app/controllers/stats_controller.rb +++ b/app/controllers/stats_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StatsController < ApplicationController def subscriptions @tags = {} @@ -9,7 +11,7 @@ def subscriptions end def range - flash.now[:notice] = "Data is cached and recalculated daily" + flash.now[:notice] = 'Data is cached and recalculated daily' if params[:options].present? params[:start] = Time.now - to_keyword(params[:options]) params[:end] = Time.now @@ -17,21 +19,21 @@ def range @start = start @end = fin Rails.cache.fetch("range-#{@start.to_i}-#{@end.to_i}", expires_in: 1.day) do - @notes = Node.published.select(%i(created type)) - .where(type: 'note', created: @start.to_i..@end.to_i) - .size + @notes = Node.published.select(%i[created type]) + .where(type: 'note', created: @start.to_i..@end.to_i) + .size @wikis = Revision.published.select(:timestamp) - .where(timestamp: @start.to_i..@end.to_i) - .size - @notes # because notes each have one revision + .where(timestamp: @start.to_i..@end.to_i) + .size - @notes # because notes each have one revision @people = User.where(created_at: @start..@end).where(status: 1) - .size + .size @answers = Answer.where(created_at: @start..@end) - .size + .size @comments = Comment.select(:status, :timestamp) - .where(status: 1, timestamp: @start.to_i..@end.to_i) - .size + .where(status: 1, timestamp: @start.to_i..@end.to_i) + .size @questions = Node.published.questions.where(created: @start.to_i..@end.to_i) - .size + .size @contributors = User.contributor_count_for(@start, @end) @popular_tags = Tag.nodes_frequency(@start, @end) end @@ -40,11 +42,11 @@ def range def index range if @start > @end - flash.now[:warning] = "Start date must come before end date" + flash.now[:warning] = 'Start date must come before end date' end @title = 'Stats' - flash.now[:notice] = "Data is cached and recalculated daily" + flash.now[:notice] = 'Data is cached and recalculated daily' Rails.cache.fetch("stats-index-#{@start.to_i}-#{@end.to_i}", expires_in: 1.day) do @weekly_notes = Node.past_week.select(:type).where(type: 'note').size @weekly_wikis = Revision.past_week.size @@ -76,7 +78,7 @@ def index @all_notes = nids.uniq.length @all_contributors = users.uniq.length end - Rails.cache.fetch("total-contributors-all-time", expires_in: 1.weeks) do + Rails.cache.fetch('total-contributors-all-time', expires_in: 1.weeks) do @all_time_contributors = User.count_all_time_contributor end end @@ -91,8 +93,8 @@ def wikis def users data = User.where(created_at: start..fin) - .where(status: 1) - .select(:username, :role, :bio, :photo_file_name, :id, :created_at) + .where(status: 1) + .select(:username, :role, :bio, :photo_file_name, :id, :created_at) format(data, 'users') end @@ -123,8 +125,8 @@ def node_tags def export_as_json(type) data = Node.published - .where(type: type, created: start.to_i..fin.to_i) - .all + .where(type: type, created: start.to_i..fin.to_i) + .all format(data, type) end diff --git a/app/controllers/subscription_controller.rb b/app/controllers/subscription_controller.rb index d7b1ce5f92..0360ed4615 100644 --- a/app/controllers/subscription_controller.rb +++ b/app/controllers/subscription_controller.rb @@ -1,10 +1,12 @@ +# frozen_string_literal: true + class SubscriptionController < ApplicationController respond_to :html, :xml, :json - before_action :require_user, only: %i(create delete index digest) + before_action :require_user, only: %i[create delete index digest] def index - @title = "Subscriptions" - render template: "home/subscriptions" + @title = 'Subscriptions' + render template: 'home/subscriptions' end # return a count of subscriptions for a given tag @@ -15,7 +17,7 @@ def tag_count # for the current user, return whether is presently liked or not def followed # may be trouble: there can be multiple tags with the same name, no? We can eliminate that possibility in a migration if so. - result = TagSelection.find_by_user_id_and_tid(current_user.uid, params[:id]) if params[:type] == "tag" + result = TagSelection.find_by_user_id_and_tid(current_user.uid, params[:id]) if params[:type] == 'tag' result = if result.nil? false else @@ -26,7 +28,7 @@ def followed # for the current user, register as liking the given tag def add - if current_user && params[:type] == "tag" + if current_user && params[:type] == 'tag' tag = Tag.find_by(name: params[:name]) @@ -34,7 +36,7 @@ def add tag = Tag.new( vid: 3, name: params[:name], - description: "", + description: '', weight: 0 ) @@ -51,11 +53,11 @@ def add format.html do flash[:error] = "You are already subscribed to '#{params[:name]}'" - redirect_to "/subscriptions" + "?_=" + Time.now.to_i.to_s + redirect_to '/subscriptions' + '?_=' + Time.now.to_i.to_s end format.json do - message = "You already follow this user!" + message = 'You already follow this user!' render json: { status: :precondition_failed, error: message } end @@ -68,26 +70,26 @@ def add # status = "200" else flash[:notice] = "You are now following '#{params[:name]}'." - redirect_to "/subscriptions" + "?_=" + Time.now.to_i.to_s + redirect_to '/subscriptions' + '?_=' + Time.now.to_i.to_s end end end else flash[:warning] = "You must be logged in to subscribe for email updates; please log in or create an account." - redirect_to "/tag/" + params[:name] + redirect_to '/tag/' + params[:name] end end # for the current user, remove the like from the given tag def delete # assume tag, for now - if params[:type] == "tag" + if params[:type] == 'tag' id = Tag.find_by(name: params[:name]).tid end if id.nil? flash[:error] = "You are not subscribed to '#{params[:name]}'" - redirect_to "/subscriptions" + "?_=" + Time.now.to_i.to_s + redirect_to '/subscriptions' + '?_=' + Time.now.to_i.to_s else if !set_following(false, params[:type], id) # should return false if result is that following == false respond_with do |format| @@ -96,29 +98,29 @@ def delete render json: true else flash[:notice] = "You have stopped following '#{params[:name]}'." - redirect_to "/subscriptions" + "?_=" + Time.now.to_i.to_s + redirect_to '/subscriptions' + '?_=' + Time.now.to_i.to_s end end end else - flash[:error] = "Something went wrong!" # silly - redirect_to "/subscriptions" + "?_=" + Time.now.to_i.to_s + flash[:error] = 'Something went wrong!' # silly + redirect_to '/subscriptions' + '?_=' + Time.now.to_i.to_s end end end def digest @wikis = current_user.content_followed_in_period(1.week.ago, Time.now) - .paginate(page: params[:page], per_page: 100) + .paginate(page: params[:page], per_page: 100) @paginated = true - render template: "subscriptions/digest" + render template: 'subscriptions/digest' end def multiple_add if !params[:tagnames] || params[:tagnames] == '' - flash[:notice] = "Please enter tags for subscription in the url." - redirect_to "/subscriptions" + "?_=" + Time.now.to_i.to_s + flash[:notice] = 'Please enter tags for subscription in the url.' + redirect_to '/subscriptions' + '?_=' + Time.now.to_i.to_s return end tag_list = if params[:tagnames].is_a? String @@ -127,7 +129,7 @@ def multiple_add params[:tagnames] end if current_user - if params[:type] == "tag" + if params[:type] == 'tag' tag_list.each do |t| next unless t.length.positive? @@ -136,14 +138,14 @@ def multiple_add tag = Tag.new( vid: 3, # vocabulary id name: t, - description: "", + description: '', weight: 0 ) begin tag.save! rescue ActiveRecord::RecordInvalid flash[:error] = tag.errors.full_messages - redirect_to "/subscriptions" + "?_=" + Time.now.to_i.to_s + redirect_to '/subscriptions' + '?_=' + Time.now.to_i.to_s return false end end @@ -159,14 +161,14 @@ def multiple_add render json: true else flash[:notice] = "You are now following '#{params[:tagnames]}'." - redirect_to "/subscriptions" + "?_=" + Time.now.to_i.to_s + redirect_to '/subscriptions' + '?_=' + Time.now.to_i.to_s end end end end else - flash[:warning] = "You must be logged in to subscribe for email updates!" - redirect_to "/login?return_to=" + request.fullpath + flash[:warning] = 'You must be logged in to subscribe for email updates!' + redirect_to '/login?return_to=' + request.fullpath end end @@ -203,7 +205,7 @@ def set_following(value, type, id) end subscription.following else - flash.now[:error] = "There was an error." + flash.now[:error] = 'There was an error.' false end end diff --git a/app/controllers/tag_controller.rb b/app/controllers/tag_controller.rb index a14d12d44a..373a4b72cf 100644 --- a/app/controllers/tag_controller.rb +++ b/app/controllers/tag_controller.rb @@ -1,61 +1,63 @@ +# frozen_string_literal: true + class TagController < ApplicationController respond_to :html, :xml, :json, :ics - before_action :require_user, only: %i(create delete add_parent) + before_action :require_user, only: %i[create delete add_parent] def index - @toggle = params[:sort] || "uses" + @toggle = params[:sort] || 'uses' @title = I18n.t('tag_controller.tags') @paginated = true - @order_type = params[:order] == "desc" ? "asc" : "desc" + @order_type = params[:order] == 'desc' ? 'asc' : 'desc' powertag_clause = params[:powertags] == 'true' ? '' : ['name NOT LIKE ?', '%:%'] if params[:search] keyword = params[:search] @tags = Tag.joins(:node_tag, :node) - .select('node.nid, node.status, term_data.*, community_tags.*') - .where('node.status = ?', 1) - .where('community_tags.date > ?', (DateTime.now - 1.month).to_i) - .where("name LIKE :keyword", keyword: "%#{keyword}%") - .where(powertag_clause) - .group(:name) - .order(order_string) - .paginate(page: params[:page], per_page: 24) - elsif @toggle == "uses" + .select('node.nid, node.status, term_data.*, community_tags.*') + .where('node.status = ?', 1) + .where('community_tags.date > ?', (DateTime.now - 1.month).to_i) + .where('name LIKE :keyword', keyword: "%#{keyword}%") + .where(powertag_clause) + .group(:name) + .order(order_string) + .paginate(page: params[:page], per_page: 24) + elsif @toggle == 'uses' @tags = Tag.joins(:node_tag, :node) - .select('node.nid, node.status, term_data.*, community_tags.*') - .where('node.status = ?', 1) - .where('community_tags.date > ?', (DateTime.now - 1.month).to_i) - .where(powertag_clause) - .group(:name) - .order(order_string) - .paginate(page: params[:page], per_page: 24) - elsif @toggle == "name" + .select('node.nid, node.status, term_data.*, community_tags.*') + .where('node.status = ?', 1) + .where('community_tags.date > ?', (DateTime.now - 1.month).to_i) + .where(powertag_clause) + .group(:name) + .order(order_string) + .paginate(page: params[:page], per_page: 24) + elsif @toggle == 'name' @tags = Tag.joins(:node_tag, :node) - .select('node.nid, node.status, term_data.*, community_tags.*') - .where('node.status = ?', 1) - .where('community_tags.date > ?', (DateTime.now - 1.month).to_i) - .where(powertag_clause) - .group(:name) - .order(order_string) - .paginate(page: params[:page], per_page: 24) - elsif @toggle == "followers" + .select('node.nid, node.status, term_data.*, community_tags.*') + .where('node.status = ?', 1) + .where('community_tags.date > ?', (DateTime.now - 1.month).to_i) + .where(powertag_clause) + .group(:name) + .order(order_string) + .paginate(page: params[:page], per_page: 24) + elsif @toggle == 'followers' raw_tags = Tag.joins(:node_tag, :node) - .select('node.nid, node.status, term_data.*, community_tags.*') - .where('node.status = ?', 1) - .where('community_tags.date > ?', (DateTime.now - 1.month).to_i) - .where(powertag_clause) - .group(:name) + .select('node.nid, node.status, term_data.*, community_tags.*') + .where('node.status = ?', 1) + .where('community_tags.date > ?', (DateTime.now - 1.month).to_i) + .where(powertag_clause) + .group(:name) raw_tags = Tag.sort_according_to_followers(raw_tags, params[:order]) @tags = raw_tags.paginate(page: params[:page], per_page: 24) else tags = Tag.joins(:node_tag, :node) - .select('node.nid, node.status, term_data.*, community_tags.*') - .where('node.status = ?', 1) - .where('community_tags.date > ?', (DateTime.now - 1.month).to_i) - .where(powertag_clause) - .group(:name) - .order(order_string) + .select('node.nid, node.status, term_data.*, community_tags.*') + .where('node.status = ?', 1) + .where('community_tags.date > ?', (DateTime.now - 1.month).to_i) + .where(powertag_clause) + .group(:name) + .order(order_string) followed = [] not_followed = [] @@ -73,15 +75,14 @@ def index end def show - - # Enhancement #6306 - Add counts to `by type` dropdown on tag pages - @counts = {:posts => 0, :questions => 0, :wiki => 0 } + # Enhancement #6306 - Add counts to `by type` dropdown on tag pages + @counts = { posts: 0, questions: 0, wiki: 0 } @counts[:posts] = Tag.find_nodes_by_type([params[:id]], 'note', false).count @counts[:questions] = Tag.find_nodes_by_type("question:#{params[:id]}", 'note', false).count @counts[:wiki] = Tag.find_nodes_by_type([params[:id]], 'page', false).count params[:counts] = @counts # end Enhancement #6306 ============================================ - + if params[:id].is_a? Integer @wiki = Node.find(params[:id])&.first else @@ -104,7 +105,7 @@ def show 'node_revisions.timestamp DESC' end - node_type = if %w(questions note).include?(@node_type) + node_type = if %w[questions note].include?(@node_type) 'note' elsif @node_type == 'wiki' 'page' @@ -118,34 +119,34 @@ def show @wildcard = true @tags = Tag.where('name LIKE (?)', params[:id][0..-2] + '%') nodes = Node.where(status: 1, type: node_type) - .includes(:revision, :tag, :answers) - .references(:term_data, :node_revisions) - .where('term_data.name LIKE (?) OR term_data.parent LIKE (?)', params[:id][0..-2] + '%', params[:id][0..-2] + '%') - .paginate(page: params[:page], per_page: 24) - .order(order_by) + .includes(:revision, :tag, :answers) + .references(:term_data, :node_revisions) + .where('term_data.name LIKE (?) OR term_data.parent LIKE (?)', params[:id][0..-2] + '%', params[:id][0..-2] + '%') + .paginate(page: params[:page], per_page: 24) + .order(order_by) else @tags = Tag.where(name: params[:id]) if @node_type == 'questions' - other_tag = if params[:id].include? "question:" + other_tag = if params[:id].include? 'question:' params[:id].split(':')[1] else - "question:" + params[:id] + 'question:' + params[:id] end nodes = Node.where(status: 1, type: node_type) - .includes(:revision, :tag) - .references(:term_data, :node_revisions) - .where('term_data.name = ? OR term_data.name = ? OR term_data.parent = ?', params[:id], other_tag, params[:id]) - .paginate(page: params[:page], per_page: 24) - .order(order_by) + .includes(:revision, :tag) + .references(:term_data, :node_revisions) + .where('term_data.name = ? OR term_data.name = ? OR term_data.parent = ?', params[:id], other_tag, params[:id]) + .paginate(page: params[:page], per_page: 24) + .order(order_by) else nodes = Node.where(status: 1, type: node_type) - .includes(:revision, :tag) - .references(:term_data, :node_revisions) - .where('term_data.name = ? OR term_data.parent = ?', params[:id], params[:id]) - .paginate(page: params[:page], per_page: 24) - .order(order_by) + .includes(:revision, :tag) + .references(:term_data, :node_revisions) + .where('term_data.name = ? OR term_data.parent = ?', params[:id], params[:id]) + .paginate(page: params[:page], per_page: 24) + .order(order_by) end end nodes = nodes.where(created: @start.to_i..@end.to_i) if @start && @end @@ -180,7 +181,7 @@ def show format.json do json = [] nodes.each do |node| - json << node.as_json(except: %i(path tags)) + json << node.as_json(except: %i[path tags]) json.last['path'] = 'https://' + request.host.to_s + node.path json.last['preview'] = node.body_preview(500) json.last['image'] = node.main_image.path(:large) if node.main_image @@ -221,8 +222,8 @@ def show_for_author @user = User.find_by(name: params[:author]) nodes = Tag.tagged_nodes_by_author(@tagname, @user) - .where(status: 1, type: node_type) - .paginate(page: params[:page], per_page: 24) + .where(status: 1, type: node_type) + .paginate(page: params[:page], per_page: 24) @notes ||= [] @@ -241,9 +242,9 @@ def show_for_author format.json do json = [] nodes.each do |node| - json << node.as_json(except: %i(path tags)) + json << node.as_json(except: %i[path tags]) json.last['path'] = 'https://' + request.host - .to_s + node.path + .to_s + node.path json.last['preview'] = node.body_preview(500) json.last['image'] = node.main_image.path(:large) if node.main_image json.last['tags'] = Node.find(node.id).tags.collect(&:name) if node.tags @@ -262,16 +263,16 @@ def widget num = params[:n] || 4 nids = Tag.find_nodes_by_type(params[:id], 'note', num).collect(&:nid) @notes = Node.paginate(page: params[:page], per_page: 24) - .where('status = 1 AND nid in (?)', nids) - .order('nid DESC') + .where('status = 1 AND nid in (?)', nids) + .order('nid DESC') render layout: false end def blog nids = Tag.find_nodes_by_type(params[:id], 'note', nil).collect(&:nid) @notes = Node.paginate(page: params[:page], per_page: 6) - .where('status = 1 AND nid in (?)', nids) - .order('nid DESC') + .where('status = 1 AND nid in (?)', nids) + .order('nid DESC') @tags = Tag.where(name: params[:id]) @tagnames = @tags.collect(&:name).uniq! || [] @title = @tagnames.join(',') + ' Blog' if @tagnames @@ -316,22 +317,22 @@ def create if Tag.exists?(tagname, nid) @output[:errors] << I18n.t('tag_controller.tag_already_exists') - elsif tagname.include?(":") && tagname.split(':').length < 2 - if tagname.split(':')[0] == "barnstar" || tagname.split(':')[0] == "with" + elsif tagname.include?(':') && tagname.split(':').length < 2 + if tagname.split(':')[0] == 'barnstar' || tagname.split(':')[0] == 'with' @output[:errors] << I18n.t('tag_controller.cant_be_empty') end elsif node.can_tag(tagname, current_user) === true || logged_in_as(['admin']) saved, tag = node.add_tag(tagname.strip, current_user) - if tagname.include?(":") && tagname.split(':').length == 2 - if tagname.split(':')[0] == "barnstar" + if tagname.include?(':') && tagname.split(':').length == 2 + if tagname.split(':')[0] == 'barnstar' CommentMailer.notify_barnstar(current_user, node) barnstar_info_link = 'barnstar' node.add_comment(subject: 'barnstar', uid: current_user.uid, body: "@#{current_user.username} awards a #{barnstar_info_link} to #{node.user.name} for their awesome contribution!") - elsif tagname.split(':')[0] == "with" + elsif tagname.split(':')[0] == 'with' user = User.find_by_username_case_insensitive(tagname.split(':')[1]) CommentMailer.notify_coauthor(user, node) node.add_comment(subject: 'co-author', @@ -357,8 +358,8 @@ def create render json: @output else flash[:notice] = I18n.t('tag_controller.tags_created_error', - tag_count: @output[:saved].length, - error_count: @output[:errors].length).html_safe + tag_count: @output[:saved].length, + error_count: @output[:errors].length).html_safe redirect_to node.path end end @@ -370,14 +371,14 @@ def delete node_tag = NodeTag.where(nid: params[:nid], tid: params[:tid]).first node = Node.where(nid: params[:nid]).first # only admins, mods, and tag authors can delete other peoples' tags - if node_tag.uid == current_user.uid || logged_in_as(['admin', 'moderator']) || node.uid == current_user.uid + if node_tag.uid == current_user.uid || logged_in_as(%w[admin moderator]) || node.uid == current_user.uid tag = Tag.joins(:node_tag) - .select('term_data.name') - .where(tid: params[:tid]) - .first + .select('term_data.name') + .where(tid: params[:tid]) + .first - if (tag.name.split(':')[0] == "lat") || (tag.name.split(':')[0] == "lon") + if (tag.name.split(':')[0] == 'lat') || (tag.name.split(':')[0] == 'lon') node.delete_coord_attribute(tag.name) end @@ -405,7 +406,7 @@ def delete def suggested if !params[:id].empty? && params[:id].length > 2 @suggestions = SearchService.new.search_tags(params[:id]) - render json: @suggestions.collect { |tag| tag.name }.uniq + render json: @suggestions.collect(&:name).uniq else render json: [] end @@ -414,11 +415,11 @@ def suggested def rss @notes = if params[:tagname][-1..-1] == '*' Node.where(status: 1, type: 'note') - .includes(:revision, :tag) - .references(:term_data, :node_revisions) - .where('term_data.name LIKE (?)', params[:tagname][0..-2] + '%') - .limit(20) - .order('node_revisions.timestamp DESC') + .includes(:revision, :tag) + .references(:term_data, :node_revisions) + .where('term_data.name LIKE (?)', params[:tagname][0..-2] + '%') + .limit(20) + .order('node_revisions.timestamp DESC') else Tag.find_nodes_by_type([params[:tagname]], 'note', 20) end @@ -439,8 +440,8 @@ def rss def rss_for_tagged_with_author @user = User.find_by(name: params[:authorname]) @notes = Tag.tagged_nodes_by_author(params[:tagname], @user) - .where(status: 1) - .limit(20) + .where(status: 1) + .limit(20) respond_to do |format| format.rss do response.headers['Content-Type'] = 'application/xml; charset=utf-8' @@ -465,7 +466,7 @@ def contributors # /contributors def contributors_index - @tagnames = ['balloon-mapping', 'spectrometer', 'infragram', 'air-quality', 'water-quality'] + @tagnames = %w[balloon-mapping spectrometer infragram air-quality water-quality] @tagdata = {} @tags = [] @@ -487,13 +488,13 @@ def add_parent @tag = Tag.find_by(name: params[:name]) @tag.update_attribute('parent', params[:parent]) if @tag.save - flash[:notice] = "Tag parent added." + flash[:notice] = 'Tag parent added.' else - flash[:error] = "There was an error adding a tag parent." + flash[:error] = 'There was an error adding a tag parent.' end redirect_to '/tag/' + @tag.name + '?_=' + Time.now.to_i.to_s else - flash[:error] = "Only admins may add tag parents." + flash[:error] = 'Only admins may add tag parents.' end end @@ -506,9 +507,9 @@ def location_modal end def gridsEmbed - if %w(nodes wikis activities questions upgrades notes).include?(params[:tagname].split(':').first) + if %w[nodes wikis activities questions upgrades notes].include?(params[:tagname].split(':').first) params[:t] = params[:tagname] - params[:tagname] = "" + params[:tagname] = '' end render layout: false end @@ -537,10 +538,10 @@ def stats private def order_string - if params[:search] || @toggle == "uses" - params[:order] == "asc" ? "count ASC" : "count DESC" + if params[:search] || @toggle == 'uses' + params[:order] == 'asc' ? 'count ASC' : 'count DESC' else - params[:order] == "asc" ? "name ASC" : "name DESC" + params[:order] == 'asc' ? 'name ASC' : 'name DESC' end end end diff --git a/app/controllers/talk_controller.rb b/app/controllers/talk_controller.rb index bcbc331b5f..79026f30c7 100644 --- a/app/controllers/talk_controller.rb +++ b/app/controllers/talk_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class TalkController < ApplicationController def show @node = Node.find_by_path params[:id] diff --git a/app/controllers/user_sessions_controller.rb b/app/controllers/user_sessions_controller.rb index 4a4cf4c5cb..4372a6272c 100644 --- a/app/controllers/user_sessions_controller.rb +++ b/app/controllers/user_sessions_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class UserSessionsController < ApplicationController before_action :require_no_user, only: [:new] def new @@ -21,10 +23,10 @@ def handle_social_login_flow(auth) return_to = request.env['omniauth.origin'] || root_url return_to += '?_=' + Time.now.to_i.to_s - hash_params = "" + hash_params = '' unless params[:hash_params].to_s.empty? - hash_params = URI.parse("#" + params[:hash_params]).to_s + hash_params = URI.parse('#' + params[:hash_params]).to_s end if signed_in? @@ -35,19 +37,19 @@ def handle_social_login_flow(auth) # associate the identity @identity.user = current_user @identity.save - redirect_to return_to + hash_params, notice: "Successfully linked to your account!" + redirect_to return_to + hash_params, notice: 'Successfully linked to your account!' elsif @identity.user == current_user # User is signed in so they are trying to link an identity with their # account. But we found the identity and the user associated with it # is the current user. So the identity is already associated with # this user. So let's display an error message. - redirect_to return_to + hash_params, notice: "Already linked to your account!" + redirect_to return_to + hash_params, notice: 'Already linked to your account!' else # User is signed in so they are trying to link an identity with their # account. But we found the identity and a different user associated with it # ,which is not the current user. So the identity is already associated with # that user. So let's display an error message. - redirect_to return_to + hash_params, notice: "Already linked to another account!" + redirect_to return_to + hash_params, notice: 'Already linked to another account!' end else # not signed in if @identity&.user.present? @@ -60,10 +62,10 @@ def handle_social_login_flow(auth) session[:openid_return_to] = nil redirect_to return_to + hash_params else - redirect_to return_to + hash_params, notice: "Signed in!" + redirect_to return_to + hash_params, notice: 'Signed in!' end else # identity does not exist so we need to either create a user with identity OR link identity to existing user - if User.where(email: auth["info"]["email"]).empty? + if User.where(email: auth['info']['email']).empty? # Create a new user as email provided is not present in PL database user = User.create_with_omniauth(auth) WelcomeMailer.notify_newcomer(user).deliver_now @@ -77,18 +79,18 @@ def handle_social_login_flow(auth) return_to = session[:openid_return_to] session[:openid_return_to] = nil redirect_to return_to + hash_params - elsif params[:return_to] && params[:return_to].split('/')[0..3] == ["", "subscribe", "multiple", "tag"] + elsif params[:return_to] && params[:return_to].split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] = "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) - redirect_to '/dashboard', notice: "You have successfully signed in. Please change your password using the link sent to you via e-mail." - elsif params[:return_to] && params[:return_to] != "/signup" && params[:return_to] != "/login" - flash[:notice] += " " + I18n.t('users_controller.continue_where_you_left_off', url1: params[:return_to].to_s) - redirect_to return_to + hash_params, notice: "You have successfully signed in. Please change your password using the link sent to you via e-mail." + redirect_to '/dashboard', notice: 'You have successfully signed in. Please change your password using the link sent to you via e-mail.' + elsif params[:return_to] && params[:return_to] != '/signup' && params[:return_to] != '/login' + flash[:notice] += ' ' + I18n.t('users_controller.continue_where_you_left_off', url1: params[:return_to].to_s) + redirect_to return_to + hash_params, notice: 'You have successfully signed in. Please change your password using the link sent to you via e-mail.' else - redirect_to return_to + hash_params, notice: "You have successfully signed in. Please change your password using the link sent to you via e-mail." + redirect_to return_to + hash_params, notice: 'You have successfully signed in. Please change your password using the link sent to you via e-mail.' end else # email exists so link the identity with existing user and log in the user - user = User.where(email: auth["info"]["email"]) + user = User.where(email: auth['info']['email']) # If no identity was found, create a brand new one here @identity = UserTag.create_with_omniauth(auth, user.ids.first) # The identity is not associated with the current_user so lets @@ -102,7 +104,7 @@ def handle_social_login_flow(auth) session[:openid_return_to] = nil redirect_to return_to + hash_params else - redirect_to return_to + hash_params, notice: "Successfully linked to your account!" + redirect_to return_to + hash_params, notice: 'Successfully linked to your account!' end end end @@ -114,8 +116,8 @@ def handle_site_login_flow u = User.find_by(username: username) if u && u.password_checker != 0 n = u.password_checker - hash = { 1 => "Facebook", 2 => "Github", 3 => "Google", 4 => "Twitter" } - s = "This account doesn't have a password set. It may be logged in with " + hash[n] + " account, or you can set a new password via Forget password feature" + hash = { 1 => 'Facebook', 2 => 'Github', 3 => 'Google', 4 => 'Twitter' } + s = "This account doesn't have a password set. It may be logged in with " + hash[n] + ' account, or you can set a new password via Forget password feature' flash[:error] = s redirect_to '/' else @@ -127,7 +129,7 @@ def handle_site_login_flow params[:user_session][:username] = @user.username end if @user.nil? - flash[:warning] = "There is nobody in our system by that name, are you sure you have the right username?" + flash[:warning] = 'There is nobody in our system by that name, are you sure you have the right username?' redirect_to params[:return_to] || '/login' elsif params[:user_session].nil? || @user&.status == 1 # an existing Rails user @@ -143,10 +145,10 @@ def handle_site_login_flow remember_me: params[:user_session][:remember_me]) @user_session.save do |result| if result - hash_params = "" + hash_params = '' unless params[:hash_params].to_s.empty? - hash_params = URI.parse("#" + params[:hash_params]).to_s + hash_params = URI.parse('#' + params[:hash_params]).to_s end # replace this with temporarily saving pwd in session, @@ -205,14 +207,14 @@ def destroy @user_session = UserSession.find @user_session.destroy flash[:notice] = I18n.t('user_sessions_controller.logged_out') - prev_uri = URI(request.referer || "").path + prev_uri = URI(request.referer || '').path redirect_to prev_uri + '?_=' + Time.current.to_i.to_s end def logout_remotely current_user&.reset_persistence_token! flash[:notice] = I18n.t('user_sessions_controller.logged_out') - prev_uri = URI(request.referer || "").path + prev_uri = URI(request.referer || '').path redirect_to prev_uri + '?_=' + Time.current.to_i.to_s end @@ -224,32 +226,33 @@ def index def subscribe_multiple_tag(tag_list) if !tag_list || tag_list == '' - flash[:notice] = "Please enter tags for subscription in the url." + flash[:notice] = 'Please enter tags for subscription in the url.' else if tag_list.is_a? String tag_list = tag_list.split(',') end tag_list.each do |t| next unless t.length.positive? + tag = Tag.find_by(name: t) unless tag.present? tag = Tag.new( vid: 3, # vocabulary id name: t, - description: "", + description: '', weight: 0 ) begin tag.save! - rescue ActiveRecord::RecordInvalid + rescue ActiveRecord::RecordInvalid flash[:error] = tag.errors.full_messages - redirect_to "/subscriptions" + "?_=" + Time.now.to_i.to_s + redirect_to '/subscriptions' + '?_=' + Time.now.to_i.to_s return false end end # test for uniqueness unless TagSelection.where(following: true, user_id: current_user.uid, tid: tag.tid).length.positive? - # Successfully we have added subscription + # Successfully we have added subscription if Tag.find_by(tid: tag.tid) # Create the entry if it isn't already created. # assume tag, for now: @@ -261,7 +264,7 @@ def subscribe_multiple_tag(tag_list) subscription.save! end else - flash.now[:error] = "Sorry! There was an error in tag subscriptions. Please try it again." + flash.now[:error] = 'Sorry! There was an error in tag subscriptions. Please try it again.' end end end diff --git a/app/controllers/user_tags_controller.rb b/app/controllers/user_tags_controller.rb index 3938cb7498..0619b72e73 100644 --- a/app/controllers/user_tags_controller.rb +++ b/app/controllers/user_tags_controller.rb @@ -1,34 +1,36 @@ +# frozen_string_literal: true + class UserTagsController < ApplicationController respond_to :html, :xml, :json, :js require 'will_paginate/array' def index - @toggle = params[:sort] || "uses" + @toggle = params[:sort] || 'uses' @title = I18n.t('tag_controller.tags') @paginated = true if params[:search] keyword = params[:search] @user_tags = UserTag - .select('value') - .where("value LIKE :keyword", keyword: "%#{keyword}%") - .group(:value) - .order('value ASC') - .count('value').to_a - .paginate(page: params[:page], per_page: 24) - elsif @toggle == "value" + .select('value') + .where('value LIKE :keyword', keyword: "%#{keyword}%") + .group(:value) + .order('value ASC') + .count('value').to_a + .paginate(page: params[:page], per_page: 24) + elsif @toggle == 'value' @user_tags = UserTag.group(:value) - .select('value') - .order('value ASC') - .count('value').to_a - .paginate(page: params[:page], per_page: 24) + .select('value') + .order('value ASC') + .count('value').to_a + .paginate(page: params[:page], per_page: 24) else # @toggle == "uses" @user_tags = UserTag.group(:value) - .select('value') - .order('count_value DESC') - .count('value').to_a - .paginate(page: params[:page], per_page: 24) + .select('value') + .order('count_value DESC') + .count('value').to_a + .paginate(page: params[:page], per_page: 24) end end @@ -54,13 +56,13 @@ def create next if exist user_tag = user.user_tags.build(value: name) - if tagname.split(':')[1] == "facebook" + if tagname.split(':')[1] == 'facebook' @output[:errors] << "This tag is used for associating a Facebook account. Click here to read more " - elsif tagname.split(':')[1] == "github" + elsif tagname.split(':')[1] == 'github' @output[:errors] << "This tag is used for associating a Github account. Click here to read more " - elsif tagname.split(':')[1] == "google_oauth2" + elsif tagname.split(':')[1] == 'google_oauth2' @output[:errors] << "This tag is used for associating a Google account. Click here to read more " - elsif tagname.split(':')[1] == "twitter" + elsif tagname.split(':')[1] == 'twitter' @output[:errors] << "This tag is used for associating a Twitter account. Click here to read more " elsif user_tag.save @output[:saved] << [name, user_tag.id] diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index aeca48e3f3..d8f436878d 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,40 +1,42 @@ +# frozen_string_literal: true + class UsersController < ApplicationController before_action :require_no_user, only: [:new] - before_action :require_user, only: %i(edit update save_settings) - before_action :set_user, only: %i(info followed following followers) + before_action :require_user, only: %i[edit update save_settings] + before_action :set_user, only: %i[info followed following followers] def new @user = User.new - @action = "create" # sets the form url + @action = 'create' # sets the form url end def create @user = User.new(user_params) @user.status = 1 - using_recaptcha = !params[:spamaway] && Rails.env == "production" + using_recaptcha = !params[:spamaway] && Rails.env == 'production' recaptcha = verify_recaptcha(model: @user) if using_recaptcha @spamaway = Spamaway.new(spamaway_params) unless using_recaptcha if ((@spamaway&.valid?) || recaptcha) && @user.save if current_user.crypted_password.nil? # the user has not created a pwd in the new site flash[:warning] = I18n.t('users_controller.account_migrated_create_new_password') - redirect_to "/profile/edit" + redirect_to '/profile/edit' else begin WelcomeMailer.notify_newcomer(@user).deliver_now rescue StandardError - flash[:warning] = "We tried and failed to send you a welcome email, but your account was created anyhow. Sorry!" + flash[:warning] = 'We tried and failed to send you a welcome email, but your account was created anyhow. Sorry!' end flash[:notice] = I18n.t('users_controller.registration_successful') - if params[:return_to] && params[:return_to].split('/')[0..3] == ["", "subscribe", "multiple", "tag"] + if params[:return_to] && params[:return_to].split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] += "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) - elsif params[:return_to] && params[:return_to] != "/signup" && params[:return_to] != "/login" - flash[:notice] += " " + I18n.t('users_controller.continue_where_you_left_off', url1: params[:return_to].to_s) + elsif params[:return_to] && params[:return_to] != '/signup' && params[:return_to] != '/login' + flash[:notice] += ' ' + I18n.t('users_controller.continue_where_you_left_off', url1: params[:return_to].to_s) end flash[:notice] = flash[:notice].html_safe flash[:warning] = I18n.t('users_controller.spectralworkbench_or_mapknitter', url1: "#{session[:openid_return_to]}'").html_safe if session[:openid_return_to] session[:openid_return_to] = nil - redirect_to "/dashboard" + redirect_to '/dashboard' end else # pipe all spamaway errors into the user error display @@ -46,7 +48,7 @@ def create flash.now[:warning] = "If you're having trouble creating an account, try the alternative signup form, or ask staff for help" end # send all errors to the page so the user can try again - @action = "create" + @action = 'create' render action: 'new' end end @@ -55,7 +57,7 @@ def update @password_verification = user_verification_params @user = current_user @user = User.find_by(username: params[:id]) if params[:id] && logged_in_as(['admin']) - if @user.valid_password?(user_verification_params["current_password"]) || user_verification_params["ui_update"].nil? + if @user.valid_password?(user_verification_params['current_password']) || user_verification_params['ui_update'].nil? # correct password @user.attributes = user_params if @user.save @@ -64,31 +66,31 @@ def update session[:openid_return_to] = nil redirect_to return_to else - flash[:notice] = I18n.t('users_controller.successful_updated_profile') + "" + I18n.t('users_controller.return_profile') + " »" - return redirect_to "/profile/" + @user.username + "/edit" + flash[:notice] = I18n.t('users_controller.successful_updated_profile') + "" + I18n.t('users_controller.return_profile') + ' »' + return redirect_to '/profile/' + @user.username + '/edit' end else render template: 'users/edit' end else # incorrect password - flash[:error] = "Current Password is incorrect!" - return redirect_to "/profile/" + @user.username + "/edit" + flash[:error] = 'Current Password is incorrect!' + return redirect_to '/profile/' + @user.username + '/edit' end end def edit - @action = "update" # sets the form url + @action = 'update' # sets the form url @user = if params[:id] # admin only User.find_by(username: params[:id]) else current_user end if current_user && current_user.uid == @user.uid || logged_in_as(['admin']) - render template: "users/edit" + render template: 'users/edit' else flash[:error] = I18n.t('users_controller.only_user_edit_profile', user: @user.name).html_safe - redirect_to "/profile/" + @user.name + redirect_to '/profile/' + @user.name end end @@ -112,29 +114,29 @@ def list @map_lat = nil @map_lon = nil - if current_user&.has_power_tag("lat") && current_user&.has_power_tag("lon") - @map_lat = current_user.get_value_of_power_tag("lat").to_f - @map_lon = current_user.get_value_of_power_tag("lon").to_f + if current_user&.has_power_tag('lat') && current_user&.has_power_tag('lon') + @map_lat = current_user.get_value_of_power_tag('lat').to_f + @map_lon = current_user.get_value_of_power_tag('lon').to_f end # allow admins to view recent users @users = if params[:id] User.order(order_string) - .where('rusers.role = ?', params[:id]) - .where('rusers.status = 1') - .page(params[:page]) + .where('rusers.role = ?', params[:id]) + .where('rusers.status = 1') + .page(params[:page]) elsif @tagname_param User.where(id: UserTag.where(value: @tagname_param).collect(&:uid)) - .page(params[:page]) + .page(params[:page]) else # recently active User.select('*, rusers.status, MAX(node_revisions.timestamp) AS last_updated') - .joins(:revisions) - .where("node_revisions.status = 1") - .group('rusers.id') - .order(order_string) - .page(params[:page]) + .joins(:revisions) + .where('node_revisions.status = 1') + .group('rusers.id') + .order(order_string) + .page(params[:page]) end @users = @users.where('rusers.status = 1') unless current_user&.can_moderate? @@ -144,50 +146,50 @@ def profile if current_user && params[:id].nil? redirect_to "/profile/#{current_user.username}" elsif !current_user && params[:id].nil? - redirect_to "/" + redirect_to '/' else @profile_user = User.find_by(username: params[:id]) if !@profile_user flash[:error] = I18n.t('users_controller.no_user_found_name', username: params[:id]) - redirect_to "/" + redirect_to '/' else @title = @profile_user.name @notes = Node.research_notes .paginate(page: params[:page], per_page: 24) - .order("nid DESC") + .order('nid DESC') .where(status: 1, uid: @profile_user.uid) if current_user && current_user.uid == @profile_user.uid coauthor_nids = Node.joins(:node_tag) - .joins('LEFT OUTER JOIN term_data ON term_data.tid = community_tags.tid') - .select('node.*, term_data.*, community_tags.*') - .where(type: 'note', status: 3) - .where('term_data.name = (?)', "with:#{@profile_user.username}") - .collect(&:nid) + .joins('LEFT OUTER JOIN term_data ON term_data.tid = community_tags.tid') + .select('node.*, term_data.*, community_tags.*') + .where(type: 'note', status: 3) + .where('term_data.name = (?)', "with:#{@profile_user.username}") + .collect(&:nid) @drafts = Node.where('(nid IN (?) OR (status = 3 AND uid = ?))', coauthor_nids, @profile_user.uid) - .paginate(page: params[:page], per_page: 24) + .paginate(page: params[:page], per_page: 24) end @coauthored = @profile_user.coauthored_notes - .paginate(page: params[:page], per_page: 24) - .order('node_revisions.timestamp DESC') + .paginate(page: params[:page], per_page: 24) + .order('node_revisions.timestamp DESC') @questions = @profile_user.questions - .order('node.nid DESC') - .paginate(page: params[:page], per_page: 24) - @likes = (@profile_user.liked_notes.includes(%i(tag comments)) + @profile_user.liked_pages) - .paginate(page: params[:page], per_page: 24) + .order('node.nid DESC') + .paginate(page: params[:page], per_page: 24) + @likes = (@profile_user.liked_notes.includes(%i[tag comments]) + @profile_user.liked_pages) + .paginate(page: params[:page], per_page: 24) questions = Node.questions .where(status: 1) .order('node.nid DESC') ans_ques = questions.select { |q| q.comments.collect(&:uid).include?(@profile_user.id) } @commented_questions = ans_ques.paginate(page: params[:page], per_page: 24) - wikis = Revision.order("nid DESC") + wikis = Revision.order('nid DESC') .where('node.type' => 'page', 'node.status' => 1, uid: @profile_user.uid) .joins(:node) .limit(20) @wikis = wikis.collect(&:parent).uniq comments = Comment.limit(20) - .order("timestamp DESC") + .order('timestamp DESC') .where(uid: @profile_user.uid) .paginate(page: params[:page], per_page: 24) @@ -199,17 +201,17 @@ def profile end # 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") - @count_activities_posted = Tag.tagged_nodes_by_author("activity:*", @profile_user).count - @count_activities_attempted = Tag.tagged_nodes_by_author("replication:*", @profile_user).count + @github = @profile_user.social_link('github') + @twitter = @profile_user.social_link('twitter') + @facebook = @profile_user.social_link('facebook') + @instagram = @profile_user.social_link('instagram') + @count_activities_posted = Tag.tagged_nodes_by_author('activity:*', @profile_user).count + @count_activities_attempted = Tag.tagged_nodes_by_author('replication:*', @profile_user).count @map_lat = nil @map_lon = nil - if @profile_user.has_power_tag("lat") && @profile_user.has_power_tag("lon") - @map_lat = @profile_user.get_value_of_power_tag("lat").to_f - @map_lon = @profile_user.get_value_of_power_tag("lon").to_f + if @profile_user.has_power_tag('lat') && @profile_user.has_power_tag('lon') + @map_lat = @profile_user.get_value_of_power_tag('lat').to_f + @map_lon = @profile_user.get_value_of_power_tag('lon').to_f @map_blurred = @profile_user.has_tag('blurred:true') end @@ -218,7 +220,7 @@ def profile flash.now[:error] = I18n.t('users_controller.user_has_been_banned') else flash[:error] = I18n.t('users_controller.user_has_been_banned') - redirect_to "/" + redirect_to '/' end elsif @profile_user.status == 5 flash.now[:warning] = I18n.t('users_controller.user_has_been_moderated') @@ -229,9 +231,9 @@ def profile def likes @user = User.find_by(username: params[:id]) - @title = "Liked by " + @user.name + @title = 'Liked by ' + @user.name @notes = @user.liked_notes - .includes(%i(tag comments)) + .includes(%i[tag comments]) .paginate(page: params[:page], per_page: 24) @wikis = @user.liked_pages @tagnames = [] @@ -242,9 +244,9 @@ def rss if params[:author] @author = User.where(username: params[:author], status: 1).first if @author - @notes = Node.order("nid DESC") - .where(type: 'note', status: 1, uid: @author.uid) - .limit(20) + @notes = Node.order('nid DESC') + .where(type: 'note', status: 1, uid: @author.uid) + .limit(20) respond_to do |format| format.rss do render layout: false @@ -254,7 +256,7 @@ def rss end else flash[:error] = I18n.t('users_controller.no_user_found') - redirect_to "/" + redirect_to '/' end end end @@ -271,10 +273,10 @@ def reset if @user.changed? && @user.save flash[:notice] = I18n.t('users_controller.password_change_success') @user.password_checker = 0 - redirect_to "/dashboard" + redirect_to '/dashboard' else flash[:error] = I18n.t('users_controller.password_reset_failed').html_safe - redirect_to "/" + redirect_to '/' end else flash[:error] = I18n.t('users_controller.password_change_failed') @@ -282,7 +284,7 @@ def reset end else flash[:error] = I18n.t('users_controller.password_reset_failed_no_user').html_safe - redirect_to "/" + redirect_to '/' end elsif params[:email] @@ -294,18 +296,18 @@ def reset PasswordResetMailer.reset_notify(user, key).deliver_now unless user.nil? # respond the same to both successes and failures; security end flash[:notice] = I18n.t('users_controller.password_reset_email') - redirect_to "/login" + redirect_to '/login' end end def comments comments = Comment.limit(20) - .order("timestamp DESC") - .where(uid: params[:id]) - .paginate(page: params[:page], per_page: 24) + .order('timestamp DESC') + .where(uid: params[:id]) + .paginate(page: params[:page], per_page: 24) @normal_comments = comments.where('comments.status = 1') - if logged_in_as(['admin', 'moderator']) + if logged_in_as(%w[admin moderator]) @moderated_comments = comments.where('comments.status = 4') end render template: 'comments/index' @@ -324,11 +326,11 @@ def photo end else flash[:error] = I18n.t('users_controller.image_not_saved') - redirect_to "/images/new" + redirect_to '/images/new' end else flash[:error] = I18n.t('users_controller.image_not_saved') - redirect_to "/images/new" + redirect_to '/images/new' end end @@ -340,20 +342,20 @@ def followed end def following - @title = "Following" + @title = 'Following' @users = @user.following_users.paginate(page: params[:page], per_page: 24) render 'show_follow' end def followers - @title = "Followers" + @title = 'Followers' @users = @user.followers.paginate(page: params[:page], per_page: 24) render 'show_follow' end def test_digest_email DigestMailJob.perform_async(0) - redirect_to "/" + redirect_to '/' end def save_settings @@ -364,7 +366,7 @@ def save_settings ] user_settings.each do |setting| - if params[setting] && params[setting] == "on" + if params[setting] && params[setting] == 'on' UserTag.remove_if_exists(current_user.uid, setting) else UserTag.create_if_absent(current_user.uid, setting) @@ -376,7 +378,7 @@ def save_settings 'digest:daily' ] digest_settings.each do |setting| - if params[setting] == "on" + if params[setting] == 'on' UserTag.create_if_absent(current_user.uid, setting) else UserTag.remove_if_exists(current_user.uid, setting) @@ -390,15 +392,15 @@ def save_settings ] notification_settings.each do |setting| - if params[setting] == "on" + if params[setting] == 'on' UserTag.create_if_absent(current_user.uid, setting) else UserTag.remove_if_exists(current_user.uid, setting) end end - flash[:notice] = "Settings updated successfully!" - render js: "window.location.reload()" + flash[:notice] = 'Settings updated successfully!' + render js: 'window.location.reload()' end def shortlink @@ -412,43 +414,44 @@ def shortlink def verify_email decrypted_user_id = User.validate_token(params[:token]) - action_msg = "Email verification failed" + action_msg = 'Email verification failed' if decrypted_user_id != 0 user_obj = User.find(decrypted_user_id) if user_obj.is_verified - action_msg = "Email already verified" + action_msg = 'Email already verified' else user_obj.update_column(:is_verified, true) - action_msg = "Successfully verified email" + action_msg = 'Successfully verified email' end end - redirect_to "/login", flash: { notice: action_msg } + redirect_to '/login', flash: { notice: action_msg } end private def subscribe_multiple_tag(tag_list) if !tag_list || tag_list == '' - flash[:notice] = "Please enter tags for subscription in the url." + flash[:notice] = 'Please enter tags for subscription in the url.' else if tag_list.is_a? String tag_list = tag_list.split(',') end tag_list.each do |t| next unless t.length.positive? + tag = Tag.find_by(name: t) unless tag.present? tag = Tag.new( vid: 3, # vocabulary id name: t, - description: "", + description: '', weight: 0 ) begin tag.save! - rescue ActiveRecord::RecordInvalid + rescue ActiveRecord::RecordInvalid flash[:error] = tag.errors.full_messages - redirect_to "/subscriptions" + "?_=" + Time.now.to_i.to_s + redirect_to '/subscriptions' + '?_=' + Time.now.to_i.to_s return false end end @@ -466,7 +469,7 @@ def subscribe_multiple_tag(tag_list) subscription.save! end else - flash.now[:error] = "Sorry! There was an error in tag subscriptions. Please try it again." + flash.now[:error] = 'Sorry! There was an error in tag subscriptions. Please try it again.' end end end diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index 319ccead43..72de0915ce 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -1,7 +1,9 @@ +# frozen_string_literal: true + require 'rss' class WikiController < ApplicationController - before_action :require_user, only: %i(new create edit update delete replace) + before_action :require_user, only: %i[new create edit update delete replace] def subdomain url = "//#{request.host}/wiki/" @@ -9,7 +11,7 @@ def subdomain when 'new-york-city', 'gulf-coast', 'boston', - 'espana' then + 'espana' redirect_to url + request.subdomain when 'nyc' redirect_to url + 'new-york-city' @@ -130,10 +132,10 @@ def new flash.now[:notice] = I18n.t('wiki_controller.page_does_not_exist_create') title = params[:id].tr('-', ' ') @related = Node.limit(10) - .order('node.nid DESC') - .where('type = "page" AND node.status = 1 AND (node.title LIKE ? OR node_revisions.body LIKE ?)', '%' + title + '%', '%' + title + '%') - .includes(:revision) - .references(:node_revisions) + .order('node.nid DESC') + .where('type = "page" AND node.status = 1 AND (node.title LIKE ? OR node_revisions.body LIKE ?)', '%' + title + '%', '%' + title + '%') + .includes(:revision) + .references(:node_revisions) tag = Tag.find_by(name: params[:id]) # add page name as a tag, too @tags << tag if tag @related += Tag.find_nodes_by_type(@tags.collect(&:name), 'page', 10) @@ -154,9 +156,9 @@ def create # slug = params[:title].parameterize # slug = params[:id].parameterize if params[:id] != "" && !params[:id].nil? # slug = params[:url].parameterize if params[:url] != "" && !params[:url].nil? - saved, @node, @revision = Node.new_wiki(uid: current_user.uid, + saved, @node, @revision = Node.new_wiki(uid: current_user.uid, title: params[:title], - body: params[:body]) + body: params[:body]) if saved flash[:notice] = I18n.t('wiki_controller.wiki_page_created') if params[:main_image] && params[:main_image] != '' @@ -173,7 +175,7 @@ def create node = Node.find(params[:n]) params[:body] = node.body if node end - flash[:error] = "Please enter both body and title" + flash[:error] = 'Please enter both body and title' render template: 'editor/wikiRich' end else @@ -184,9 +186,9 @@ def create def update @node = Node.find(params[:id]) - @revision = @node.new_revision(uid: current_user.uid, + @revision = @node.new_revision(uid: current_user.uid, title: params[:title], - body: params[:body]) + body: params[:body]) if @node.has_tag('locked') && !current_user.can_moderate? flash[:warning] = "This page is locked, and only moderators can update it." @@ -236,7 +238,7 @@ def revert # wiki pages which have a root URL, like /about # also just redirect anything else matching /____ to /wiki/____ def root - @node = Node.find_by(path: "/" + params[:id]) + @node = Node.find_by(path: '/' + params[:id]) return if redirect_to_node_path?(@node) if @node @@ -313,11 +315,11 @@ def index end @wikis = Node.includes(:revision) - .references(:node_revisions) - .group('node_revisions.nid') - .order(order_string) - .where("node_revisions.status = 1 AND node.status = 1 AND (type = 'page' OR type = 'tool' OR type = 'place')") - .page(params[:page]) + .references(:node_revisions) + .group('node_revisions.nid') + .order(order_string) + .where("node_revisions.status = 1 AND node.status = 1 AND (type = 'page' OR type = 'tool' OR type = 'place')") + .page(params[:page]) @paginated = true end @@ -326,11 +328,11 @@ def stale @title = I18n.t('wiki_controller.wiki') @wikis = Node.includes(:revision) - .references(:node_revisions) - .group('node_revisions.nid') - .order('node_revisions.timestamp ASC') - .where("node_revisions.status = 1 AND node.status = 1 AND (type = 'page' OR type = 'tool' OR type = 'place')") - .page(params[:page]) + .references(:node_revisions) + .group('node_revisions.nid') + .order('node_revisions.timestamp ASC') + .where("node_revisions.status = 1 AND node.status = 1 AND (type = 'page' OR type = 'tool' OR type = 'place')") + .page(params[:page]) @paginated = true render template: 'wiki/index' @@ -339,19 +341,19 @@ def stale def popular @title = I18n.t('wiki_controller.popular_wiki_pages') @wikis = Node.limit(40) - .joins(:revision) - .group('node_revisions.nid') - .order('node_revisions.timestamp DESC') - .where("node.status = 1 AND node_revisions.status = 1 AND node.nid != 259 AND (type = 'page' OR type = 'tool' OR type = 'place')") - .sort_by(&:views).reverse + .joins(:revision) + .group('node_revisions.nid') + .order('node_revisions.timestamp DESC') + .where("node.status = 1 AND node_revisions.status = 1 AND node.nid != 259 AND (type = 'page' OR type = 'tool' OR type = 'place')") + .sort_by(&:views).reverse render template: 'wiki/index' end def liked @title = I18n.t('wiki_controller.well_liked_wiki_pages') @wikis = Node.limit(40) - .order('node.cached_likes DESC') - .where("status = 1 AND nid != 259 AND (type = 'page' OR type = 'tool' OR type = 'place') AND cached_likes >= 0") + .order('node.cached_likes DESC') + .where("status = 1 AND nid != 259 AND (type = 'page' OR type = 'tool' OR type = 'place') AND cached_likes >= 0") render template: 'wiki/index' end @@ -388,55 +390,55 @@ def techniques end def methods - @nodes = Node.where(status: 1, type: %w(page)) - .where('term_data.name = ?', 'method') - .includes(:revision, :tag) - .references(:node_revision) - .order('node_revisions.timestamp DESC') + @nodes = Node.where(status: 1, type: %w[page]) + .where('term_data.name = ?', 'method') + .includes(:revision, :tag) + .references(:node_revision) + .order('node_revisions.timestamp DESC') # deprecating the following in favor of javascript implementation in /app/assets/javascripts/methods.js if params[:topic] nids = @nodes.collect(&:nid) || [] - @notes = Node.where(status: 1, type: %w(page)) - .where('node.nid IN (?)', nids) - .where('(type = "note" OR type = "page" OR type = "map") AND node.status = 1 AND (node.title LIKE ? OR node_revisions.title LIKE ? OR node_revisions.body LIKE ? OR term_data.name = ?)', - '%' + params[:topic] + '%', - '%' + params[:topic] + '%', - '%' + params[:topic] + '%', - params[:topic]) - .includes(:revision, :tag) - .references(:node_revision, :term_data) - .order('node_revisions.timestamp DESC') + @notes = Node.where(status: 1, type: %w[page]) + .where('node.nid IN (?)', nids) + .where('(type = "note" OR type = "page" OR type = "map") AND node.status = 1 AND (node.title LIKE ? OR node_revisions.title LIKE ? OR node_revisions.body LIKE ? OR term_data.name = ?)', + '%' + params[:topic] + '%', + '%' + params[:topic] + '%', + '%' + params[:topic] + '%', + params[:topic]) + .includes(:revision, :tag) + .references(:node_revision, :term_data) + .order('node_revisions.timestamp DESC') end if params[:topic] nids = @nodes.collect(&:nid) || [] - @nodes = Node.where(status: 1, type: %w(page)) - .where('node.nid IN (?)', nids) - .where('(type = "note" OR type = "page" OR type = "map") AND node.status = 1 AND (node.title LIKE ? OR node_revisions.title LIKE ? OR node_revisions.body LIKE ? OR term_data.name = ?)', - '%' + params[:topic] + '%', - '%' + params[:topic] + '%', - '%' + params[:topic] + '%', - params[:topic]) - .includes(:revision, :tag) - .references(:node_revision, :term_data) - .order('node_revisions.timestamp DESC') + @nodes = Node.where(status: 1, type: %w[page]) + .where('node.nid IN (?)', nids) + .where('(type = "note" OR type = "page" OR type = "map") AND node.status = 1 AND (node.title LIKE ? OR node_revisions.title LIKE ? OR node_revisions.body LIKE ? OR term_data.name = ?)', + '%' + params[:topic] + '%', + '%' + params[:topic] + '%', + '%' + params[:topic] + '%', + params[:topic]) + .includes(:revision, :tag) + .references(:node_revision, :term_data) + .order('node_revisions.timestamp DESC') end @unpaginated = true - @topics = [ - 'agriculture', - 'drinking-water', - 'fracking', - 'indoor-air', - 'chemicals', - 'industry', - 'land-use', - 'land-change', - 'mining', - 'oil-and-gas', - 'transportation', - 'urban-planning', - 'sensors', - 'community-organizing' + @topics = %w[ + agriculture + drinking-water + fracking + indoor-air + chemicals + industry + land-use + land-change + mining + oil-and-gas + transportation + urban-planning + sensors + community-organizing ] render template: 'wiki/methods' end From c3ea6f00d5f6165bf44fc1e69b7d529f2ccd7898 Mon Sep 17 00:00:00 2001 From: Dave Menninger Date: Thu, 17 Oct 2019 15:32:47 +0000 Subject: [PATCH 02/23] change square brackets to parentheses for literals --- app/controllers/admin_controller.rb | 38 +++++++++++----------- app/controllers/application_controller.rb | 10 +++--- app/controllers/comment_controller.rb | 6 ++-- app/controllers/csvfiles_controller.rb | 2 +- app/controllers/editor_controller.rb | 4 +-- app/controllers/home_controller.rb | 8 ++--- app/controllers/images_controller.rb | 2 +- app/controllers/like_controller.rb | 2 +- app/controllers/map_controller.rb | 2 +- app/controllers/notes_controller.rb | 6 ++-- app/controllers/search_controller.rb | 2 +- app/controllers/stats_controller.rb | 2 +- app/controllers/subscription_controller.rb | 2 +- app/controllers/tag_controller.rb | 14 ++++---- app/controllers/users_controller.rb | 10 +++--- app/controllers/wiki_controller.rb | 12 +++---- 16 files changed, 61 insertions(+), 61 deletions(-) diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index d43fea83a5..f1c2a2a75f 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class AdminController < ApplicationController - before_action :require_user, only: %i[spam spam_revisions mark_comment_spam publish_comment spam_comments] + before_action :require_user, only: %i(spam spam_revisions mark_comment_spam publish_comment spam_comments) # intended to provide integration tests for assets def assets; end @@ -23,7 +23,7 @@ def promote_admin def promote_moderator @user = User.find params[:id] unless @user.nil? - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) @user.role = 'moderator' @user.save flash[:notice] = "User '" + @user.username + "' is now a moderator." @@ -37,7 +37,7 @@ def promote_moderator def demote_basic @user = User.find params[:id] unless @user.nil? - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) @user.role = 'basic' @user.save flash[:notice] = "User '" + @user.username + "' is no longer a moderator." @@ -63,7 +63,7 @@ def reset_user_password end def useremail - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) if params[:address] # address was submitted. find the username(s) and return. @address = params[:address] @@ -77,7 +77,7 @@ def useremail end def spam - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) @nodes = Node.paginate(page: params[:page]) .order('nid DESC') @nodes = if params[:type] == 'wiki' @@ -92,7 +92,7 @@ def spam end def spam_revisions - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) @revisions = Revision.paginate(page: params[:page]) .order('timestamp DESC') .where(status: 0) @@ -117,7 +117,7 @@ def spam_comments def mark_spam @node = Node.find params[:id] - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) if @node.status == 1 || @node.status == 4 @node.spam @node.author.ban @@ -140,7 +140,7 @@ def mark_spam def mark_comment_spam @comment = Comment.find params[:id] - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) if @comment.status == 1 || @comment.status == 4 @comment.spam user = @comment.author @@ -157,7 +157,7 @@ def mark_comment_spam end def publish_comment - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) @comment = Comment.find params[:id] if @comment.status == 1 flash[:notice] = 'Comment already published.' @@ -183,7 +183,7 @@ def publish_comment end def publish - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) @node = Node.find params[:id] if @node.status == 1 flash[:notice] = 'Item already published.' @@ -225,7 +225,7 @@ def mark_spam_revision return end - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) if @revision.status == 1 @revision.spam @revision.author.ban @@ -246,7 +246,7 @@ def mark_spam_revision end def publish_revision - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) @revision = Revision.find params[:vid] @revision.publish @revision.author.unban @@ -264,7 +264,7 @@ def publish_revision def moderate user = User.find params[:id] - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) user.moderate flash[:notice] = 'The user has been moderated.' else @@ -275,7 +275,7 @@ def moderate def unmoderate user = User.find params[:id] - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) user.unmoderate flash[:notice] = 'The user has been unmoderated.' else @@ -286,7 +286,7 @@ def unmoderate def ban user = User.find params[:id] - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) user.ban flash[:notice] = 'The user has been banned.' else @@ -297,7 +297,7 @@ def ban def unban user = User.find params[:id] - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) user.unban flash[:notice] = 'The user has been unbanned.' else @@ -307,7 +307,7 @@ def unban end def users - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) @users = User.order('uid DESC').limit(200) else flash[:error] = 'Only moderators can moderate other users.' @@ -316,7 +316,7 @@ def users end def batch - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) nodes = 0 users = [] params[:ids].split(',').uniq.each do |nid| @@ -354,7 +354,7 @@ def migrate end def queue - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) @notes = Node.where(status: 4) .paginate(page: params[:page]) flash[:warning] = "These are notes requiring moderation. Community moderators may approve or reject them." diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index be40617957..0a15359068 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -30,7 +30,7 @@ def set_sidebar(type = :generic, data = :all, args = {}) @notes = @notes.where('node.nid != (?)', @node.nid) if @node @wikis = Tag.find_pages(data, 10) - @videos = Tag.find_nodes_by_type_with_all_tags(%w[video] + data, 'note', 8) if args[:videos] && data.length > 1 + @videos = Tag.find_nodes_by_type_with_all_tags(%w(video) + data, 'note', 8) if args[:videos] && data.length > 1 @maps = Tag.find_nodes_by_type(data, 'map', 20) else # type is generic # remove "classroom" postings; also switch to an EXCEPT operator in sql, see https://github.com/publiclab/plots2/issues/375 @@ -45,7 +45,7 @@ def set_sidebar(type = :generic, data = :all, args = {}) @notes = @notes.where('node.nid != (?)', @node.nid) if @node @notes = @notes.where('node_revisions.status = 1 AND node.nid NOT IN (?)', hidden_nids) unless hidden_nids.empty? - @notes = if logged_in_as(%w[admin moderator]) + @notes = if logged_in_as(%w(admin moderator)) @notes.where('(node.status = 1 OR node.status = 4)') elsif current_user @notes.where('(node.status = 1 OR (node.status = 4 AND node.uid = ?))', current_user.uid) @@ -144,10 +144,10 @@ def redirect_to_node_path?(node) end def alert_and_redirect_moderated - if @node.author.status == User::Status::BANNED && !logged_in_as(%w[admin moderator]) + if @node.author.status == User::Status::BANNED && !logged_in_as(%w(admin moderator)) flash[:error] = I18n.t('application_controller.author_has_been_banned') redirect_to '/' - elsif @node.status == 4 && logged_in_as(%w[admin moderator]) + elsif @node.status == 4 && logged_in_as(%w(admin moderator)) flash.now[:warning] = "First-time poster #{@node.author.name} submitted this #{time_ago_in_words(@node.created_at)} ago and it has not yet been approved by a moderator. Approve Spam" elsif @node.status == 4 && current_user&.id == @node.author.id && !flash[:first_time_post] flash.now[:warning] = "Thank you for contributing open research, and thanks for your patience while your post is approved by community moderators and we'll email you when it is published. In the meantime, if you have more to contribute, feel free to do so." @@ -155,7 +155,7 @@ def alert_and_redirect_moderated flash.now[:warning] = "This is a draft note. Once you're ready, click Publish Draft to make it public. You can share it with collaborators using this private link #{@node.draft_url(request.base_url)}" elsif @node.status == 3 && (params[:token].nil? || (params[:token].present? && @node.slug.split('token:').last != params[:token])) page_not_found - elsif @node.status != 1 && @node.status != 3 && !logged_in_as(%w[admin moderator]) + elsif @node.status != 1 && @node.status != 3 && !logged_in_as(%w(admin moderator)) # if it's spam or a draft # no notification; don't let people easily fish for existing draft titles; we should try to 404 it redirect_to '/' diff --git a/app/controllers/comment_controller.rb b/app/controllers/comment_controller.rb index 9e0261364a..85ae54ce84 100644 --- a/app/controllers/comment_controller.rb +++ b/app/controllers/comment_controller.rb @@ -3,7 +3,7 @@ class CommentController < ApplicationController include CommentHelper respond_to :html, :xml, :json - before_action :require_user, only: %i[create update delete] + before_action :require_user, only: %i(create update delete) def index comments = Comment.joins(:node, :user) @@ -12,7 +12,7 @@ def index .paginate(page: params[:page], per_page: 30) @normal_comments = comments.where('comments.status = 1') - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) @moderated_comments = comments.where('comments.status = 4') end @@ -113,7 +113,7 @@ def delete if current_user.uid == @node.uid || @comment.uid == current_user.uid || - logged_in_as(%w[admin moderator]) + logged_in_as(%w(admin moderator)) if @comment.destroy respond_with do |format| diff --git a/app/controllers/csvfiles_controller.rb b/app/controllers/csvfiles_controller.rb index ae0858901b..64ec8fe102 100644 --- a/app/controllers/csvfiles_controller.rb +++ b/app/controllers/csvfiles_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class CsvfilesController < ApplicationController - before_action :require_user, only: %i[delete user_files] + before_action :require_user, only: %i(delete user_files) def setter @csvfile = Csvfile.new( diff --git a/app/controllers/editor_controller.rb b/app/controllers/editor_controller.rb index c960e142a2..0b0eca0c30 100644 --- a/app/controllers/editor_controller.rb +++ b/app/controllers/editor_controller.rb @@ -1,7 +1,7 @@ -# frozen_string_literal: true +#) frozen_string_literal: true class EditorController < ApplicationController - before_action :require_user, only: %i[post rich legacy editor] + before_action :require_user, only: %i(post rich legacy editor) # main image via URL passed as GET param def legacy diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 44e30398c4..a91ba33708 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class HomeController < ApplicationController - before_action :require_user, only: %i[subscriptions nearby] + before_action :require_user, only: %i(subscriptions nearby) def home if current_user @@ -33,7 +33,7 @@ def blog def dashboard if current_user - @note_count = Node.select(%i[created type status]) + @note_count = Node.select(%i(created type status)) .where(type: 'note', status: 1, created: Time.now.to_i - 1.weeks.to_i..Time.now.to_i) .count(:all) @wiki_count = Revision.select(:timestamp) @@ -51,7 +51,7 @@ def research if current_user redirect_to '/dashboard' else - @note_count = Node.select(%i[created type status]) + @note_count = Node.select(%i(created type status)) .where(type: 'note', status: 1, created: Time.now.to_i - 1.weeks.to_i..Time.now.to_i) .count(:all) @wiki_count = Revision.select(:timestamp) @@ -87,7 +87,7 @@ def activity .page(params[:page]) .group(['title', 'comments.cid']) # ONLY_FULL_GROUP_BY, issue #3120 - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) notes = notes.where('(node.status = 1 OR node.status = 4 OR node.status = 3)') comments = comments.where('comments.status = 1 OR comments.status = 4') elsif current_user diff --git a/app/controllers/images_controller.rb b/app/controllers/images_controller.rb index 7ecc766853..3abb230185 100644 --- a/app/controllers/images_controller.rb +++ b/app/controllers/images_controller.rb @@ -4,7 +4,7 @@ class ImagesController < ApplicationController respond_to :html, :xml, :json - before_action :require_user, only: %i[create new update delete] + before_action :require_user, only: %i(create new update delete) def shortlink params[:size] = params[:size] || params[:s] diff --git a/app/controllers/like_controller.rb b/app/controllers/like_controller.rb index 8de54b9a07..3cc5fa9bb8 100644 --- a/app/controllers/like_controller.rb +++ b/app/controllers/like_controller.rb @@ -2,7 +2,7 @@ class LikeController < ApplicationController respond_to :html, :xml, :json - before_action :require_user, only: %i[create delete] + before_action :require_user, only: %i(create delete) # list all recent likes def index diff --git a/app/controllers/map_controller.rb b/app/controllers/map_controller.rb index 1fa364f21a..0b425ffc62 100644 --- a/app/controllers/map_controller.rb +++ b/app/controllers/map_controller.rb @@ -77,7 +77,7 @@ def update end end - %i[lat lon].each do |coordinate| + %i(lat lon]).each do |coordinate| if coordinate_name = coordinate.to_s + ':' + @node.power_tag(coordinate.to_s) existing_coordinate_node_tag = NodeTag.where(nid: @node.id).joins(:tag).where('name = ?', coordinate_name).first existing_coordinate_node_tag.delete diff --git a/app/controllers/notes_controller.rb b/app/controllers/notes_controller.rb index d081174795..9fdaf4438c 100644 --- a/app/controllers/notes_controller.rb +++ b/app/controllers/notes_controller.rb @@ -2,8 +2,8 @@ class NotesController < ApplicationController respond_to :html - before_action :require_user, only: %i[create edit update delete rsvp publish_draft] - before_action :set_node, only: %i[show] + before_action :require_user, only: %i(create edit update delete rsvp publish_draft) + before_action :set_node, only: %i(show) def index @title = I18n.t('notes_controller.research_notes') @@ -20,7 +20,7 @@ def places LEFT OUTER JOIN community_tags ON community_tags.nid = node.nid LEFT OUTER JOIN term_data ON term_data.tid = community_tags.tid') .select('*, max(node_revisions.timestamp)') - .where(status: 1, type: %w[page place]) + .where(status: 1, type: %w(page place)) .includes(:revision, :tag) .references(:term_data) .where('term_data.name = ?', 'chapter') diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index 73ec879f6b..3f13f4c164 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class SearchController < ApplicationController - before_action :set_search_criteria, except: %i[notes wikis] + before_action :set_search_criteria, except: %i(notes wikis) def new; end diff --git a/app/controllers/stats_controller.rb b/app/controllers/stats_controller.rb index 03d2e3ee29..1bc71b5eb4 100644 --- a/app/controllers/stats_controller.rb +++ b/app/controllers/stats_controller.rb @@ -19,7 +19,7 @@ def range @start = start @end = fin Rails.cache.fetch("range-#{@start.to_i}-#{@end.to_i}", expires_in: 1.day) do - @notes = Node.published.select(%i[created type]) + @notes = Node.published.select(%i(created type)) .where(type: 'note', created: @start.to_i..@end.to_i) .size @wikis = Revision.published.select(:timestamp) diff --git a/app/controllers/subscription_controller.rb b/app/controllers/subscription_controller.rb index 0360ed4615..c20f3c63e8 100644 --- a/app/controllers/subscription_controller.rb +++ b/app/controllers/subscription_controller.rb @@ -2,7 +2,7 @@ class SubscriptionController < ApplicationController respond_to :html, :xml, :json - before_action :require_user, only: %i[create delete index digest] + before_action :require_user, only: %i(create delete index digest) def index @title = 'Subscriptions' diff --git a/app/controllers/tag_controller.rb b/app/controllers/tag_controller.rb index 373a4b72cf..ca2f7960d2 100644 --- a/app/controllers/tag_controller.rb +++ b/app/controllers/tag_controller.rb @@ -2,7 +2,7 @@ class TagController < ApplicationController respond_to :html, :xml, :json, :ics - before_action :require_user, only: %i[create delete add_parent] + before_action :require_user, only: %i(create delete add_parent) def index @toggle = params[:sort] || 'uses' @@ -105,7 +105,7 @@ def show 'node_revisions.timestamp DESC' end - node_type = if %w[questions note].include?(@node_type) + node_type = if %w(questions note).include?(@node_type) 'note' elsif @node_type == 'wiki' 'page' @@ -181,7 +181,7 @@ def show format.json do json = [] nodes.each do |node| - json << node.as_json(except: %i[path tags]) + json << node.as_json(except: %i(path tags)) json.last['path'] = 'https://' + request.host.to_s + node.path json.last['preview'] = node.body_preview(500) json.last['image'] = node.main_image.path(:large) if node.main_image @@ -242,7 +242,7 @@ def show_for_author format.json do json = [] nodes.each do |node| - json << node.as_json(except: %i[path tags]) + json << node.as_json(except: %i(path tags)) json.last['path'] = 'https://' + request.host .to_s + node.path json.last['preview'] = node.body_preview(500) @@ -371,7 +371,7 @@ def delete node_tag = NodeTag.where(nid: params[:nid], tid: params[:tid]).first node = Node.where(nid: params[:nid]).first # only admins, mods, and tag authors can delete other peoples' tags - if node_tag.uid == current_user.uid || logged_in_as(%w[admin moderator]) || node.uid == current_user.uid + if node_tag.uid == current_user.uid || logged_in_as(%w(admin moderator)) || node.uid == current_user.uid tag = Tag.joins(:node_tag) .select('term_data.name') @@ -466,7 +466,7 @@ def contributors # /contributors def contributors_index - @tagnames = %w[balloon-mapping spectrometer infragram air-quality water-quality] + @tagnames = %w(balloon-mapping spectrometer infragram air-quality water-quality) @tagdata = {} @tags = [] @@ -507,7 +507,7 @@ def location_modal end def gridsEmbed - if %w[nodes wikis activities questions upgrades notes].include?(params[:tagname].split(':').first) + if %w(nodes wikis activities questions upgrades notes).include?(params[:tagname].split(':').first) params[:t] = params[:tagname] params[:tagname] = '' end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index d8f436878d..3b536a3e6e 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -2,8 +2,8 @@ class UsersController < ApplicationController before_action :require_no_user, only: [:new] - before_action :require_user, only: %i[edit update save_settings] - before_action :set_user, only: %i[info followed following followers] + before_action :require_user, only: %i(edit update save_settings) + before_action :set_user, only: %i(info followed following followers) def new @user = User.new @@ -175,7 +175,7 @@ def profile @questions = @profile_user.questions .order('node.nid DESC') .paginate(page: params[:page], per_page: 24) - @likes = (@profile_user.liked_notes.includes(%i[tag comments]) + @profile_user.liked_pages) + @likes = (@profile_user.liked_notes.includes(%i(tag comments)) + @profile_user.liked_pages) .paginate(page: params[:page], per_page: 24) questions = Node.questions .where(status: 1) @@ -233,7 +233,7 @@ def likes @user = User.find_by(username: params[:id]) @title = 'Liked by ' + @user.name @notes = @user.liked_notes - .includes(%i[tag comments]) + .includes(%i(tag comments)) .paginate(page: params[:page], per_page: 24) @wikis = @user.liked_pages @tagnames = [] @@ -307,7 +307,7 @@ def comments .paginate(page: params[:page], per_page: 24) @normal_comments = comments.where('comments.status = 1') - if logged_in_as(%w[admin moderator]) + if logged_in_as(%w(admin moderator)) @moderated_comments = comments.where('comments.status = 4') end render template: 'comments/index' diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index 72de0915ce..ad5990fca4 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -3,7 +3,7 @@ require 'rss' class WikiController < ApplicationController - before_action :require_user, only: %i[new create edit update delete replace] + before_action :require_user, only: %i(new create edit update delete replace) def subdomain url = "//#{request.host}/wiki/" @@ -390,7 +390,7 @@ def techniques end def methods - @nodes = Node.where(status: 1, type: %w[page]) + @nodes = Node.where(status: 1, type: %w(page)) .where('term_data.name = ?', 'method') .includes(:revision, :tag) .references(:node_revision) @@ -398,7 +398,7 @@ def methods # deprecating the following in favor of javascript implementation in /app/assets/javascripts/methods.js if params[:topic] nids = @nodes.collect(&:nid) || [] - @notes = Node.where(status: 1, type: %w[page]) + @notes = Node.where(status: 1, type: %w(page)) .where('node.nid IN (?)', nids) .where('(type = "note" OR type = "page" OR type = "map") AND node.status = 1 AND (node.title LIKE ? OR node_revisions.title LIKE ? OR node_revisions.body LIKE ? OR term_data.name = ?)', '%' + params[:topic] + '%', @@ -411,7 +411,7 @@ def methods end if params[:topic] nids = @nodes.collect(&:nid) || [] - @nodes = Node.where(status: 1, type: %w[page]) + @nodes = Node.where(status: 1, type: %w(page)) .where('node.nid IN (?)', nids) .where('(type = "note" OR type = "page" OR type = "map") AND node.status = 1 AND (node.title LIKE ? OR node_revisions.title LIKE ? OR node_revisions.body LIKE ? OR term_data.name = ?)', '%' + params[:topic] + '%', @@ -424,7 +424,7 @@ def methods end @unpaginated = true - @topics = %w[ + @topics = %w( agriculture drinking-water fracking @@ -439,7 +439,7 @@ def methods urban-planning sensors community-organizing - ] + ) render template: 'wiki/methods' end From 73c24d5ebadeff9a956e2d4d9e11d4c03542e60f Mon Sep 17 00:00:00 2001 From: Dave Menninger Date: Thu, 17 Oct 2019 16:02:44 +0000 Subject: [PATCH 03/23] remove stray ] --- app/controllers/map_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/map_controller.rb b/app/controllers/map_controller.rb index 0b425ffc62..bc602be01a 100644 --- a/app/controllers/map_controller.rb +++ b/app/controllers/map_controller.rb @@ -77,7 +77,7 @@ def update end end - %i(lat lon]).each do |coordinate| + %i(lat lon).each do |coordinate| if coordinate_name = coordinate.to_s + ':' + @node.power_tag(coordinate.to_s) existing_coordinate_node_tag = NodeTag.where(nid: @node.id).joins(:tag).where('name = ?', coordinate_name).first existing_coordinate_node_tag.delete From 4da62e0c2450e6e3264104a5f2f96036352980d2 Mon Sep 17 00:00:00 2001 From: Dave Menninger Date: Thu, 17 Oct 2019 16:08:41 +0000 Subject: [PATCH 04/23] remove stray ) --- app/controllers/editor_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/editor_controller.rb b/app/controllers/editor_controller.rb index 0b0eca0c30..c9b10fbd9f 100644 --- a/app/controllers/editor_controller.rb +++ b/app/controllers/editor_controller.rb @@ -1,4 +1,4 @@ -#) frozen_string_literal: true +# frozen_string_literal: true class EditorController < ApplicationController before_action :require_user, only: %i(post rich legacy editor) From c5fa97a5682699c51c73d1b8674a5288bcca8c61 Mon Sep 17 00:00:00 2001 From: Dave Menninger Date: Thu, 17 Oct 2019 16:33:02 +0000 Subject: [PATCH 05/23] use safe navigation --- app/controllers/user_sessions_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/user_sessions_controller.rb b/app/controllers/user_sessions_controller.rb index 4372a6272c..51b89fc0fc 100644 --- a/app/controllers/user_sessions_controller.rb +++ b/app/controllers/user_sessions_controller.rb @@ -79,7 +79,7 @@ def handle_social_login_flow(auth) return_to = session[:openid_return_to] session[:openid_return_to] = nil redirect_to return_to + hash_params - elsif params[:return_to] && params[:return_to].split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + elsif params[:return_to]&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] = "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) redirect_to '/dashboard', notice: 'You have successfully signed in. Please change your password using the link sent to you via e-mail.' From 453a8371f010d4b39cb618f692f61761c769648f Mon Sep 17 00:00:00 2001 From: Dave Menninger Date: Thu, 17 Oct 2019 17:18:16 +0000 Subject: [PATCH 06/23] adjust indentation --- app/controllers/tag_controller.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/tag_controller.rb b/app/controllers/tag_controller.rb index ca2f7960d2..fae77d627e 100644 --- a/app/controllers/tag_controller.rb +++ b/app/controllers/tag_controller.rb @@ -358,8 +358,9 @@ def create render json: @output else flash[:notice] = I18n.t('tag_controller.tags_created_error', - tag_count: @output[:saved].length, - error_count: @output[:errors].length).html_safe + tag_count: @output[:saved].length, + error_count: @output[:errors].length + ).html_safe redirect_to node.path end end From a5813b7c0f684dff3383d6b963a0d3abc8831788 Mon Sep 17 00:00:00 2001 From: Dave Menninger Date: Thu, 17 Oct 2019 17:23:05 +0000 Subject: [PATCH 07/23] fix indentation --- app/controllers/tag_controller.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/tag_controller.rb b/app/controllers/tag_controller.rb index fae77d627e..2e691eb8a6 100644 --- a/app/controllers/tag_controller.rb +++ b/app/controllers/tag_controller.rb @@ -357,10 +357,11 @@ def create if request.xhr? render json: @output else - flash[:notice] = I18n.t('tag_controller.tags_created_error', + flash[:notice] = I18n.t( + 'tag_controller.tags_created_error', tag_count: @output[:saved].length, error_count: @output[:errors].length - ).html_safe + ).html_safe redirect_to node.path end end From fe55f99acdcf9dae3c035012582cd515cc57c622 Mon Sep 17 00:00:00 2001 From: Dave Menninger Date: Thu, 17 Oct 2019 17:26:08 +0000 Subject: [PATCH 08/23] fix indentation --- app/controllers/wiki_controller.rb | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index ad5990fca4..c4c6bc30a6 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -400,11 +400,13 @@ def methods nids = @nodes.collect(&:nid) || [] @notes = Node.where(status: 1, type: %w(page)) .where('node.nid IN (?)', nids) - .where('(type = "note" OR type = "page" OR type = "map") AND node.status = 1 AND (node.title LIKE ? OR node_revisions.title LIKE ? OR node_revisions.body LIKE ? OR term_data.name = ?)', - '%' + params[:topic] + '%', - '%' + params[:topic] + '%', - '%' + params[:topic] + '%', - params[:topic]) + .where( + '(type = "note" OR type = "page" OR type = "map") AND node.status = 1 AND (node.title LIKE ? OR node_revisions.title LIKE ? OR node_revisions.body LIKE ? OR term_data.name = ?)', + '%' + params[:topic] + '%', + '%' + params[:topic] + '%', + '%' + params[:topic] + '%', + params[:topic] + ) .includes(:revision, :tag) .references(:node_revision, :term_data) .order('node_revisions.timestamp DESC') @@ -413,11 +415,13 @@ def methods nids = @nodes.collect(&:nid) || [] @nodes = Node.where(status: 1, type: %w(page)) .where('node.nid IN (?)', nids) - .where('(type = "note" OR type = "page" OR type = "map") AND node.status = 1 AND (node.title LIKE ? OR node_revisions.title LIKE ? OR node_revisions.body LIKE ? OR term_data.name = ?)', - '%' + params[:topic] + '%', - '%' + params[:topic] + '%', - '%' + params[:topic] + '%', - params[:topic]) + .where( + '(type = "note" OR type = "page" OR type = "map") AND node.status = 1 AND (node.title LIKE ? OR node_revisions.title LIKE ? OR node_revisions.body LIKE ? OR term_data.name = ?)', + '%' + params[:topic] + '%', + '%' + params[:topic] + '%', + '%' + params[:topic] + '%', + params[:topic] + ) .includes(:revision, :tag) .references(:node_revision, :term_data) .order('node_revisions.timestamp DESC') From a03b4e15fe9af61ce3b1a587b9cfe374503ecd2a Mon Sep 17 00:00:00 2001 From: Dave Menninger Date: Thu, 17 Oct 2019 20:23:06 +0000 Subject: [PATCH 09/23] use safe navigation --- app/controllers/users_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 3b536a3e6e..cad3ffeb39 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -27,7 +27,7 @@ def create flash[:warning] = 'We tried and failed to send you a welcome email, but your account was created anyhow. Sorry!' end flash[:notice] = I18n.t('users_controller.registration_successful') - if params[:return_to] && params[:return_to].split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + if params[:return_to]&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] += "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) elsif params[:return_to] && params[:return_to] != '/signup' && params[:return_to] != '/login' From 0ab59bd75db7ccf240d176b3b4fc5e9a71d4e0a5 Mon Sep 17 00:00:00 2001 From: davemenninger Date: Thu, 17 Oct 2019 20:30:11 +0000 Subject: [PATCH 10/23] test for params being nil --- app/controllers/users_controller.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index cad3ffeb39..4d92dfe992 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -27,12 +27,16 @@ def create flash[:warning] = 'We tried and failed to send you a welcome email, but your account was created anyhow. Sorry!' end flash[:notice] = I18n.t('users_controller.registration_successful') - if params[:return_to]&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] - flash[:notice] += "You are now following '#{params[:return_to].split('/')[4]}'." - subscribe_multiple_tag(params[:return_to].split('/')[4]) - elsif params[:return_to] && params[:return_to] != '/signup' && params[:return_to] != '/login' - flash[:notice] += ' ' + I18n.t('users_controller.continue_where_you_left_off', url1: params[:return_to].to_s) + + if !params.nil? # why is params nil sometimes? + if params[:return_to]&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + flash[:notice] += "You are now following '#{params[:return_to].split('/')[4]}'." + subscribe_multiple_tag(params[:return_to].split('/')[4]) + elsif params[:return_to] && params[:return_to] != '/signup' && params[:return_to] != '/login' + flash[:notice] += ' ' + I18n.t('users_controller.continue_where_you_left_off', url1: params[:return_to].to_s) + end end + flash[:notice] = flash[:notice].html_safe flash[:warning] = I18n.t('users_controller.spectralworkbench_or_mapknitter', url1: "#{session[:openid_return_to]}'").html_safe if session[:openid_return_to] session[:openid_return_to] = nil From 27a8e4c4b79f870a4aed7329afa50674303f29be Mon Sep 17 00:00:00 2001 From: davemenninger Date: Thu, 17 Oct 2019 20:32:01 +0000 Subject: [PATCH 11/23] move the conditional to the user sessions controller --- app/controllers/user_sessions_controller.rb | 2 +- app/controllers/users_controller.rb | 14 +++++--------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/app/controllers/user_sessions_controller.rb b/app/controllers/user_sessions_controller.rb index 51b89fc0fc..21c4c788a9 100644 --- a/app/controllers/user_sessions_controller.rb +++ b/app/controllers/user_sessions_controller.rb @@ -79,7 +79,7 @@ def handle_social_login_flow(auth) return_to = session[:openid_return_to] session[:openid_return_to] = nil redirect_to return_to + hash_params - elsif params[:return_to]&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + elsif params && params[:return_to]&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] = "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) redirect_to '/dashboard', notice: 'You have successfully signed in. Please change your password using the link sent to you via e-mail.' diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 4d92dfe992..cad3ffeb39 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -27,16 +27,12 @@ def create flash[:warning] = 'We tried and failed to send you a welcome email, but your account was created anyhow. Sorry!' end flash[:notice] = I18n.t('users_controller.registration_successful') - - if !params.nil? # why is params nil sometimes? - if params[:return_to]&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] - flash[:notice] += "You are now following '#{params[:return_to].split('/')[4]}'." - subscribe_multiple_tag(params[:return_to].split('/')[4]) - elsif params[:return_to] && params[:return_to] != '/signup' && params[:return_to] != '/login' - flash[:notice] += ' ' + I18n.t('users_controller.continue_where_you_left_off', url1: params[:return_to].to_s) - end + if params[:return_to]&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + flash[:notice] += "You are now following '#{params[:return_to].split('/')[4]}'." + subscribe_multiple_tag(params[:return_to].split('/')[4]) + elsif params[:return_to] && params[:return_to] != '/signup' && params[:return_to] != '/login' + flash[:notice] += ' ' + I18n.t('users_controller.continue_where_you_left_off', url1: params[:return_to].to_s) end - flash[:notice] = flash[:notice].html_safe flash[:warning] = I18n.t('users_controller.spectralworkbench_or_mapknitter', url1: "#{session[:openid_return_to]}'").html_safe if session[:openid_return_to] session[:openid_return_to] = nil From ec1059b43875d87e82dd9a1364ee6ac89a6ba276 Mon Sep 17 00:00:00 2001 From: davemenninger Date: Thu, 17 Oct 2019 20:40:56 +0000 Subject: [PATCH 12/23] change unless to a ternary --- app/controllers/user_sessions_controller.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/controllers/user_sessions_controller.rb b/app/controllers/user_sessions_controller.rb index 21c4c788a9..364470b225 100644 --- a/app/controllers/user_sessions_controller.rb +++ b/app/controllers/user_sessions_controller.rb @@ -145,11 +145,10 @@ def handle_site_login_flow remember_me: params[:user_session][:remember_me]) @user_session.save do |result| if result - hash_params = '' - - unless params[:hash_params].to_s.empty? - hash_params = URI.parse('#' + params[:hash_params]).to_s - end + hash_params = ( params[:hash_params].to_s.empty? ? + '' : + URI.parse('#' + params[:hash_params]).to_s + ) # replace this with temporarily saving pwd in session, # and automatically saving it in the user record after login is completed From 44bf309235a9a0523e9b30a41d85d37dcd352a7b Mon Sep 17 00:00:00 2001 From: davemenninger Date: Thu, 17 Oct 2019 20:43:28 +0000 Subject: [PATCH 13/23] Revert "change unless to a ternary" This reverts commit ec1059b43875d87e82dd9a1364ee6ac89a6ba276. --- app/controllers/user_sessions_controller.rb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/controllers/user_sessions_controller.rb b/app/controllers/user_sessions_controller.rb index 364470b225..21c4c788a9 100644 --- a/app/controllers/user_sessions_controller.rb +++ b/app/controllers/user_sessions_controller.rb @@ -145,10 +145,11 @@ def handle_site_login_flow remember_me: params[:user_session][:remember_me]) @user_session.save do |result| if result - hash_params = ( params[:hash_params].to_s.empty? ? - '' : - URI.parse('#' + params[:hash_params]).to_s - ) + hash_params = '' + + unless params[:hash_params].to_s.empty? + hash_params = URI.parse('#' + params[:hash_params]).to_s + end # replace this with temporarily saving pwd in session, # and automatically saving it in the user record after login is completed From 34982e839833b47dd686d9251a5e6974643b614f Mon Sep 17 00:00:00 2001 From: davemenninger Date: Thu, 17 Oct 2019 21:04:24 +0000 Subject: [PATCH 14/23] remove safe navigation --- app/controllers/user_sessions_controller.rb | 2 +- app/controllers/users_controller.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/user_sessions_controller.rb b/app/controllers/user_sessions_controller.rb index 21c4c788a9..4372a6272c 100644 --- a/app/controllers/user_sessions_controller.rb +++ b/app/controllers/user_sessions_controller.rb @@ -79,7 +79,7 @@ def handle_social_login_flow(auth) return_to = session[:openid_return_to] session[:openid_return_to] = nil redirect_to return_to + hash_params - elsif params && params[:return_to]&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + elsif params[:return_to] && params[:return_to].split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] = "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) redirect_to '/dashboard', notice: 'You have successfully signed in. Please change your password using the link sent to you via e-mail.' diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index cad3ffeb39..3b536a3e6e 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -27,7 +27,7 @@ def create flash[:warning] = 'We tried and failed to send you a welcome email, but your account was created anyhow. Sorry!' end flash[:notice] = I18n.t('users_controller.registration_successful') - if params[:return_to]&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + if params[:return_to] && params[:return_to].split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] += "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) elsif params[:return_to] && params[:return_to] != '/signup' && params[:return_to] != '/login' From 0c5b275f1b92a69b69ce8e3bd991a3d803f05107 Mon Sep 17 00:00:00 2001 From: davemenninger Date: Thu, 17 Oct 2019 21:11:49 +0000 Subject: [PATCH 15/23] really extra safe navigation --- app/controllers/user_sessions_controller.rb | 2 +- app/controllers/users_controller.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/user_sessions_controller.rb b/app/controllers/user_sessions_controller.rb index 4372a6272c..e234ad06a1 100644 --- a/app/controllers/user_sessions_controller.rb +++ b/app/controllers/user_sessions_controller.rb @@ -79,7 +79,7 @@ def handle_social_login_flow(auth) return_to = session[:openid_return_to] session[:openid_return_to] = nil redirect_to return_to + hash_params - elsif params[:return_to] && params[:return_to].split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + elsif params&.send(:[],:return_to)&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] = "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) redirect_to '/dashboard', notice: 'You have successfully signed in. Please change your password using the link sent to you via e-mail.' diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 3b536a3e6e..661a564de4 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -27,7 +27,7 @@ def create flash[:warning] = 'We tried and failed to send you a welcome email, but your account was created anyhow. Sorry!' end flash[:notice] = I18n.t('users_controller.registration_successful') - if params[:return_to] && params[:return_to].split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + if params&.send(:[],:return_to)&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] += "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) elsif params[:return_to] && params[:return_to] != '/signup' && params[:return_to] != '/login' From 09bf9c5af61c3f6a21daa3c80462917f44150f64 Mon Sep 17 00:00:00 2001 From: davemenninger Date: Thu, 17 Oct 2019 21:15:21 +0000 Subject: [PATCH 16/23] add spaces after commas --- app/controllers/user_sessions_controller.rb | 2 +- app/controllers/users_controller.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/user_sessions_controller.rb b/app/controllers/user_sessions_controller.rb index e234ad06a1..777996b995 100644 --- a/app/controllers/user_sessions_controller.rb +++ b/app/controllers/user_sessions_controller.rb @@ -79,7 +79,7 @@ def handle_social_login_flow(auth) return_to = session[:openid_return_to] session[:openid_return_to] = nil redirect_to return_to + hash_params - elsif params&.send(:[],:return_to)&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + elsif params&.send(:[], :return_to)&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] = "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) redirect_to '/dashboard', notice: 'You have successfully signed in. Please change your password using the link sent to you via e-mail.' diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 661a564de4..f460479043 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -27,7 +27,7 @@ def create flash[:warning] = 'We tried and failed to send you a welcome email, but your account was created anyhow. Sorry!' end flash[:notice] = I18n.t('users_controller.registration_successful') - if params&.send(:[],:return_to)&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + if params&.send(:[], :return_to)&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] += "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) elsif params[:return_to] && params[:return_to] != '/signup' && params[:return_to] != '/login' From 7364cbb126947ea3001ada2adf6b6bbce9661509 Mon Sep 17 00:00:00 2001 From: davemenninger Date: Thu, 17 Oct 2019 21:39:49 +0000 Subject: [PATCH 17/23] even more safe navigation --- app/controllers/users_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index f460479043..6ce05f3779 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -27,7 +27,7 @@ def create flash[:warning] = 'We tried and failed to send you a welcome email, but your account was created anyhow. Sorry!' end flash[:notice] = I18n.t('users_controller.registration_successful') - if params&.send(:[], :return_to)&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + if params&.send(:[], :return_to)&.split('/')&.send(:[], 0..3) == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] += "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) elsif params[:return_to] && params[:return_to] != '/signup' && params[:return_to] != '/login' From feab62bac12636eab5decf3e94768ff44f7eb986 Mon Sep 17 00:00:00 2001 From: davemenninger Date: Thu, 17 Oct 2019 22:06:29 +0000 Subject: [PATCH 18/23] even more safe navigation --- app/controllers/user_sessions_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/user_sessions_controller.rb b/app/controllers/user_sessions_controller.rb index 777996b995..d0b5713d24 100644 --- a/app/controllers/user_sessions_controller.rb +++ b/app/controllers/user_sessions_controller.rb @@ -79,7 +79,7 @@ def handle_social_login_flow(auth) return_to = session[:openid_return_to] session[:openid_return_to] = nil redirect_to return_to + hash_params - elsif params&.send(:[], :return_to)&.split('/')[0..3] == ['', 'subscribe', 'multiple', 'tag'] + elsif params&.send(:[], :return_to)&.split('/')&.send(:[], 0..3) == ['', 'subscribe', 'multiple', 'tag'] flash[:notice] = "You are now following '#{params[:return_to].split('/')[4]}'." subscribe_multiple_tag(params[:return_to].split('/')[4]) redirect_to '/dashboard', notice: 'You have successfully signed in. Please change your password using the link sent to you via e-mail.' From 282e152da6ef63502812f29925369c6771bb1b90 Mon Sep 17 00:00:00 2001 From: davemenninger Date: Thu, 17 Oct 2019 22:39:00 +0000 Subject: [PATCH 19/23] extract different reset methods --- app/controllers/users_controller.rb | 65 ++++++++++++++++------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 6ce05f3779..14e705d1c3 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -263,41 +263,48 @@ def rss def reset if params[:key] && !params[:key].nil? - @user = User.find_by(reset_key: params[:key]) - if @user - if params[:user] && params[:user][:password] - if @user.username.casecmp(params[:user][:username].downcase).zero? - @user.password = params[:user][:password] - @user.password_confirmation = params[:user][:password] - @user.reset_key = nil - if @user.changed? && @user.save - flash[:notice] = I18n.t('users_controller.password_change_success') - @user.password_checker = 0 - redirect_to '/dashboard' - else - flash[:error] = I18n.t('users_controller.password_reset_failed').html_safe - redirect_to '/' - end + reset_by_key + elsif params[:email] + reset_by_email + end + end + + def reset_by_key + @user = User.find_by(reset_key: params[:key]) + if @user + if params[:user] && params[:user][:password] + if @user.username.casecmp(params[:user][:username].downcase).zero? + @user.password = params[:user][:password] + @user.password_confirmation = params[:user][:password] + @user.reset_key = nil + if @user.changed? && @user.save + flash[:notice] = I18n.t('users_controller.password_change_success') + @user.password_checker = 0 + redirect_to '/dashboard' else - flash[:error] = I18n.t('users_controller.password_change_failed') + flash[:error] = I18n.t('users_controller.password_reset_failed').html_safe + redirect_to '/' end + else + flash[:error] = I18n.t('users_controller.password_change_failed') end - else - flash[:error] = I18n.t('users_controller.password_reset_failed_no_user').html_safe - redirect_to '/' end + else + flash[:error] = I18n.t('users_controller.password_reset_failed_no_user').html_safe + redirect_to '/' + end + end - elsif params[:email] - user = User.find_by(email: params[:email]) - if user - key = user.generate_reset_key - user.save - # send key to user email - PasswordResetMailer.reset_notify(user, key).deliver_now unless user.nil? # respond the same to both successes and failures; security - end - flash[:notice] = I18n.t('users_controller.password_reset_email') - redirect_to '/login' + def reset_by_email + user = User.find_by(email: params[:email]) + if user + key = user.generate_reset_key + user.save + # send key to user email + PasswordResetMailer.reset_notify(user, key).deliver_now unless user.nil? # respond the same to both successes and failures; security end + flash[:notice] = I18n.t('users_controller.password_reset_email') + redirect_to '/login' end def comments From 86836815b9d28c4068ae25097e4123493738a725 Mon Sep 17 00:00:00 2001 From: davemenninger Date: Thu, 17 Oct 2019 22:48:18 +0000 Subject: [PATCH 20/23] change nested conditionals to guard clauses --- app/controllers/users_controller.rb | 41 ++++++++++++++++------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 14e705d1c3..b0163dab49 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -271,27 +271,30 @@ def reset def reset_by_key @user = User.find_by(reset_key: params[:key]) - if @user - if params[:user] && params[:user][:password] - if @user.username.casecmp(params[:user][:username].downcase).zero? - @user.password = params[:user][:password] - @user.password_confirmation = params[:user][:password] - @user.reset_key = nil - if @user.changed? && @user.save - flash[:notice] = I18n.t('users_controller.password_change_success') - @user.password_checker = 0 - redirect_to '/dashboard' - else - flash[:error] = I18n.t('users_controller.password_reset_failed').html_safe - redirect_to '/' - end - else - flash[:error] = I18n.t('users_controller.password_change_failed') - end - end - else + + unless @user flash[:error] = I18n.t('users_controller.password_reset_failed_no_user').html_safe redirect_to '/' + return + end + + return unless params[:user] && params[:user][:password] + + unless @user.username.casecmp(params[:user][:username].downcase).zero? + flash[:error] = I18n.t('users_controller.password_change_failed') + return + end + + @user.password = params[:user][:password] + @user.password_confirmation = params[:user][:password] + @user.reset_key = nil + if @user.changed? && @user.save + flash[:notice] = I18n.t('users_controller.password_change_success') + @user.password_checker = 0 + redirect_to '/dashboard' + else + flash[:error] = I18n.t('users_controller.password_reset_failed').html_safe + redirect_to '/' end end From 7033365043556ff50497c22bca74fd3fa89f72b3 Mon Sep 17 00:00:00 2001 From: davemenninger Date: Fri, 18 Oct 2019 00:19:24 +0000 Subject: [PATCH 21/23] remove an else clause --- app/controllers/users_controller.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index b0163dab49..cc1c0eaf8b 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -288,14 +288,16 @@ def reset_by_key @user.password = params[:user][:password] @user.password_confirmation = params[:user][:password] @user.reset_key = nil + if @user.changed? && @user.save flash[:notice] = I18n.t('users_controller.password_change_success') @user.password_checker = 0 redirect_to '/dashboard' - else - flash[:error] = I18n.t('users_controller.password_reset_failed').html_safe - redirect_to '/' + return end + + flash[:error] = I18n.t('users_controller.password_reset_failed').html_safe + redirect_to '/' end def reset_by_email From 493594051514baf804e2b9c0f5b609a2f76511e5 Mon Sep 17 00:00:00 2001 From: davemenninger Date: Fri, 18 Oct 2019 00:35:37 +0000 Subject: [PATCH 22/23] break one guard into two; reverse if/unless --- app/controllers/users_controller.rb | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index cc1c0eaf8b..a3ce2eb806 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -278,26 +278,27 @@ def reset_by_key return end - return unless params[:user] && params[:user][:password] + return unless params[:user] unless @user.username.casecmp(params[:user][:username].downcase).zero? flash[:error] = I18n.t('users_controller.password_change_failed') return end + return unless params[:user][:password] + @user.password = params[:user][:password] @user.password_confirmation = params[:user][:password] @user.reset_key = nil - if @user.changed? && @user.save - flash[:notice] = I18n.t('users_controller.password_change_success') - @user.password_checker = 0 - redirect_to '/dashboard' - return + unless @user.changed? && @user.save + flash[:error] = I18n.t('users_controller.password_reset_failed').html_safe + redirect_to '/' end - flash[:error] = I18n.t('users_controller.password_reset_failed').html_safe - redirect_to '/' + flash[:notice] = I18n.t('users_controller.password_change_success') + @user.password_checker = 0 + redirect_to '/dashboard' end def reset_by_email From fb37d11692caf29419fe9631324c495dc7b3991d Mon Sep 17 00:00:00 2001 From: davemenninger Date: Fri, 18 Oct 2019 00:46:12 +0000 Subject: [PATCH 23/23] fix returns --- app/controllers/users_controller.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index a3ce2eb806..bffd192a65 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -278,15 +278,13 @@ def reset_by_key return end - return unless params[:user] + return unless params[:user] && params[:user][:password] unless @user.username.casecmp(params[:user][:username].downcase).zero? flash[:error] = I18n.t('users_controller.password_change_failed') return end - return unless params[:user][:password] - @user.password = params[:user][:password] @user.password_confirmation = params[:user][:password] @user.reset_key = nil @@ -294,6 +292,7 @@ def reset_by_key unless @user.changed? && @user.save flash[:error] = I18n.t('users_controller.password_reset_failed').html_safe redirect_to '/' + return end flash[:notice] = I18n.t('users_controller.password_change_success')