docbrown/app/controllers/analytics_controller.rb
2018-02-28 16:11:08 -05:00

41 lines
1.2 KiB
Ruby

class AnalyticsController < ApplicationController
caches_action :index,
cache_path: Proc.new { "#{request.params}___#{current_user.id}" },
expires_in: 15.minutes
def index
article_ids = analytics_params.split(",")
if has_analytics_privilege?(article_ids.first, current_user)
cache_name = "pageviews-#{article_ids}/dashboard-index"
pageviews = Rails.cache.fetch(cache_name, expires_in: 15.minutes) do
GoogleAnalytics.new(article_ids).get_pageviews
end
render json: pageviews.to_json
else
render json: {}
end
end
private
def has_analytics_privilege?(article_id, current_user)
return false unless current_user
current_user_is_admin? ||
current_user_is_author_with_beta_acess?(article_id, current_user) ||
current_user_is_org_admin?(article_id, current_user)
end
def current_user_is_author_with_beta_acess?(article_id, user)
author = Article.find_by_id(article_id)&.user
author == user && user.has_role?(:analytics_beta_tester)
end
def current_user_is_org_admin?(article_id, user)
org_id = Article.find_by_id(article_id)&.organization_id
user.org_admin && user.organization_id == org_id
end
def analytics_params
params.require(:article_ids)
end
end