diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index bd873c258..6d7a9d8c8 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,6 +1,6 @@ class UsersController < ApplicationController respond_to :html, :xml, :json - before_filter :member_only, :only => [:edit, :update] + before_filter :member_only, :only => [:edit, :update, :upgrade] rescue_from User::PrivilegeError, :with => "static/access_denied" def new @@ -53,6 +53,12 @@ class UsersController < ApplicationController redirect_to user_path(@user), :notice => "Email was sent" end + + def cache + @user = User.find(params[:id]) + @user.update_cache + render :nothing => true + end private def check_privilege(user) diff --git a/app/logical/popular_post_explorer.rb b/app/logical/popular_post_explorer.rb index 44bdf54fd..4f2350fc1 100644 --- a/app/logical/popular_post_explorer.rb +++ b/app/logical/popular_post_explorer.rb @@ -9,8 +9,7 @@ class PopularPostExplorer private def load_posts - # Post.tag_match("order:rank").where("image_width >= ?", Danbooru.config.medium_image_width).limit(5).offset(offset) - @posts = Post.where("image_width >= ?", Danbooru.config.medium_image_width).limit(50) + Post.tag_match("order:rank").where("image_width >= ?", Danbooru.config.medium_image_width).limit(5).offset(offset) end def sort_posts diff --git a/app/models/user.rb b/app/models/user.rb index 7695f9d43..f2ac0ec03 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -25,10 +25,12 @@ class User < ActiveRecord::Base validates_confirmation_of :password validates_presence_of :email, :if => lambda {|rec| rec.new_record? && Danbooru.config.enable_email_verification?} validate :validate_ip_addr_is_not_banned, :on => :create + validate :validate_feedback_on_name_change, :on => :update before_validation :normalize_blacklisted_tags before_create :encrypt_password_on_create before_update :encrypt_password_on_update after_save :update_cache + after_update :update_remote_cache before_create :promote_to_admin_if_first_user has_many :feedback, :class_name => "UserFeedback", :dependent => :destroy has_many :posts, :foreign_key => "uploader_id" @@ -71,7 +73,7 @@ class User < ActiveRecord::Base module ClassMethods def name_to_id(name) - Cache.get("uni:#{Cache.sanitize(name)}") do + Cache.get("uni:#{Cache.sanitize(name)}", 1.hour) do select_value_sql("SELECT id FROM users WHERE lower(name) = ?", name.downcase) end end @@ -98,6 +100,21 @@ class User < ActiveRecord::Base def update_cache Cache.put("uin:#{id}", name) end + + def update_remote_cache + if name_changed? + Danbooru.config.other_server_hosts.each do |server| + Net::HTTP.delete(URI.parse("http://#{server}/users/#{id}/cache")) + end + end + end + + def validate_feedback_on_name_change + if feedback.negative.count > 0 && name_changed? + self.errors[:base] << "You can not change your name if you have any negative feedback" + return false + end + end end module PasswordMethods diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb index bfd5ea468..85f7b2488 100644 --- a/app/views/users/edit.html.erb +++ b/app/views/users/edit.html.erb @@ -4,11 +4,14 @@ <%= simple_form_for @user do |f| %>