From 1ce7a40084e5471a0452791dc843ccd277dbff58 Mon Sep 17 00:00:00 2001
From: Robin Ward <robin.ward@gmail.com>
Date: Tue, 9 Apr 2013 12:33:32 -0400
Subject: [PATCH] Revert "Merge pull request #677 from
 kubabrecka/localization_user_actions2"

This reverts commit c3a426930b6ffeaf45a3b31f3c5c42436106a220, reversing
changes made to 9f9072bd9d6590501f3a9c845cca47863e3b0e99.
---
 .../javascripts/discourse/models/user.js      |  3 +-
 .../discourse/models/user_action.js           | 65 -------------------
 .../templates/user/stream.js.handlebars       | 26 +++++++-
 app/models/user_action.rb                     | 60 ++++++++++++++++-
 config/locales/client.en.yml                  | 29 +--------
 config/locales/server.en.yml                  | 25 +++++++
 6 files changed, 111 insertions(+), 97 deletions(-)

diff --git a/app/assets/javascripts/discourse/models/user.js b/app/assets/javascripts/discourse/models/user.js
index cd53a9bf5..bd368234c 100644
--- a/app/assets/javascripts/discourse/models/user.js
+++ b/app/assets/javascripts/discourse/models/user.js
@@ -347,7 +347,6 @@ Discourse.User = Discourse.Model.extend({
         var stat = Em.Object.create(s);
         stat.set('isPM', stat.get('action_type') === Discourse.UserAction.NEW_PRIVATE_MESSAGE ||
                          stat.get('action_type') === Discourse.UserAction.GOT_PRIVATE_MESSAGE);
-        stat.set('description', Em.String.i18n('user_action_groups.' + stat.get('action_type')));
         return stat;
       }));
 
