Notifications page works with Vanna
This commit is contained in:
parent
a6cb04aadb
commit
ef7580a698
5 changed files with 140 additions and 8 deletions
2
Gemfile
2
Gemfile
|
|
@ -13,6 +13,8 @@ gem 'ohai', '0.5.8', :require => false #Chef dependency
|
||||||
gem 'nokogiri'
|
gem 'nokogiri'
|
||||||
gem 'settingslogic', '2.0.6'
|
gem 'settingslogic', '2.0.6'
|
||||||
|
|
||||||
|
gem 'vanna', :git => "git://github.com/MikeSofaer/vanna.git"
|
||||||
|
|
||||||
#Security
|
#Security
|
||||||
gem 'devise', '~> 1.3.1'
|
gem 'devise', '~> 1.3.1'
|
||||||
gem 'devise_invitable', '0.5.0'
|
gem 'devise_invitable', '0.5.0'
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,14 @@ GIT
|
||||||
sod (0.0.1)
|
sod (0.0.1)
|
||||||
net-scp
|
net-scp
|
||||||
|
|
||||||
|
GIT
|
||||||
|
remote: git://github.com/MikeSofaer/vanna.git
|
||||||
|
revision: 334eec220dbfddcc6bd3108e6e6c77fec8484dc4
|
||||||
|
specs:
|
||||||
|
vanna (0.1.1)
|
||||||
|
json
|
||||||
|
rails (>= 3.0.0)
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/diaspora/acts-as-taggable-on.git
|
remote: git://github.com/diaspora/acts-as-taggable-on.git
|
||||||
revision: c3592fe1a906f6ff1cd12766c5cf1152c51eec40
|
revision: c3592fe1a906f6ff1cd12766c5cf1152c51eec40
|
||||||
|
|
@ -454,6 +462,7 @@ DEPENDENCIES
|
||||||
thin (= 1.2.11)
|
thin (= 1.2.11)
|
||||||
twitter (= 1.5.0)
|
twitter (= 1.5.0)
|
||||||
typhoeus
|
typhoeus
|
||||||
|
vanna!
|
||||||
webmock
|
webmock
|
||||||
will_paginate (= 3.0.pre2)
|
will_paginate (= 3.0.pre2)
|
||||||
yard
|
yard
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,7 @@
|
||||||
# licensed under the Affero General Public License version 3 or later. See
|
# licensed under the Affero General Public License version 3 or later. See
|
||||||
# the COPYRIGHT file.
|
# the COPYRIGHT file.
|
||||||
|
|
||||||
class NotificationsController < ApplicationController
|
class NotificationsController < VannaController
|
||||||
before_filter :authenticate_user!
|
|
||||||
respond_to :html, :json
|
|
||||||
|
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
|
@ -21,7 +19,7 @@ class NotificationsController < ApplicationController
|
||||||
@aspect = :notification
|
@aspect = :notification
|
||||||
conditions = {:recipient_id => current_user.id}
|
conditions = {:recipient_id => current_user.id}
|
||||||
page = params[:page] || 1
|
page = params[:page] || 1
|
||||||
@notifications = WillPaginate::Collection.create(page, 25, Notification.where(conditions).count ) do |pager|
|
notifications = WillPaginate::Collection.create(page, 25, Notification.where(conditions).count ) do |pager|
|
||||||
result = Notification.find(:all,
|
result = Notification.find(:all,
|
||||||
:conditions => conditions,
|
:conditions => conditions,
|
||||||
:order => 'created_at desc',
|
:order => 'created_at desc',
|
||||||
|
|
@ -33,8 +31,8 @@ class NotificationsController < ApplicationController
|
||||||
pager.replace(result)
|
pager.replace(result)
|
||||||
end
|
end
|
||||||
|
|
||||||
@group_days = @notifications.group_by{|note| I18n.l(note.created_at, :format => I18n.t('date.formats.fullmonth_day')) }
|
group_days = notifications.group_by{|note| I18n.l(note.created_at, :format => I18n.t('date.formats.fullmonth_day')) }
|
||||||
respond_with @notifications
|
{:group_days => group_days, :current_user => current_user, :notifications => notifications}
|
||||||
end
|
end
|
||||||
|
|
||||||
def read_all
|
def read_all
|
||||||
|
|
|
||||||
120
app/controllers/vanna_controller.rb
Normal file
120
app/controllers/vanna_controller.rb
Normal file
|
|
@ -0,0 +1,120 @@
|
||||||
|
# Copyright (c) 2010, Diaspora Inc. This file is
|
||||||
|
# licensed under the Affero General Public License version 3 or later. See
|
||||||
|
# the COPYRIGHT file.
|
||||||
|
|
||||||
|
class VannaController < Vanna::Base
|
||||||
|
include Devise::Controllers::Helpers
|
||||||
|
include AspectGlobalHelper
|
||||||
|
helper :layout
|
||||||
|
helper_method :current_user
|
||||||
|
helper_method :flash
|
||||||
|
config.stylesheets_dir = "public/stylesheets"
|
||||||
|
layout "application"
|
||||||
|
include ActionController::Flash
|
||||||
|
default_url_options[:host] = "localhost"
|
||||||
|
include ActionController::MobileFu::InstanceMethods
|
||||||
|
helper_method :is_mobile_device?
|
||||||
|
|
||||||
|
protect_from_forgery :except => :receive
|
||||||
|
|
||||||
|
before_filter :authenticate_user!
|
||||||
|
before_filter :ensure_http_referer_is_set
|
||||||
|
before_filter :set_header_data, :except => [:create, :update]
|
||||||
|
before_filter :set_invites
|
||||||
|
before_filter :set_locale
|
||||||
|
before_filter :set_git_header if (AppConfig[:git_update] && AppConfig[:git_revision])
|
||||||
|
before_filter :which_action_and_user
|
||||||
|
prepend_before_filter :clear_gc_stats
|
||||||
|
before_filter :set_grammatical_gender
|
||||||
|
|
||||||
|
def ensure_http_referer_is_set
|
||||||
|
request.env['HTTP_REFERER'] ||= '/aspects'
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_header_data
|
||||||
|
if user_signed_in?
|
||||||
|
if request.format.html? && !params[:only_posts]
|
||||||
|
@aspect = nil
|
||||||
|
@notification_count = Notification.for(current_user, :unread =>true).count
|
||||||
|
@unread_message_count = ConversationVisibility.sum(:unread, :conditions => "person_id = #{current_user.person.id}")
|
||||||
|
end
|
||||||
|
@object_aspect_ids = []
|
||||||
|
@all_aspects = current_user.aspects
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def ensure_page
|
||||||
|
params[:page] = params[:page] ? params[:page].to_i : 1
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_invites
|
||||||
|
if user_signed_in?
|
||||||
|
@invites = current_user.invites
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_git_header
|
||||||
|
headers['X-Git-Update'] = AppConfig[:git_update]
|
||||||
|
headers['X-Git-Revision'] = AppConfig[:git_revision]
|
||||||
|
end
|
||||||
|
|
||||||
|
def which_action_and_user
|
||||||
|
str = "event=request_with_user controller=#{self.class} action=#{self.action_name} "
|
||||||
|
if current_user
|
||||||
|
str << "uid=#{current_user.id} "
|
||||||
|
str << "user_created_at='#{current_user.created_at.to_date.to_s}' user_created_at_unix=#{current_user.created_at.to_i} " if current_user.created_at
|
||||||
|
str << "user_non_pending_contact_count=#{current_user.contacts.size} user_contact_count=#{Contact.unscoped.where(:user_id => current_user.id).size} "
|
||||||
|
else
|
||||||
|
str << 'uid=nil'
|
||||||
|
end
|
||||||
|
Rails.logger.info str
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_locale
|
||||||
|
if user_signed_in?
|
||||||
|
I18n.locale = current_user.language
|
||||||
|
else
|
||||||
|
I18n.locale = request.compatible_language_from AVAILABLE_LANGUAGE_CODES
|
||||||
|
end
|
||||||
|
|
||||||
|
WillPaginate::ViewHelpers.pagination_options[:previous_label] = "« #{I18n.t('previous')}"
|
||||||
|
WillPaginate::ViewHelpers.pagination_options[:next_label] = "#{I18n.t('next')} »"
|
||||||
|
end
|
||||||
|
|
||||||
|
def clear_gc_stats
|
||||||
|
GC.clear_stats if GC.respond_to?(:clear_stats)
|
||||||
|
end
|
||||||
|
|
||||||
|
def redirect_unless_admin
|
||||||
|
unless current_user.admin?
|
||||||
|
redirect_to root_url, :notice => 'you need to be an admin to do that'
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_grammatical_gender
|
||||||
|
if (user_signed_in? && I18n.inflector.inflected_locale?)
|
||||||
|
gender = current_user.profile.gender.to_s.tr('!()[]"\'`*=|/\#.,-:', '').downcase
|
||||||
|
unless gender.empty?
|
||||||
|
i_langs = I18n.inflector.inflected_locales(:gender)
|
||||||
|
i_langs.delete I18n.locale
|
||||||
|
i_langs.unshift I18n.locale
|
||||||
|
i_langs.each do |lang|
|
||||||
|
token = I18n.inflector.true_token(gender, :gender, lang)
|
||||||
|
unless token.nil?
|
||||||
|
@grammatical_gender = token
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def grammatical_gender
|
||||||
|
@grammatical_gender || nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def after_sign_in_path_for(resource)
|
||||||
|
stored_location_for(:user) || aspects_path(:a_ids => current_user.aspects.where(:open => true).select(:id).all.map{|a| a.id})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
-self.extend AspectGlobalHelper
|
||||||
|
-self.extend AspectsHelper
|
||||||
|
-self.extend ApplicationHelper
|
||||||
.span-13
|
.span-13
|
||||||
%h2
|
%h2
|
||||||
%span.notification_count{:class => ('unread' if @notification_count > 0)}
|
%span.notification_count{:class => ('unread' if @notification_count > 0)}
|
||||||
|
|
@ -8,7 +11,7 @@
|
||||||
|
|
||||||
.span-24.last
|
.span-24.last
|
||||||
.stream.notifications
|
.stream.notifications
|
||||||
- @group_days.each do |day, notes|
|
- group_days.each do |day, notes|
|
||||||
.day_group.span-24.last
|
.day_group.span-24.last
|
||||||
.span-3
|
.span-3
|
||||||
.date
|
.date
|
||||||
|
|
@ -28,4 +31,4 @@
|
||||||
%br
|
%br
|
||||||
%time= timeago(note.created_at)
|
%time= timeago(note.created_at)
|
||||||
.span-13.last
|
.span-13.last
|
||||||
= will_paginate @notifications
|
= will_paginate notifications
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue