diff --git a/app/controllers/api/v0/themes_controller.rb b/app/controllers/api/v0/themes_controller.rb index ba48b82..5dd997a 100644 --- a/app/controllers/api/v0/themes_controller.rb +++ b/app/controllers/api/v0/themes_controller.rb @@ -5,40 +5,46 @@ def extract # check if the user has permissions to use the themes API - @theme = Theme.find(params[:id]) + @theme = Theme.find_by(:slug => params[:slug]) + raise Pundit::NotAuthorizedError unless Api::V0::ThemePolicy.new(@user, @theme).extract? - @answers = @theme.answers.where(plan_id: @user.plans.pluck(:id)) - admin_answers = [] - org_answers = [] + @answers = [] + if @theme + @answers = @theme.answers.where(plan_id: @user.plans.pluck(:id)) + admin_answers = [] + org_answers = [] - if params[:admin_visible].present? && params[:admin_visible] - admin_answers = @theme.answers.where(plan_id: @user.org.plans.privately_visible) + if params[:admin_visible].present? && params[:admin_visible] + admin_answers = @theme.answers.where(plan_id: @user.org.plans.privately_visible) + end + + if params[:org_visible].present? && params[:org_visible] + org_answers = @theme.answers.where(plan_id: @user.org.plans.organisationally_visible) + end + + if params[:template_id].present? && params[:template_id] + @answers = @answers.where(plan_id: @user.plans.where(template_id: params[:template_id]).pluck(:id)) + end + + if params[:question_id].present? && params[:question_id] + @answers = @answers.where(question_id: params[:question_id]) + end + + if params[:start_date].present? && params[:start_date] + @answers = @answers.where('answers.created_at >=?', params[:start_date]) + end + + if params[:end_date].present? && params[:end_date] + @answers = @answers.where('answers.created_at <=?', params[:end_date]) + end + + else + render json: _("Theme not found"), status: 404 end - - if params[:org_visible].present? && params[:org_visible] - org_answers = @theme.answers.where(plan_id: @user.org.plans.organisationally_visible) - end - - if params[:template_id].present? && params[:template_id] - @answers = @answers.where(plan_id: @user.plans.where(template_id: params[:template_id]).pluck(:id)) - end - - if params[:question_id].present? && params[:question_id] - @answers = @answers.where(question_id: params[:question_id]) - end - - if params[:start_date].present? && params[:start_date] - @answers = @answers.where('answers.created_at >=?', params[:start_date]) - end - - if params[:end_date].present? && params[:end_date] - @answers = @answers.where('answers.created_at <=?', params[:end_date]) - end - end def extract_params - params.permit(:id, :template_id, :question_id, :start_date, :end_date, :admin_visible, :org_visible) + params.permit(:slug, :template_id, :question_id, :start_date, :end_date, :admin_visible, :org_visible) end def extract_filtering_params diff --git a/app/models/theme.rb b/app/models/theme.rb index d13ca7b..8ef59ea 100644 --- a/app/models/theme.rb +++ b/app/models/theme.rb @@ -13,6 +13,9 @@ attr_accessible :question_ids, :as => [:default, :admin] attr_accessible :description, :title, :locale , :as => [:default, :admin] + ## + # Before save & create + before_save :generate_slug validates :title, presence: {message: _("can't be blank")} @@ -28,4 +31,13 @@ title end + def to_slug + title.parameterize.truncate(80, omission: '') + end + + def generate_slug + if self.title + self.slug = self.title.parameterize + end + end end diff --git a/config/routes.rb b/config/routes.rb index 3dc2f17..3f2f6f5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -210,7 +210,7 @@ get :plans end end - resources :themes, only: [] do + resources :themes, param: :slug, only: [] do member do get 'extract', to: 'themes#extract' end diff --git a/db/migrate/20190109143548_add_slug_to_theme.rb b/db/migrate/20190109143548_add_slug_to_theme.rb new file mode 100644 index 0000000..4501db5 --- /dev/null +++ b/db/migrate/20190109143548_add_slug_to_theme.rb @@ -0,0 +1,5 @@ +class AddSlugToTheme < ActiveRecord::Migration + def change + add_column :themes, :slug, :string + end +end