Pārlūkot izejas kodu

Begin work on subgroups

Create DefaultSubgroups and management via group#edit.
Maarten van den Berg 7 gadi atpakaļ
vecāks
revīzija
f31de28a92

+ 47 - 3
app/controllers/groups_controller.rb

@@ -1,9 +1,10 @@
1 1
 class GroupsController < ApplicationController
2 2
   include GroupsHelper
3
-  before_action :set_group, only: [:show, :edit, :update, :destroy]
3
+  before_action :set_group, only: [:show, :edit, :update, :destroy, :create_default_subgroup, :update_default_subgroup, :destroy_default_subgroup]
4
+  before_action :set_default_subgroup, only: [:update_default_subgroup, :destroy_default_subgroup]
4 5
   before_action :require_admin!, only: [:index, :process_mass_add_members, :mass_add_members]
5 6
   before_action :require_membership!, only: [:show]
6
-  before_action :require_leader!, only: [:edit, :update, :destroy]
7
+  before_action :require_leader!, only: [:edit, :update, :destroy, :create_default_subgroup, :update_default_subgroup, :destroy_default_subgroup]
7 8
 
8 9
   # GET /groups
9 10
   # GET /groups.json
@@ -45,6 +46,7 @@ class GroupsController < ApplicationController
45 46
 
46 47
   # GET /groups/1/edit
47 48
   def edit
49
+    @defaultsubgroup = DefaultSubgroup.new
48 50
   end
49 51
 
50 52
   # POST /groups
@@ -77,6 +79,7 @@ class GroupsController < ApplicationController
77 79
         }
78 80
         format.json { render :show, status: :ok, location: @group }
79 81
       else
82
+        @defaultsubgroup = DefaultSubgroup.new
80 83
         format.html { render :edit }
81 84
         format.json { render json: @group.errors, status: :unprocessable_entity }
82 85
       end
@@ -117,14 +120,55 @@ class GroupsController < ApplicationController
117 120
     redirect_to group_members_path(@group)
118 121
   end
119 122
 
123
+  # POST /groups/:id/default_subgroups
124
+  def create_default_subgroup
125
+    @defaultsubgroup = DefaultSubgroup.new(default_subgroup_params)
126
+    @defaultsubgroup.group = @group
127
+
128
+    if @defaultsubgroup.save
129
+      flash_message(:success, I18n.t('defaultsubgroups.created'))
130
+      redirect_to edit_group_path(@group)
131
+    else
132
+      flash_message(:danger, I18n.t('defaultsubgroups.create_failed'))
133
+      render :edit
134
+    end
135
+  end
136
+
137
+  # PATCH /groups/:id/default_subgroups/:default_subgroup_id
138
+  def update_default_subgroup
139
+    if @defaultsubgroup.update(default_subgroup_params)
140
+      flash_message(:success, I18n.t('defaultsubgroups.updated'))
141
+      redirect_to edit_group_path(@group)
142
+    else
143
+      flash_message(:danger, I18n.t('defaultsubgroups.update_failed'))
144
+      render :edit
145
+    end
146
+  end
147
+
148
+  # DELETE /groups/:id/default_subgroups/:default_subgroup_id
149
+  def destroy_default_subgroup
150
+    @defaultsubgroup.destroy
151
+    flash_message(:info, I18n.t('defaultsubgroups.destroyed'))
152
+    redirect_to edit_group_path(@group)
153
+  end
154
+
120 155
   private
121 156
     # Use callbacks to share common setup or constraints between actions.
122 157
     def set_group
123
-      @group = Group.find(params[:id])
158
+      @group = Group.find(params[:group_id] || params[:id])
159
+    end
160
+
161
+    # Retrieve DefaultSubgroup to update or delete
162
+    def set_default_subgroup
163
+      @defaultsubgroup = DefaultSubgroup.find(params[:default_subgroup_id])
124 164
     end
125 165
 
126 166
     # Never trust parameters from the scary internet, only allow the white list through.
127 167
     def group_params
128 168
       params.require(:group).permit(:name)
129 169
     end
170
+
171
+    def default_subgroup_params
172
+      params.require(:default_subgroup).permit(:name, :is_assignable)
173
+    end
130 174
 end

+ 6 - 0
app/models/default_subgroup.rb

