# Provides read-only access to Activities. class Api::ActivitiesController < ApiController has_no_activity = [:index] # Session-based authentication/authorization before_action :set_activity, except: has_no_activity before_action :require_membership!, except: has_no_activity before_action :api_require_admin!, only: has_no_activity skip_before_action :api_require_authentication!, :set_activity, :require_membership!, if: 'request.authorization' # Group API-key-based authentication/authorization before_action :api_auth_group_token, if: 'request.authorization' before_action :set_activity_from_group, if: 'request.authorization' # GET /api/activities def index @activities = Activity.all end # GET /api/activities/1 def show end # GET /api/activities/1/response_summary def response_summary as = @activity .participants .joins(:person) .order('people.first_name ASC') present = as .where(attending: true) unknown = as .where(attending: nil) absent = as .where(attending: false) presentnames = present .map{|p| p.person.first_name } unknownnames = unknown .map{|p| p.person.first_name } absentnames = absent .map{|p| p.person.first_name } if presentnames.count > 0 present_mess = I18n.t('activities.participant.these_present', count: present.count, names: presentnames.join(', ')) else present_mess = I18n.t('activities.participant.none_present') end if unknownnames.count > 0 unknown_mess = I18n.t('activities.participant.these_unknown', count: unknown.count, names: unknownnames.join(', ')) else unknown_mess = I18n.t('activities.participant.none_unknown') end if absentnames.count > 0 absent_mess = I18n.t('activities.participant.these_absent', count: absent.count, names: absentnames.join(', ')) else absent_mess = I18n.t('activities.participant.none_absent') end @summary = { present: { count: present.count, names: presentnames, message: present_mess }, unknown: { count: unknown.count, names: unknownnames, message: unknown_mess }, absent: { count: absent.count, names: absentnames, message: absent_mess } } end private # Set activity from the :id-parameter def set_activity @activity = Activity.find(params[:id]) @group = @activity.group end # Set activity from the :id-parameter, and assert that it belongs to the set @group. def set_activity_from_group @activity = Activity.find(params[:id]) head :unauthorized unless @activity.group == @group end end