@@ -406,7 +405,7 @@ Discourse.User.reopenClass({
           found = true;
           if (!g[k]) {
             g[k] = Em.Object.create({
-              description: Em.String.i18n("user_action_groups." + k),
+              description: Em.String.i18n("user_action_descriptions." + k),
               count: 0,
               action_type: parseInt(k, 10)
             });
diff --git a/app/assets/javascripts/discourse/models/user_action.js b/app/assets/javascripts/discourse/models/user_action.js
index 610ebda59..207bf362e 100644
--- a/app/assets/javascripts/discourse/models/user_action.js
+++ b/app/assets/javascripts/discourse/models/user_action.js
@@ -8,71 +8,6 @@
 **/
 Discourse.UserAction = Discourse.Model.extend({
 
-  descriptionHtml: (function() {
-    var action = this.get('action_type');
-    var ua = Discourse.UserAction;
-    var actions = [ua.LIKE, ua.WAS_LIKED, ua.STAR, ua.EDIT, ua.BOOKMARK, ua.GOT_PRIVATE_MESSAGE, ua.NEW_PRIVATE_MESSAGE];
-    var icon = "";
-    var sentence = "";
-
-    var fill = function(s, links) {
-      for (var key in links) {
-        var link = links[key];
-        s = s.replace("<" + key + ">", "<a href='" + link + "'>");
-        s = s.replace("</" + key + ">", "</a>");
-      }
-      return s;
-    };
-
-    var sameUser = this.get('username') === Discourse.get('currentUser.username');
-    var params;
-
-    if (action === null || actions.indexOf(action) >= 0) {
-      params = { u: this.get('userUrl') };
-      if (this.get('isPM')) {
-        icon = '<i class="icon icon-envelope-alt" title="{{i18n user.stream.private_message}}"></i>';
-        if (sameUser) {
-          sentence = fill(Em.String.i18n('user_action.sent_by_you'), params);
-        } else {
-          sentence = fill(Em.String.i18n('user_action.sent_by_user', { user: this.get('name') }), params);
-        }
-      } else {
-        if (sameUser) {
-          sentence = fill(Em.String.i18n('user_action.posted_by_you'), params);
-        } else {
-          sentence = fill(Em.String.i18n('user_action.posted_by_user', { user: this.get('name') }), params);
-        }
-      }
-    } else if (action === ua.NEW_TOPIC) {
-      params = { u: this.get('userUrl'), t: this.get('replyUrl') };
-      if (sameUser) {
-        sentence = fill(Em.String.i18n('user_action.you_posted_topic'), params);
-      } else {
-        sentence = fill(Em.String.i18n('user_action.user_posted_topic', { user: this.get('name') }), params);
-      }
-    } else if (action === ua.POST || action === ua.RESPONSE) {
-      if (this.get('reply_to_post_number')) {
-        params = { u: this.get('userUrl'), t: this.get('postUrl') };
-        if (sameUser) {
-          sentence = fill(Em.String.i18n('user_action.you_replied_to_post', { post_number: '#' + this.get('reply_to_post_number') }), params);
-        } else {
-          sentence = fill(Em.String.i18n('user_action.user_replied_to_post', { user: this.get('name'), post_number: '#' + this.get('reply_to_post_number') }), params);
-        }
-      } else {
-        params = { u: this.get('userUrl'), t: this.get('replyUrl') };
-        if (sameUser) {
-          sentence = fill(Em.String.i18n('user_action.you_replied_to_topic'), params);
-        } else {
-          sentence = fill(Em.String.i18n('user_action.user_replied_to_topic', { user: this.get('name') }), params);
-        }
-      }
-    } else {
-      throw "Invalid user action: " + action;
-    }
-
-    return new Handlebars.SafeString(icon + " " + sentence);
-  }).property(),
-
   userUrl: (function() {
     return Discourse.Utilities.userUrl(this.get('username'));
   }).property(),
diff --git a/app/assets/javascripts/discourse/templates/user/stream.js.handlebars b/app/assets/javascripts/discourse/templates/user/stream.js.handlebars
index af55af78c..4c53bfb48 100644
--- a/app/assets/javascripts/discourse/templates/user/stream.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/user/stream.js.handlebars
@@ -7,7 +7,31 @@
         <span class="title">
           <a href="{{unbound postUrl}}">{{unbound title}}</a>
         </span>
-        <span class="type">{{unbound descriptionHtml}}</span>
+        {{#unless description}}
+          <span class="type">
+          {{#if isPM}}
+            <i class="icon icon-envelope-alt" title="{{i18n user.stream.private_message}}"></i>
+            {{i18n user.stream.sent_by}}
+          {{else}}
+            {{i18n user.stream.posted_by}}
+          {{/if}}
+          </span>
+        {{/unless}}
+        <a class='name' href="{{unbound userUrl}}">{{personalizedName name usernamePath="username"}}</a>
+        {{#if description}}
+          <span class='type'>{{unbound description}}</span>
+          {{#if isPostAction}}
+            <a class="post-number" href="{{unbound replyUrl}}">
+            {{#if reply_to_post_number}}
+              #{{unbound reply_to_post_number}}
+            {{else}}
+              {{i18n user.stream.the_topic}}
+            {{/if}}
+            </a>
+          {{else}}
+            <span class="name">{{personalizedName view.parentView.parentView.user.name usernamePath="view.parentView.parentView.user.username"}}</span>
+          {{/if}}
+        {{/if}}
       </div>
       <p class='excerpt'>
       {{{unbound excerpt}}}
diff --git a/app/models/user_action.rb b/app/models/user_action.rb
index 052c8f15f..a7278a48a 100644
--- a/app/models/user_action.rb
+++ b/app/models/user_action.rb
@@ -36,7 +36,7 @@ class UserAction < ActiveRecord::Base
   ].each_with_index.to_a.flatten]
 
   def self.stats(user_id, guardian)
-    results = UserAction.select("action_type, COUNT(*) count")
+    results = UserAction.select("action_type, COUNT(*) count, '' AS description")
       .joins(:target_topic)
       .where(user_id: user_id)
       .group('action_type')
@@ -53,6 +53,9 @@ class UserAction < ActiveRecord::Base
     results = results.to_a
 
     results.sort! { |a,b| ORDER[a.action_type] <=> ORDER[b.action_type] }
+    results.each do |row|
+      row.description = self.description(row.action_type, detailed: true)
+    end
 
     results
   end
@@ -119,6 +122,7 @@ JOIN users pu on pu.id = COALESCE(p.user_id, t.user_id)
 
     data.each do |row|
       row["action_type"] = row["action_type"].to_i
+      row["description"] = self.description(row["action_type"])
       row["created_at"] = DateTime.parse(row["created_at"])
       # we should probably cache the excerpts in the db at some point
       row["excerpt"] = PrettyText.excerpt(row["cooked"],300) if row["cooked"]
@@ -133,6 +137,60 @@ JOIN users pu on pu.id = COALESCE(p.user_id, t.user_id)
     data
   end
 
+  def self.description(row, opts = {})
+    t = I18n.t('user_action_descriptions')
+    if opts[:detailed]
+      # will localize as soon as we stablize the names here
+      desc = case row.to_i
+      when BOOKMARK
+        t[:bookmarks]
+      when NEW_TOPIC
+        t[:topics]
+      when WAS_LIKED
+        t[:likes_received]
+      when LIKE
+        t[:likes_given]
+      when RESPONSE
+        t[:responses]
+      when POST
+        t[:posts]
+      when MENTION
+        t[:mentions]
+      when QUOTE
+        t[:quotes]
+      when EDIT
+        t[:edits]
+      when STAR
+        t[:favorites]
+      when NEW_PRIVATE_MESSAGE
+        t[:sent_items]
+      when GOT_PRIVATE_MESSAGE
+        t[:inbox]
+      end
+    else
+      desc =
+      case row.to_i
+      when NEW_TOPIC
+        then t[:posted]
+      when LIKE,WAS_LIKED
+        then t[:liked]
+      when RESPONSE,POST
+        then t[:responded_to]
+      when BOOKMARK
+        then t[:bookmarked]
+      when MENTION
+        then t[:mentioned]
+      when QUOTE
+        then t[:quoted]
+      when STAR
+        then t[:favorited]
+      when EDIT
+        then t[:edited]
+      end
+    end
+    desc
+  end
+
   def self.log_action!(hash)
     require_parameters(hash, :action_type, :user_id, :acting_user_id, :target_topic_id, :target_post_id)
     transaction(requires_new: true) do
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index 7365919b5..4b599a062 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -48,35 +48,8 @@ en:
     saving: "Saving..."
     saved: "Saved!"
 
-    user_action:
-      user_posted_topic: "<u>{{user}}</u> posted <t>the topic</t>"
-      you_posted_topic: "<u>You</u> posted <t>the topic</t>"
-      user_replied_to_post: "<u>{{user}}</u> replied to <t>{{post_number}}</t>"
-      you_replied_to_post: "<u>You</u> replied to <t>{{post_number}}</t>"
-      user_replied_to_topic: "<u>{{user}}</u> replied to <t>the topic</t>"
-      you_replied_to_topic: "<u>You</u> replied to <t>the topic</t>"
-
-      user_mentioned_user: "<u1>{{user}}</u1> mentioned <u2>{{another_user}}</u2>"
-      user_mentioned_you: "<u1>{{user}}</u1> mentioned <u2>you</u2>"
-
-      posted_by_user: "Posted by <u>{{user}}</u>"
-      posted_by_you: "Posted by <u>you</u>"
-      sent_by_user: "Sent by <u>{{user}}</u>"
-      sent_by_you: "Sent by <u>you</u>"
-
-    user_action_groups:
-      "1": "Likes Given"
-      "2": "Likes Received"
-      "3": "Bookmarks"
-      "4": "Topics"
-      "5": "Posts"
+    user_action_descriptions:
       "6": "Responses"
-      "7": "Mentions"
-      "9": "Quotes"
-      "10": "Favorites"
-      "11": "Edits"
-      "12": "Sent Items"
-      "13": "Inbox"
 
     user:
       information: "User Information"
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index 7c59b214a..e0b445a97 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -518,6 +518,31 @@ en:
   most_recent_poster: "Most Recent Poster"
   frequent_poster: "Frequent Poster"
 
+  user_action_descriptions:
+    bookmarks: "Bookmarks"
+    topics: "Topics"
+    likes_received: "Likes Received"
+    likes_given: "Likes Given"
+    responses: "Responses"
+    topic_responses: "Topic Responses"
+    posts: "Posts"
+    mentions: "Mentions"
+    quotes: "Quotes"
+    edits: "Edits"
+    favorites: "Favorites"
+    sent_items: "Sent Items"
+    inbox: "Inbox"
+
+    was_liked: "was liked"
+    liked: "liked"
+    bookmarked: "bookmarked"
+    posted: "posted"
+    responded_to: "replied to"
+    mentioned: "mentioned"
+    quoted: "quoted"
+    favorited: "favorited"
+    edited: "edited"
+
   move_posts:
     moderator_post:
       one: "I moved a post to a new topic: %{topic_link}"