@@ -0,0 +1,6 @@
1
+class DefaultSubgroup < ApplicationRecord
2
+  belongs_to :group
3
+
4
+  validates :name, presence: true, uniqueness: { scope: :group, case_sensitive: false }
5
+  validates :group, presence: true
6
+end

+ 3 - 0
app/models/group.rb

@@ -13,6 +13,9 @@ class Group < ApplicationRecord
13 13
   has_many :activities,
14 14
     dependent: :destroy
15 15
 
16
+  has_many :default_subgroups,
17
+    dependent: :destroy
18
+
16 19
   validates :name,
17 20
     presence: true,
18 21
     uniqueness: {

+ 0 - 6
app/views/groups/edit.html.erb

@@ -1,6 +0,0 @@
1
-<h1>Editing Group</h1>
2
-
3
-<%= render 'form', group: @group %>
4
-
5
-<%= link_to 'Show', @group %> |
6
-<%= link_to 'Back', groups_path %>

+ 59 - 0
app/views/groups/edit.html.haml

@@ -0,0 +1,59 @@
1
+%h1
2
+  = t 'groups.edit'
3
+
4
+= render 'form', group: @group
5
+
6
+%h2
7
+  = t 'defaultsubgroups.manage'
8
+
9
+%p
10
+  = t 'defaultsubgroups.settings_blurb'
11
+
12
+.row
13
+  .col-md-6
14
+    %h4
15
+      = t 'defaultsubgroups.create'
16
+
17
+    -#= form_tag(group_create_default_subgroup_path(@group), method: :post, class: 'form') do
18
+    = form_for(@defaultsubgroup, url: group_create_default_subgroup_path(@group), method: :post) do |f|
19
+      - if @defaultsubgroup.errors.any?
20
+        .has-error.form-group#error_explanation
21
+          %ul
22
+            - @defaultsubgroup.errors.full_messages.each do |message|
23
+              %li
24
+                = message
25
+
26
+      .form-group{ class: [ ('has-error' if @defaultsubgroup.errors.any?) ] }
27
+        %label
28
+          = t 'activerecord.attributes.default_subgroup.name'
29
+        = f.text_field(:name, class: 'form-control')
30
+
31
+      .form-group
32
+        .check-box
33
+          %label
34
+            = f.check_box(:is_assignable)
35
+            = t 'activerecord.attributes.default_subgroup.is_assignable'
36
+
37
+      = f.submit t('defaultsubgroups.create'), class: 'btn btn-success'
38
+
39
+  .col-md-6
40
+    %h4
41
+      = t 'defaultsubgroups.destroy'
42
+
43
+    - if @group.default_subgroups.blank?
44
+      %p
45
+        = t 'defaultsubgroups.none'
46
+
47
+    - else
48
+      = form_tag(group_destroy_default_subgroup_path(@group), method: :delete, class: 'form') do
49
+        .form-group
50
+          %label
51
+            = t 'activerecord.models.default_subgroup.one'
52
+          - options = @group.default_subgroups.pluck(:name, :id)
53
+          = select_tag(:default_subgroup_id, options_for_select(options), class: 'form-control')
54
+
55
+        = submit_tag(t('defaultsubgroups.destroy'), class: 'btn btn-danger')
56
+
57
+.row
58
+  .col-xs-12
59
+    = link_to t(:back), @group, class: 'btn btn-default'

+ 16 - 0
config/locales/defaultsubgroups_en.yml

@@ -0,0 +1,16 @@
1
+en:
2
+  defaultsubgroups:
3
+    manage: 'Manage default subgroups'
4
+    settings_blurb: "The groups set here will be added automatically to each new activity that is created. Note that actually assigning participants to groups has to be enabled separately."
5
+
6
+    create: 'Add default subgroup'
7
+    created: 'Default subgroup added.'
8
+    create_failed: 'Could not create default subgroup!'
9
+
10
+    updated: 'Default subgroup updated.'
11
+    update_failed: 'Could not update default subgroup!'
12
+
13
+    destroy: 'Remove default subgroup'
14
+    destroyed: 'Default subgroup destroyed.'
15
+
16
+    none: 'There are no default subgroups.'

+ 16 - 0
config/locales/defaultsubgroups_nl.yml

@@ -0,0 +1,16 @@
1
+nl:
2
+  defaultsubgroups:
3
+    manage: 'Standaard subgroepen aanpassen'
4
+    settings_blurb: "De groepen die hier staan aangegeven worden automatisch aangemaakt voor iedere nieuwe activiteit die wordt toegevoegd. Het daadwerkelijk indelen in deze groepen moet wel per activiteit worden ingeschakeld."
5
+
6
+    create: 'Standaardgroep toevoegen'
7
+    created: 'Standaardgroep toegevoegd.'
8
+    create_failed: 'Kon de standaardgroep niet opslaan!'
9
+
10
+    updated: 'Standaardgroep bijgewerkt.'
11
+    update_failed: 'Kon de standaardgroep niet bijwerken!'
12
+
13
+    destroy: 'Standaardgroep verwijderen'
14
+    destroyed: 'Standaardgroep verwijderd.'
15
+
16
+    none: 'Er zijn geen standaardgroepen.'

+ 9 - 0
config/locales/translation_nl.yml

@@ -24,6 +24,10 @@ nl:
24 24
       token: Token  #g
25 25
       user: Gebruiker  #g
26 26
 
27
+      default_subgroup:
28
+        one: Standaardgroep
29
+        other: Standaardgroepen
30
+
27 31
     attributes:
28 32
       activity:
29 33
         deadline: Deadline  #g
@@ -40,6 +44,7 @@ nl:
40 44
 
41 45
       group:
42 46
         activities: Activiteiten  #g
47
+        default_subgroups: Standaardsubgroepen
43 48
         members: Leden  #g
44 49
         name: Naam  #g
45 50
         people: Mensen  #g
@@ -87,3 +92,7 @@ nl:
87 92
         email: E-mail  #g
88 93
         password_digest: Wachtwoord-digest  #g
89 94
         person: :activerecord.models.person  #g
95
+
96
+      default_subgroup:
97
+        name: Naam
98
+        is_assignable: Gebruiken voor indelen

+ 4 - 0
config/routes.rb

@@ -36,6 +36,10 @@ Rails.application.routes.draw do
36 36
     get 'mass_add', to: 'groups#mass_add_members'
37 37
     post 'mass_add', to: 'groups#process_mass_add_members'
38 38
 
39
+    post 'subgroups', to: 'groups#create_default_subgroup', as: 'create_default_subgroup'
40
+    patch 'subgroups/:default_subgroup_id', to: 'groups#update_default_subgroup', as: 'update_default_subgroup'
41
+    delete 'subgroups(/:default_subgroup_id)', to: 'groups#destroy_default_subgroup', as: 'destroy_default_subgroup'
42
+
39 43
     resources :members do
40 44
       post 'promote', to: 'members#promote', on: :member
41 45
       post 'demote', to: 'members#demote', on: :member

+ 11 - 0
db/migrate/20170930201201_create_default_subgroups.rb

@@ -0,0 +1,11 @@
1
+class CreateDefaultSubgroups < ActiveRecord::Migration[5.0]
2
+  def change
3
+    create_table :default_subgroups do |t|
4
+      t.references :group, foreign_key: true
5
+      t.string :name, null: false
6
+      t.boolean :is_assignable
7
+
8
+      t.timestamps
9
+    end
10
+  end
11
+end

+ 10 - 1
db/schema.rb

@@ -10,7 +10,7 @@
10 10
 #
11 11
 # It's strongly recommended that you check this file into your version control system.
12 12
 
13
-ActiveRecord::Schema.define(version: 20170917140643) do
13
+ActiveRecord::Schema.define(version: 20170930201201) do
14 14
 
15 15
   create_table "activities", force: :cascade do |t|
16 16
     t.string   "name"
@@ -27,6 +27,15 @@ ActiveRecord::Schema.define(version: 20170917140643) do
27 27
     t.index ["group_id"], name: "index_activities_on_group_id"
28 28
   end
29 29
 
30
+  create_table "default_subgroups", force: :cascade do |t|
31
+    t.integer  "group_id"
32
+    t.string   "name",          null: false
33
+    t.boolean  "is_assignable"
34
+    t.datetime "created_at",    null: false
35
+    t.datetime "updated_at",    null: false
36
+    t.index ["group_id"], name: "index_default_subgroups_on_group_id"
37
+  end
38
+
30 39
   create_table "delayed_jobs", force: :cascade do |t|
31 40
     t.integer  "priority",   default: 0, null: false
32 41
     t.integer  "attempts",   default: 0, null: false