Skip to content

Commit

Permalink
Fixes pagination; Works again; Also respects pagination setting in th…
Browse files Browse the repository at this point in the history
…e kandan settings file

Signed-off-by: Akash Manohar J <akash@akash.im>
  • Loading branch information
HashNuke committed Apr 5, 2012
1 parent 285d2f2 commit a74e794
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 36 deletions.
Expand Up @@ -2,7 +2,7 @@ class Kandan.Helpers.Channels

@options:
autoScrollThreshold: 0.90
maxActivities: 5
maxActivities: <%= Kandan::Config.options[:per_page] %>

@pastAutoScrollThreshold: (channelId)->
currentPosition = @currentScrollPosition channelId
Expand Down Expand Up @@ -37,16 +37,16 @@ class Kandan.Helpers.Channels


@confirmDeletion: ()->
reply = confirm("Really delete the channel?")
return reply
return confirm("Really delete the channel?")


@flushActivities: (channelId)->
$channelActivities = $("#channel-activities-#{channelId}")
if $channelActivities.children().length == @options.maxActivities + 1
oldest = $channelActivities.children().first().data("activity_id")
$channelActivities.children().first().remove()
oldest = $channelActivities.children().first().data("activity_id")
$channelActivities.prev().data("oldest", oldest)
@channel_pagination_el(channelId).show()


@confirmAndDeleteChannel: (channel, tabIndex)->
Expand Down Expand Up @@ -124,20 +124,22 @@ class Kandan.Helpers.Channels
@add_message: (activityAttributes, state)->
@channel_activities_el(activityAttributes.channel_id)
.append(@new_activity_view(activityAttributes).render().el)
@set_pagination_data(activityAttributes.channel_id)
@flushActivities(activityAttributes.channel_id)
@set_pagination_data(activityAttributes.channel_id)


@add_notification: (activityAttributes)->
$channelElements = $(".channel-activities")
activityAttributes["created_at"] = new Date()
for el in $channelElements
$(el).append(@new_activity_view(activityAttributes).render().el)
@flushActivities($(el).parent().data("channel_id"))
@flushActivities($(el).closest(".ui-widget-content").data("channel_id"))
@set_pagination_data(activityAttributes.channel_id)


@set_pagination_state: (channelId, moreActivities, oldest)->
@channel_pagination_el(channelId).data('oldest', oldest)
console.log "pagination element", moreActivities, @channel_pagination_el(channelId)
if moreActivities == true
@channel_pagination_el(channelId).show()
else
Expand Down
Expand Up @@ -11,6 +11,4 @@ class Kandan.Views.ListActivities extends Backbone.View
for activity in @channel.activities.models
activityView = new Kandan.Views.ShowActivity({activity: activity, state: Kandan.Helpers.Activities.HISTORY_STATE})
$(@el).append(activityView.render().el)

$(@el).prev().hide() if @channel.more_activities != true
@
Expand Up @@ -10,7 +10,7 @@ class Kandan.Views.PaginatedActivities extends Backbone.View
setPagination: ()->
oldestActivityId = 0
if @channel.activities and @channel.activities.models.length > 0
oldestActivityId = _.last(@channel.activities.models).get('id')
oldestActivityId = _.first(@channel.activities.models).get('id')

$(@el).find(".pagination").data('oldest', oldestActivityId)

Expand All @@ -19,12 +19,13 @@ class Kandan.Views.PaginatedActivities extends Backbone.View
@channel = @options.channel
$(@el).html @template()
@setPagination()


$(@el).find(".pagination").hide() if @channel.more_activities != true
listActivitiesView = new Kandan.Views.ListActivities({channel: @channel})
$(@el).append listActivitiesView.render().el
@


load_more_activities: ()->
oldest = $(@el).find(".pagination").data('oldest')
activities = new Kandan.Collections.Activities([], {channel_id: @channel.get('id')})
Expand All @@ -41,4 +42,4 @@ class Kandan.Views.PaginatedActivities extends Backbone.View
_.last(collection.models).get('id')
)
})

27 changes: 18 additions & 9 deletions app/controllers/activities_controller.rb
Expand Up @@ -2,20 +2,29 @@ class ActivitiesController < ApplicationController
before_filter :authenticate_user!

def index
oldest = params[:oldest] || 1
# TODO can be divided into two actions

