From 3d7f5bdf1a48035efe2be41f8ec192c4d83ba14b Mon Sep 17 00:00:00 2001 From: Thomas Hille Date: Tue, 28 Feb 2017 15:24:53 +0100 Subject: [PATCH] added intervention controller and stuff --- app/controllers/interventions_controller.rb | 55 +++++++++++++++++++ app/models/intervention.rb | 17 +++--- app/policies/intervention_policy.rb | 34 ++++++++++++ app/views/interventions/_form.html.slim | 6 ++ app/views/interventions/index.html.slim | 14 +++++ app/views/interventions/show.html.slim | 4 ++ config/locales/de.yml | 2 + config/locales/en.yml | 2 + config/routes.rb | 9 +++ .../20170205210357_create_interventions.rb | 6 ++ 10 files changed, 141 insertions(+), 8 deletions(-) create mode 100644 app/controllers/interventions_controller.rb create mode 100644 app/policies/intervention_policy.rb create mode 100644 app/views/interventions/_form.html.slim create mode 100644 app/views/interventions/index.html.slim create mode 100644 app/views/interventions/show.html.slim diff --git a/app/controllers/interventions_controller.rb b/app/controllers/interventions_controller.rb new file mode 100644 index 00000000..b4b5971e --- /dev/null +++ b/app/controllers/interventions_controller.rb @@ -0,0 +1,55 @@ +class InterventionsController < ApplicationController + include CommonBehavior + + before_action :set_intervention, only: MEMBER_ACTIONS + + def authorize! + authorize(@intervention || @interventions) + end + private :authorize! + + def create + #@intervention = Intervention.new(intervention_params) + #authorize! + #create_and_respond(object: @intervention) + end + + def destroy + destroy_and_respond(object: @intervention) + end + + def edit + end + + def intervention_params + params[:intervention].permit(:name) + end + private :intervention_params + + def index + @interventions = Intervention.all.paginate(page: params[:page]) + authorize! + end + + def new + #@intervention = Intervention.new + #authorize! + end + + def set_intervention + @intervention = Intervention.find(params[:id]) + authorize! + end + private :set_intervention + + def show + end + + def update + update_and_respond(object: @intervention, params: intervention_params) + end + + def to_s + name + end +end diff --git a/app/models/intervention.rb b/app/models/intervention.rb index 960a4188..a6693450 100644 --- a/app/models/intervention.rb +++ b/app/models/intervention.rb @@ -1,15 +1,16 @@ class Intervention < ActiveRecord::Base - NAME = %w(overallSlower longSession syntaxErrors videoNotWatched) - has_many :user_exercise_interventions has_many :users, through: :user_exercise_interventions, source_type: "ExternalUser" - #belongs_to :user, polymorphic: true - #belongs_to :external_users, source: :user, source_type: ExternalUser - #belongs_to :internal_users, source: :user, source_type: InternalUser, through: :user_interventions - # alias_method :users, :external_users - #has_many :exercises, through: :user_interventions - validates :name, inclusion: {in: NAME} + def to_s + name + end + + def self.createDefaultInterventions + %w(BreakIntervention QuestionIntervention).each do |name| + Intervention.find_or_create_by(name: name) + end + end end \ No newline at end of file diff --git a/app/policies/intervention_policy.rb b/app/policies/intervention_policy.rb new file mode 100644 index 00000000..b3a25667 --- /dev/null +++ b/app/policies/intervention_policy.rb @@ -0,0 +1,34 @@ +class InterventionPolicy < AdminOrAuthorPolicy + def author? + @user == @record.author + end + private :author? + + def batch_update? + admin? + end + + def show? + @user.internal_user? + end + + [:clone?, :destroy?, :edit?, :update?].each do |action| + define_method(action) { admin? || author?} + end + + [:reload?].each do |action| + define_method(action) { everyone } + end + + class Scope < Scope + def resolve + if @user.admin? + @scope.all + elsif @user.internal_user? + @scope.where('user_id = ? OR public = TRUE', @user.id) + else + @scope.none + end + end + end +end diff --git a/app/views/interventions/_form.html.slim b/app/views/interventions/_form.html.slim new file mode 100644 index 00000000..6ffe7397 --- /dev/null +++ b/app/views/interventions/_form.html.slim @@ -0,0 +1,6 @@ += form_for(@intervention) do |f| + = render('shared/form_errors', object: @intervention) + .form-group + = f.label(:name) + = f.text_field(:name, class: 'form-control', required: true) + .actions = render('shared/submit_button', f: f, object: @intervention) diff --git a/app/views/interventions/index.html.slim b/app/views/interventions/index.html.slim new file mode 100644 index 00000000..fc7afe05 --- /dev/null +++ b/app/views/interventions/index.html.slim @@ -0,0 +1,14 @@ +h1 = Intervention.model_name.human(count: 2) + +.table-responsive + table.table + thead + tr + th = t('activerecord.attributes.intervention.name') + tbody + - @interventions.each do |intervention| + tr + td = intervention.name + td = link_to(t('shared.show'), intervention) + += render('shared/pagination', collection: @interventions) diff --git a/app/views/interventions/show.html.slim b/app/views/interventions/show.html.slim new file mode 100644 index 00000000..f9202240 --- /dev/null +++ b/app/views/interventions/show.html.slim @@ -0,0 +1,4 @@ +h1 + = @intervention.name + += row(label: 'intervention.name', value: @intervention.name) diff --git a/config/locales/de.yml b/config/locales/de.yml index 09c6932c..cda9f8f4 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -75,6 +75,8 @@ de: message: Nachricht name: Name regular_expression: Regulärer Ausdruck + intervention: + name: Name internal_user: activated: Aktiviert consumer: Konsument diff --git a/config/locales/en.yml b/config/locales/en.yml index e3c0bc6f..b0c54a09 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -96,6 +96,8 @@ en: message: Message name: Name regular_expression: Regular Expression + intervention: + name: Name internal_user: activated: Activated consumer: Consumer diff --git a/config/routes.rb b/config/routes.rb index 87cde74c..79f57fe5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -61,6 +61,7 @@ Rails.application.routes.draw do post :clone get :implement get :working_times + post :intervention get :statistics get :reload post :submit @@ -83,6 +84,14 @@ Rails.application.routes.draw do end end + resources :interventions do + member do + post :clone + get :reload + post :submit + end + end + resources :external_users, only: [:index, :show], concerns: :statistics do resources :exercises, concerns: :statistics end diff --git a/db/migrate/20170205210357_create_interventions.rb b/db/migrate/20170205210357_create_interventions.rb index 1b7a8121..803b8ddc 100644 --- a/db/migrate/20170205210357_create_interventions.rb +++ b/db/migrate/20170205210357_create_interventions.rb @@ -4,6 +4,7 @@ class CreateInterventions < ActiveRecord::Migration t.belongs_to :user, polymorphic: true t.belongs_to :exercise t.belongs_to :intervention + t.integer :accumulated_worktime_s t.timestamps end @@ -12,5 +13,10 @@ class CreateInterventions < ActiveRecord::Migration t.text :markup t.timestamps end + + Intervention.createDefaultInterventions + end + + end