* Allow user to have many orgs * Allow users to handle multi orgs in settings * Make rounded buttons inline * Add multi org function to dashboards * Fix merge conflicts * Fix mistake in merge conflict fix oops * Display the correct membership level * Fix accessibility issues * Display organizations for article editors * Handle submitting org id with preact editors * Make listings work with multiple organizations * Allow listings to have multiple orgs on create * Display the correct number of credits for each org * Move script tag to Webpack * Allow multi orgs for purchasing and viewing credits * Use OrganizationMembership as authorization check * Display multiple organizations for notifications * Allow dashboard to be viewable under multi-orgs * Remove unused method * Add multi-org functionality for article editors * Show pro dashboard buttons for member+ org levels * Leave the correct organization * Allow article API to change org id * Add left-out authorization method oops * Make nav buttons a bit more clear * Fix merge conflict * Fix adding org id for /api/articles and tests * Fix tests for org policy * Use proper logic for displaying org members * Update org actions with new authorization * Use correct org when creating a listing * Remove additional payment charge oops * Mark org notifications as read with authorization * Remove deprecated post_as_organization attribute * Use new org_admin syntax * Remove deprecated org logic for article create and update * Default all RSS posts to not belong to any org * Render org_member page for guest users * Update org policy spec to work with multi orgs * Use org_membership for org traits and move identity code * Use org_member trait * Update to work with multi-orgs * Validate article's org_id if param org_id is blank * Make a let variable * Remove unnecessary eager load for credits * Fix HTML structure and org logic for non-org users * Update credits spec for multi-org * Add test for failed payment when purchased by org * Lint listings_spec * Test that the listing was created under the user * Add tests for POST /listings multi-org * Use double quotes for classes * Fix /manage and a few other multi-org bugs * Fix test for multi org * Use correct method SQL exists? not Rails exist? * Fix reads spec for multi-org * Fix org_controller actions to work with multi org * Test only multi org and not old usage and fix leave_org * Fix org showing user profile img test for multi-org * Fix org logic for users with no orgs * Remove switch org functionality * Update tests and add hidden param for org id * Redirect to the specific organization * Test other org button actions * Use settings_notice instead of legacy notice and refactor * Fix weird extra end issue prob from merge conflicts * Test for with new flash key * Fix user_views_org tests for multi-org * Test for new flash message * Update snapshot with new a11y html * Move styling to stylesheet * Add site admins functionality * Move org_member? method in user model and refactor * Use unspent_credits_count for organizations * Add tests for /listings/new and minor bug fixes * Use .present? in case of empty array * Fix a lingering deprecated method * Use greater than 1 for random numbers * Add tests for counting spent and unspent credits
64 lines
2.5 KiB
Ruby
64 lines
2.5 KiB
Ruby
class NotificationsController < ApplicationController
|
|
# No authorization required because we provide authentication on notifications page
|
|
def index
|
|
return unless user_signed_in?
|
|
|
|
@notifications_index = true
|
|
@user = user_to_view
|
|
if params[:page]
|
|
num = 45
|
|
notified_at_offset = Notification.find(params[:page])&.notified_at
|
|
else
|
|
num = 10
|
|
end
|
|
@notifications = if (params[:org_id].present? || params[:filter] == "org") && allowed_user?
|
|
organization_notifications
|
|
elsif params[:org_id].blank? && params[:filter].present?
|
|
filtered_notifications
|
|
else
|
|
Notification.where(user_id: @user.id).order("notified_at DESC")
|
|
end
|
|
@last_user_reaction = @user.reactions.last&.id
|
|
@last_user_comment = @user.comments.last&.id
|
|
@notifications = @notifications.where("notified_at < ?", notified_at_offset) if notified_at_offset
|
|
@notifications = NotificationDecorator.decorate_collection(@notifications.limit(num))
|
|
@organizations = @user.member_organizations if @user.organizations
|
|
render partial: "notifications_list" if notified_at_offset
|
|
end
|
|
|
|
private
|
|
|
|
def user_to_view
|
|
if params[:username] && current_user.admin?
|
|
User.find_by(username: params[:username])
|
|
else
|
|
current_user
|
|
end
|
|
end
|
|
|
|
def filtered_notifications
|
|
if params[:filter].to_s.casecmp("posts").zero?
|
|
Notification.where(user_id: @user.id, notifiable_type: "Article", action: "Published").
|
|
order("notified_at DESC")
|
|
elsif params[:filter].to_s.casecmp("comments").zero?
|
|
Notification.where(user_id: @user.id, notifiable_type: "Comment", action: nil). # Nil action means not reaction in this context
|
|
or(Notification.where(user_id: @user.id, notifiable_type: "Mention")).
|
|
order("notified_at DESC")
|
|
end
|
|
end
|
|
|
|
def organization_notifications
|
|
if params[:filter].to_s.casecmp("comments").zero?
|
|
Notification.where(organization_id: params[:org_id], notifiable_type: "Comment", action: nil, user_id: nil). # Nil action means not reaction in this context
|
|
or(Notification.where(organization_id: params[:org_id], notifiable_type: "Mention", user_id: nil)).
|
|
order("notified_at DESC")
|
|
else
|
|
Notification.where(organization_id: params[:org_id], user_id: nil).
|
|
order("notified_at DESC")
|
|
end
|
|
end
|
|
|
|
def allowed_user?
|
|
@user.organization_id == params[:org_id] || @user.admin?
|
|
end
|
|
end
|