first_activity_id = 1
activities = Channel.find(params[:channel_id]).
activities.
includes(:user).
order('id DESC').
where("id < ?", oldest).
limit(Kandan::Config.options[:per_page])
if params[:oldest]
activities = Channel.find(params[:channel_id]).
activities.
includes(:user).
order('id DESC').
where("id < ?", params[:oldest]).
limit(Kandan::Config.options[:per_page])
else
activities = Channel.find(params[:channel_id]).
activities.
includes(:user).
order('id DESC').
limit(Kandan::Config.options[:per_page])
end

first_activity = Activity.order('id').where(:channel_id => params[:channel_id]).first
first_activity_id = first_activity.id if not first_activity.nil?

# NOTE if the action is accessed then there's definitely activities, so skip check for #first to be nil
more_activities = first_activity_id < activities.last.id
more_activities = first_activity_id < (activities.last.try(:id).presence || 1)

respond_to do |format|
format.json { render :text => {:activities => activities.reverse, :more_activities => more_activities }.to_json(:include => :user) }
Expand Down
4 changes: 3 additions & 1 deletion app/controllers/channels_controller.rb
Expand Up @@ -11,7 +11,9 @@ def index
activities = []
more_activities = (channel.activities.count > Kandan::Config.options[:per_page])
channel.activities.order('id DESC').includes(:user).page.each do |activity|
activities.push activity.attributes.merge({:user => activity.user.attributes})
activities.push activity.attributes.merge({
:user => activity.user.as_json(:only => [:id, :ido_id, :first_name, :last_name, :gravatar_hash, :active, :locale])
})
end

nested_channel_data.push channel.attributes.merge({:activities => activities.reverse, :more_activities => more_activities})
Expand Down
1 change: 1 addition & 0 deletions app/models/user.rb
Expand Up @@ -10,6 +10,7 @@ class User < ActiveRecord::Base
# Setup accessible (or protected) attributes for your model
attr_accessible :id, :email, :password, :password_confirmation, :remember_me, :first_name, :last_name, :locale, :gravatar_hash


def bushido_extra_attributes(extra_attributes)
self.first_name = extra_attributes["first_name"].to_s
self.last_name = extra_attributes["last_name"].to_s
Expand Down
3 changes: 1 addition & 2 deletions lib/bushido/bushido_bootstrap.rb
Expand Up @@ -3,7 +3,6 @@ module Bushido
def self.enable_bushido!
self.load_hooks!
self.extend_user!
self.extend_project!
end

def self.extend_user!
Expand All @@ -20,7 +19,7 @@ def bushido_extra_attributes(extra_attributes)
self.first_name = "#{extra_attributes['first_name']}"
self.last_name = "#{extra_attributes['last_name']}"
self.locale = extra_attributes['locale']
self.email = extra_attributes["email"]
self.email = extra_attributes['email']
end
end
end
Expand Down
22 changes: 10 additions & 12 deletions lib/bushido/bushido_hooks/user_hooks.rb
@@ -1,38 +1,36 @@
class BushidoUserHooks < Bushido::EventObserver
def user_added
data = params['data']
puts "Adding a new user with incoming data #{params.inspect}"
puts "Devise username column: #{::Devise.cas_username_column}="
puts "Setting username to: #{params['data'].try(:[], 'ido_id')}"

user = User.new(:email => params['data'].try(:[], 'email'))
puts "Devise CAS uniqueID column: #{::Devise.cas_username_column}="
puts "Setting devise CAS uniqueID to: #{data.try(:[], 'ido_id')}"

user = User.find_or_initialize_by_ido_id data['ido_id']
user.email = data['email']
user.locale = data['locale']
user.first_name = user.email.split('@').first
user.send("#{::Devise.cas_username_column}=".to_sym, params['data'].try(:[], 'ido_id'))
user.save
end

def user_removed
puts "Removing user based on incoming data #{params.inspect}"
puts "Devise username column: #{::Devise.cas_username_column}="
puts "Devise CAS uniqueID column: #{::Devise.cas_username_column}="

user = User.find_by_ido_id(params['data']['ido_id'])

# TODO: Disable the user instead of destroying them (to prevent data loss)
user.update_attribute(:active, false)
end

def user_updated
puts "Updating user based on incoming data #{params.inspect}"
puts "Devise username column: #{::Devise.cas_username_column}="
puts "Devise CAS uniqueID column: #{::Devise.cas_username_column}="

data = params['data']
user = User.find_by_ido_id(data['ido_id'])

if user
# Re-use the CAS login method to set all the extra attributes we
# care about (first_name, last_name, email, local, timezone,
# etc.)
user.bushido_extra_attributes(data)
user.save
end
end

end

0 comments on commit a74e794

Please sign in to comment.