From 3c8ae643b2cd10a9da6022e3d5c34e8988408601 Mon Sep 17 00:00:00 2001
From: Sam <sam.saffron@gmail.com>
Date: Tue, 4 Aug 2015 12:56:20 +1000
Subject: [PATCH] UX: improve handling of users in queued-posts

- Display an icon on already blocked users
- Automatically unblock users that you approve
---
 .../javascripts/discourse/templates/queued-posts.hbs     | 4 +++-
 app/models/queued_post.rb                                | 4 ++++
 app/serializers/queued_post_serializer.rb                | 2 +-
 config/locales/client.en.yml                             | 1 +
 spec/controllers/posts_controller_spec.rb                | 9 +++++++++
 5 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/app/assets/javascripts/discourse/templates/queued-posts.hbs b/app/assets/javascripts/discourse/templates/queued-posts.hbs
index 400937caf..5fc07e042 100644
--- a/app/assets/javascripts/discourse/templates/queued-posts.hbs
+++ b/app/assets/javascripts/discourse/templates/queued-posts.hbs
@@ -6,7 +6,6 @@
           {{#user-link user=ctrl.post.user}}
             {{avatar ctrl.post.user imageSize="large"}}
           {{/user-link}}
-
         </div>
         <div class='cooked'>
           <div class='names'>
@@ -14,6 +13,9 @@
               {{#user-link user=ctrl.post.user}}
                 {{ctrl.post.user.username}}
               {{/user-link}}
+              {{#if ctrl.post.user.blocked}}
+              <i class='fa fa-ban' title='{{i18n "user.blocked_tooltip"}}'></i>
+              {{/if}}
             </span>
           </div>
           <div class='post-info'>
diff --git a/app/models/queued_post.rb b/app/models/queued_post.rb
index 39c51a354..b61cab8c3 100644
--- a/app/models/queued_post.rb
+++ b/app/models/queued_post.rb
@@ -66,6 +66,10 @@ class QueuedPost < ActiveRecord::Base
 
       creator = PostCreator.new(user, create_options.merge(skip_validations: true))
       created_post = creator.create
+
+      if user.blocked?
+        user.update_columns(blocked: false)
+      end
     end
 
     DiscourseEvent.trigger(:approved_post, self)
diff --git a/app/serializers/queued_post_serializer.rb b/app/serializers/queued_post_serializer.rb
index 86b36bbda..43892fa29 100644
--- a/app/serializers/queued_post_serializer.rb
+++ b/app/serializers/queued_post_serializer.rb
@@ -13,7 +13,7 @@ class QueuedPostSerializer < ApplicationSerializer
              :category_id,
              :can_delete_user
 
-  has_one :user, serializer: BasicUserSerializer
+  has_one :user, serializer: AdminUserListSerializer
   has_one :topic, serializer: BasicTopicSerializer
 
   def category_id
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index 0c57a88f2..844729482 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -437,6 +437,7 @@ en:
       admin: "{{user}} is an admin"
       moderator_tooltip: "This user is a moderator"
       admin_tooltip: "This user is an admin"
+      blocked_tooltip: "This user is blocked"
       suspended_notice: "This user is suspended until {{date}}."
       suspended_reason: "Reason: "
       github_profile: "Github"
diff --git a/spec/controllers/posts_controller_spec.rb b/spec/controllers/posts_controller_spec.rb
index 183045d42..7e1c617fd 100644
--- a/spec/controllers/posts_controller_spec.rb
+++ b/spec/controllers/posts_controller_spec.rb
@@ -492,8 +492,17 @@ describe PostsController do
 
         expect(parsed["action"]).to eq("enqueued")
 
+        user.reload
         expect(user.blocked).to eq(true)
 
+        qp = QueuedPost.first
+
+        mod = Fabricate(:moderator)
+        qp.approve!(mod)
+
+        user.reload
+        expect(user.blocked).to eq(false)
+
       end
 
       it 'creates the post' do