added intervention controller and stuff
This commit is contained in:
55
app/controllers/interventions_controller.rb
Normal file
55
app/controllers/interventions_controller.rb
Normal file
@ -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
|
@ -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
|
34
app/policies/intervention_policy.rb
Normal file
34
app/policies/intervention_policy.rb
Normal file
@ -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
|
6
app/views/interventions/_form.html.slim
Normal file
6
app/views/interventions/_form.html.slim
Normal file
@ -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)
|
14
app/views/interventions/index.html.slim
Normal file
14
app/views/interventions/index.html.slim
Normal file
@ -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)
|
4
app/views/interventions/show.html.slim
Normal file
4
app/views/interventions/show.html.slim
Normal file
@ -0,0 +1,4 @@
|
||||
h1
|
||||
= @intervention.name
|
||||
|
||||
= row(label: 'intervention.name', value: @intervention.name)
|
@ -75,6 +75,8 @@ de:
|
||||
message: Nachricht
|
||||
name: Name
|
||||
regular_expression: Regulärer Ausdruck
|
||||
intervention:
|
||||
name: Name
|
||||
internal_user:
|
||||
activated: Aktiviert
|
||||
consumer: Konsument
|
||||
|
@ -96,6 +96,8 @@ en:
|
||||
message: Message
|
||||
name: Name
|
||||
regular_expression: Regular Expression
|
||||
intervention:
|
||||
name: Name
|
||||
internal_user:
|
||||
activated: Activated
|
||||
consumer: Consumer
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user