From 09d38007010f3dc6504476dc6b1d5b39ae116319 Mon Sep 17 00:00:00 2001
From: Chris Hunt <c@chrishunt.co>
Date: Fri, 14 Jun 2013 23:58:24 -0700
Subject: [PATCH] Move 'dynamic favicon' from Server to User pref

---
 app/assets/javascripts/discourse.js                    |  4 ++--
 app/assets/javascripts/discourse/models/user.js        |  2 ++
 .../discourse/templates/user/preferences.js.handlebars | 10 ++++++++++
 app/controllers/users_controller.rb                    |  2 +-
 app/models/site_setting.rb                             |  1 -
 app/serializers/current_user_serializer.rb             |  1 +
 app/serializers/user_serializer.rb                     |  1 +
 config/locales/client.de.yml                           |  1 +
 config/locales/client.en.yml                           |  2 ++
 config/locales/client.ru.yml                           |  1 +
 config/locales/server.de.yml                           |  1 -
 config/locales/server.en.yml                           |  1 -
 config/locales/server.ru.yml                           |  1 -
 13 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/app/assets/javascripts/discourse.js b/app/assets/javascripts/discourse.js
index a6e831349..82b54d0cb 100644
--- a/app/assets/javascripts/discourse.js
+++ b/app/assets/javascripts/discourse.js
@@ -75,7 +75,7 @@ Discourse = Ember.Application.createWithMixins({
     $('title').text(title);
 
     var notifyCount = this.get('notifyCount');
-    if (notifyCount > 0 && !Discourse.SiteSettings.dynamic_favicon) {
+    if (notifyCount > 0 && !Discourse.User.current('dynamic_favicon')) {
       title = "(" + notifyCount + ") " + title;
     }
     // chrome bug workaround see: http://stackoverflow.com/questions/2952384/changing-the-window-title-when-focussing-the-window-doesnt-work-in-chrome
@@ -86,7 +86,7 @@ Discourse = Ember.Application.createWithMixins({
   }.observes('title', 'hasFocus', 'notifyCount'),
 
   faviconChanged: function() {
-    if(Discourse.SiteSettings.dynamic_favicon) {
+    if(Discourse.User.current('dynamic_favicon')) {
       $.faviconNotify(
         Discourse.SiteSettings.favicon_url, this.get('notifyCount')
       );
diff --git a/app/assets/javascripts/discourse/models/user.js b/app/assets/javascripts/discourse/models/user.js
index 6cfa31ccf..de049ad81 100644
--- a/app/assets/javascripts/discourse/models/user.js
+++ b/app/assets/javascripts/discourse/models/user.js
@@ -153,6 +153,7 @@ Discourse.User = Discourse.Model.extend({
                                'email_digests',
                                'email_direct',
                                'email_private_messages',
+                               'dynamic_favicon',
                                'digest_after_days',
                                'new_topic_duration_minutes',
                                'external_links_in_new_tab',
@@ -162,6 +163,7 @@ Discourse.User = Discourse.Model.extend({
       user.set('bio_excerpt',data.user.bio_excerpt);
       Discourse.User.current().set('enable_quoting', user.get('enable_quoting'));
       Discourse.User.current().set('external_links_in_new_tab', user.get('external_links_in_new_tab'));
+      Discourse.User.current().set('dynamic_favicon', user.get('dynamic_favicon'));
     });
   },
 
diff --git a/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars b/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars
index e8a3133ee..6ee825ecb 100644
--- a/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/user/preferences.js.handlebars
@@ -84,6 +84,16 @@
     </div>
   </div>
 
+  <div class="control-group">
+    <label class="control-label">{{i18n user.notifications}}</label>
+    <div class="controls">
+      <label>
+        {{view Ember.Checkbox checkedBinding="dynamic_favicon"}}
+        {{i18n user.dynamic_favicon}}
+      </label>
+    </div>
+  </div>
+
   <div class="control-group other">
     <label class="control-label">{{i18n user.other_settings}}</label>
     <div class="controls">
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index f9684a99b..c74f38840 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -51,7 +51,7 @@ class UsersController < ApplicationController
       u.new_topic_duration_minutes = params[:new_topic_duration_minutes].to_i if params[:new_topic_duration_minutes]
 
       [:email_digests, :email_direct, :email_private_messages,
-       :external_links_in_new_tab, :enable_quoting].each do |i|
+       :external_links_in_new_tab, :enable_quoting, :dynamic_favicon].each do |i|
         if params[i].present?
           u.send("#{i.to_s}=", params[i] == 'true')
         end
diff --git a/app/models/site_setting.rb b/app/models/site_setting.rb
index c448e2cbc..6163a52fb 100644
--- a/app/models/site_setting.rb
+++ b/app/models/site_setting.rb
@@ -78,7 +78,6 @@ class SiteSetting < ActiveRecord::Base
   setting(:active_user_rate_limit_secs, 60)
   setting(:previous_visit_timeout_hours, 1)
   client_setting(:favicon_url, '/assets/default-favicon.ico')
-  client_setting(:dynamic_favicon, false)
   setting(:apple_touch_icon_url, '/assets/default-apple-touch-icon.png')
 
   setting(:ninja_edit_window, 5.minutes.to_i)
diff --git a/app/serializers/current_user_serializer.rb b/app/serializers/current_user_serializer.rb
index 270d51161..69079b4f3 100644
--- a/app/serializers/current_user_serializer.rb
+++ b/app/serializers/current_user_serializer.rb
@@ -12,6 +12,7 @@ class CurrentUserSerializer < BasicUserSerializer
              :topic_count,
              :enable_quoting,
              :external_links_in_new_tab,
+             :dynamic_favicon,
              :trust_level,
              :can_edit
 
diff --git a/app/serializers/user_serializer.rb b/app/serializers/user_serializer.rb
index f33aec45c..e1224bcf2 100644
--- a/app/serializers/user_serializer.rb
+++ b/app/serializers/user_serializer.rb
@@ -48,6 +48,7 @@ class UserSerializer < BasicUserSerializer
                      :auto_track_topics_after_msecs,
                      :new_topic_duration_minutes,
                      :external_links_in_new_tab,
+                     :dynamic_favicon,
                      :enable_quoting
 
 
diff --git a/config/locales/client.de.yml b/config/locales/client.de.yml
index dbd24f57f..2f554286d 100644
--- a/config/locales/client.de.yml
+++ b/config/locales/client.de.yml
@@ -175,6 +175,7 @@ de:
       bio: "Über mich"
       invited_by: "Eingeladen von"
       trust_level: "Stufe"
+      dynamic_favicon: "Zeige eingehende Nachrichten im Favicon"
       external_links_in_new_tab: "Öffne alle externen Links in neuen Tabs"
       enable_quoting: "Markierten Text bei Antwort zitieren"
 
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index cfcb40d5b..b6d6c05d8 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -172,6 +172,8 @@ en:
       bio: "About me"
       invited_by: "Invited By"
       trust_level: "Trust Level"
+      notifications: "Notifications"
+      dynamic_favicon: "Show incoming message notifications on favicon"
       external_links_in_new_tab: "Open all external links in a new tab"
       enable_quoting: "Enable quote reply for highlighted text"
 
diff --git a/config/locales/client.ru.yml b/config/locales/client.ru.yml
index 207aee300..1d5f54d48 100644
--- a/config/locales/client.ru.yml
+++ b/config/locales/client.ru.yml
@@ -205,6 +205,7 @@ ru:
       bio: Обо мне
       invited_by: Приглашен пользователем
       trust_level: Уровень доверия
+      dynamic_favicon: Отображать события на favicon
       external_links_in_new_tab: Открывать все внешние ссылки в новой вкладке
       enable_quoting: Позволить отвечать с цитированием выделенного текста
       moderator: '{{user}} - модератор'
diff --git a/config/locales/server.de.yml b/config/locales/server.de.yml
index 624e916f9..e95ad9c50 100644
--- a/config/locales/server.de.yml
+++ b/config/locales/server.de.yml
@@ -456,7 +456,6 @@ de:
     logo_url: "Das Logo deiner Seite, zum Beispiel: http://example.com/logo.png"
     logo_small_url: "Kleines Logo deiner Seite, das beim Herunterscrollen in einem Thema gezeigt wird, zum Beispiel: http://example.com/logo-small.png"
     favicon_url: "Das Favicon deiner Seite, siehe http://de.wikipedia.org/wiki/Favicon"
-    dynamic_favicon: "Zeige eingehende Nachrichten im Favicon"
     apple_touch_icon_url: "Icon für berührungsempfindliche Apple Geräte. Empfohlene Grösse ist 144px auf 144px."
 
     notification_email: "Die Antwortadresse, die in Systemmails (zum Beispiel zur Passwortwiederherstellung, neuen Konten, etc.) eingetragen wird."
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index 274f17112..c9fd59d5b 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -457,7 +457,6 @@ en:
     logo_url: "The logo for your site eg: http://example.com/logo.png"
     logo_small_url: "The small logo for your site used when scrolling down on topics eg: http://example.com/logo-small.png"
     favicon_url: "A favicon for your site, see http://en.wikipedia.org/wiki/Favicon"
-    dynamic_favicon: "Show incoming message notifications on favicon"
     apple_touch_icon_url: "Icon used for Apple touch devices. Recommended size is 144px by 144px."
 
     notification_email: "The return email address used when sending system emails such as notifying users of lost passwords, new accounts etc"
diff --git a/config/locales/server.ru.yml b/config/locales/server.ru.yml
index a35fb23ea..549569edd 100644
--- a/config/locales/server.ru.yml
+++ b/config/locales/server.ru.yml
@@ -505,7 +505,6 @@ ru:
     logo_url: 'Логотип вашего сайта, например: http://example.com/logo.png'
     logo_small_url: 'Уменьшенный логотип вашего сайта, используется при прокрутке списка тем, например: http://example.com/logo-small.png'
     favicon_url: 'favicon вашего сайта, дополнительная информация: http://en.wikipedia.org/wiki/Favicon'
-    dynamic_favicon: Отображать события на favicon
     apple_touch_icon_url: Иконка используемая для тач-устройств Apple. Рекомендуемый размер 144 x 144 px.
     notification_email: Обратный электронный адрес, используемый для отправки системных электронных писем пользователям, таких как оповещение пользователей о потерянном пароле, новой учетной записи и т.д.
     use_ssl: Будет ли сайт доступен по SSL? (НЕ РЕАЛИЗОВАНО, ЭКСПЕРИМЕНТАЛЬНАЯ ФУНКЦИЯ)