Skip to content

Commit

Permalink
Merge branch 'develop' into art/1429/remove-jquery
Browse files Browse the repository at this point in the history
  • Loading branch information
Oaphi authored Oct 26, 2024
2 parents 731c0fd + 73f5473 commit 6eff8ca
Show file tree
Hide file tree
Showing 8 changed files with 75 additions and 11 deletions.
2 changes: 1 addition & 1 deletion app/controllers/flags_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def new
end

def history
@user = User.find(params[:id])
@user = helpers.user_with_me params[:id]
unless @user == current_user || (current_user.is_admin || current_user.is_moderator)
not_found
return
Expand Down
11 changes: 10 additions & 1 deletion app/controllers/users_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,10 @@ def posts
end
end

def my_network
redirect_to network_path(current_user)
end

def network
@communities = Community.all
render layout: 'without_sidebar'
Expand Down Expand Up @@ -632,7 +636,12 @@ def filter_params
end

def set_user
@user = user_scope.find_by(id: params[:id])
user_id = if params[:id] == 'me' && user_signed_in?
current_user.id
else
params[:id]
end
@user = user_scope.find_by(id: user_id)
not_found if @user.nil?
end

Expand Down
13 changes: 13 additions & 0 deletions app/helpers/users_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,17 @@ def sso_sign_in_enabled?
def devise_sign_in_enabled?
SiteSetting['MixedSignIn'] || !sso_sign_in_enabled?
end

##
# Returns a user corresponding to the ID provided, with the caveat that if +user_id+ is 'me' and there is a user
# signed in, the signed in user will be returned. Use for /users/me links.
# @param [String] user_id The user ID to find, from +params+
# @return [User] The User object
def user_with_me(user_id)
if user_id == 'me' && user_signed_in?
current_user
else
User.find(user_id)
end
end
end
5 changes: 0 additions & 5 deletions app/models/community_user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,6 @@ def suspended?
false
end

# All undeleted posts on this community by this user.
def post_count
Post.unscoped.where(community_id: community_id).where(user: user).undeleted.count
end

# Calculation functions for privilege scores
# These are quite expensive, so we'll cache them for a while
def post_score
Expand Down
17 changes: 14 additions & 3 deletions app/models/post.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class Post < ApplicationRecord
has_many :reactions

counter_culture :parent, column_name: proc { |model| model.deleted? ? nil : 'answer_count' }
counter_culture [:user, :community_user], column_name: proc { |model| model.deleted? ? nil : 'post_count' }

serialize :tags_cache, Array

Expand Down Expand Up @@ -200,13 +201,21 @@ def reaction_list

private

# Updates the tags association from the tags_cache.
##
# Before-validation callback. Update the tags association from the tags_cache.
def update_tag_associations
tags_cache.each do |tag_name|
tag = Tag.find_or_create_by name: tag_name, tag_set: category.tag_set
tag, name_used = Tag.find_or_create_synonymized name: tag_name, tag_set: category.tag_set
unless tags.include? tag
tags << tag
end

# If the tags_cache doesn't include name_used then tag_name was a synonym - remove the synonym from tags_cache
# and add the primary for it instead.
unless tags_cache.include? name_used
tags_cache.delete tag_name
tags_cache << name_used
end
end
tags.each do |tag|
unless tags_cache.include? tag.name
Expand All @@ -215,10 +224,12 @@ def update_tag_associations
end
end

##
# Helper method for #check_attribution_notice validator. Produces a text-only attribution notice either based on
# values given or the current state of the post for use in post histories.
# @param source [String, Nil] where the post originally came from
# @param name [String, Nil] the name of the license
# @param url [String, Nil] the url of the license
#
# @return [String] an attribution notice corresponding to this post
def attribution_text(source = nil, name = nil, url = nil)
"Source: #{source || att_source}\nLicense name: #{name || att_license_name}\n" \
Expand Down
30 changes: 30 additions & 0 deletions app/models/tag.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,36 @@ def self.search(term)
.distinct
end

##
# Find or create a tag within a given tag set, considering synonyms. If a synonym is given as +name+ then the primary
# tag for it is returned instead.
# @param name [String] A tag name to find or create.
# @param tag_set [TagSet] The tag set within which to search for or create the tag.
# @return [Array(Tag, String)] The found or created tag, and the final name used. If a synonymized name was given as
# +name+ then this will be the primary tag name.
#
# @example +name+ does not yet exist: a new Tag is created
# Tag.find_or_create_synonymized name: 'new-tag', tag_set: ...
# # => [Tag, 'new-tag']
#
# @example +name+ already exists: the existing Tag is returned
# Tag.find_or_create_synonymized name: 'existing-tag', tag_set: ...
# # => [Tag, 'existing-tag']
#
# @example +name+ is a synonym of 'other-tag': the Tag for 'other-tag' is returned
# Tag.find_or_create_synonymized name: 'synonym', tag_set: ...
# # => [Tag, 'other-tag']
def self.find_or_create_synonymized(name:, tag_set:)
existing = Tag.find_by(name: name, tag_set: tag_set)
if existing.nil?
synonyms = TagSynonym.joins(:tag).where(name: name, tags: { tag_set: tag_set })
synonymized_name = synonyms.exists? ? synonyms.first.tag.name : name
[Tag.find_or_create_by(name: synonymized_name, tag_set: tag_set), synonymized_name]
else
[existing, name]
end
end

def all_children
query = File.read(Rails.root.join('db/scripts/tag_children.sql'))
query = query.gsub('$ParentId', id.to_s)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class AddPostCountToCommunityUsers < ActiveRecord::Migration[7.0]
def change
add_column :community_users, :post_count, :integer, default: 0, null: false
end
end
3 changes: 2 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema[7.0].define(version: 2024_04_05_113618) do
ActiveRecord::Schema[7.0].define(version: 2024_10_20_193053) do
create_table "abilities", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
t.bigint "community_id"
t.string "name"
Expand Down Expand Up @@ -226,6 +226,7 @@
t.boolean "deleted", default: false, null: false
t.datetime "deleted_at", precision: nil
t.bigint "deleted_by_id"
t.integer "post_count", default: 0, null: false
t.index ["community_id"], name: "index_community_users_on_community_id"
t.index ["deleted_by_id"], name: "index_community_users_on_deleted_by_id"
t.index ["user_id"], name: "index_community_users_on_user_id"
Expand Down

0 comments on commit 6eff8ca

Please sign in to comment.