Sprankelprachtig aan/afmeldsysteem

members_controller.rb 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. class MembersController < ApplicationController
  2. include GroupsHelper
  3. before_action :set_group
  4. before_action :set_member, only: [:show, :edit, :update, :destroy, :promote, :demote]
  5. before_action :require_leader!, except: [ :index ]
  6. # GET /members
  7. # GET /members.json
  8. def index
  9. @admin = @group.is_leader?(current_person)
  10. @members = @group.members
  11. .joins(:person)
  12. .order('members.is_leader DESC, people.first_name ASC')
  13. end
  14. # GET /members/1
  15. # GET /members/1.json
  16. def show
  17. end
  18. # GET /members/new
  19. def new
  20. @member = Member.new
  21. @possible_members = Person.where.not(id: @group.person_ids)
  22. end
  23. def invite
  24. @person = Person.new
  25. end
  26. def promote
  27. @member.update_attribute(:is_leader, true)
  28. flash_message(:success, I18n.t('groups.leader_added', name: @member.person.full_name))
  29. redirect_to group_members_path(@group)
  30. end
  31. def demote
  32. @member.update_attribute(:is_leader, false)
  33. flash_message(:success, I18n.t('groups.leader_removed', name: @member.person.full_name))
  34. redirect_to group_members_path(@group)
  35. end
  36. def process_invite
  37. @person = Person.find_by(email: params[:person][:email])
  38. new_rec = false
  39. if not @person
  40. @person = Person.new(invite_params)
  41. new_rec = true
  42. if not @person.save
  43. respond_to do |format|
  44. format.html { render 'invite' }
  45. format.json { render json: @person.errors, status: :unprocessable_entity }
  46. end
  47. return
  48. end
  49. end
  50. @member = Member.new(person: @person, group: @group, is_leader: false)
  51. @member.save!
  52. respond_to do |format|
  53. format.html do
  54. invited = ""
  55. invited = "invited to Aardbei and " if new_rec
  56. flash_message(
  57. :success,
  58. "#{@person.full_name} #{invited}added to group."
  59. )
  60. redirect_to group_members_path(@group)
  61. end
  62. format.json { render :show, status: :created, location: @person }
  63. end
  64. end
  65. # GET /members/1/edit
  66. def edit
  67. @possible_members = Person.where.not(id: @group.person_ids)
  68. end
  69. # POST /members
  70. # POST /members.json
  71. def create
  72. @member = Member.new(member_params)
  73. @member.group = @group
  74. respond_to do |format|
  75. if @member.save
  76. format.html {
  77. redirect_to group_member_url(@group, @member)
  78. flash_message(:info, I18n.t('groups.member_added', name: @member.person.full_name))
  79. }
  80. format.json { render :show, status: :created, location: @member }
  81. else
  82. @possible_members = Person.where.not(id: @group.person_ids)
  83. format.html { render :new }
  84. format.json { render json: @member.errors, status: :unprocessable_entity }
  85. end
  86. end
  87. end
  88. # PATCH/PUT /members/1
  89. # PATCH/PUT /members/1.json
  90. def update
  91. respond_to do |format|
  92. if @member.update(member_params)
  93. format.html {
  94. redirect_to group_member_url(@group, @member)
  95. flash_message(:info, I18n.t('groups.member_updated'))
  96. }
  97. format.json { render :show, status: :ok, location: @member }
  98. else
  99. @possible_members = Person.where.not(id: @group.person_ids)
  100. format.html { render :edit }
  101. format.json { render json: @member.errors, status: :unprocessable_entity }
  102. end
  103. end
  104. end
  105. # DELETE /members/1
  106. # DELETE /members/1.json
  107. def destroy
  108. @member.destroy
  109. respond_to do |format|
  110. format.html {
  111. redirect_to group_members_url(@group)
  112. flash_message(:info, I18n.t('groups.member_removed', name: @member.person.full_name))
  113. }
  114. format.json { head :no_content }
  115. end
  116. end
  117. private
  118. # Use callbacks to share common setup or constraints between actions.
  119. def set_member
  120. @member = Member.find(params[:id])
  121. end
  122. def set_group
  123. @group = Group.find(params[:group_id])
  124. end
  125. # Never trust parameters from the scary internet, only allow the white list through.
  126. def member_params
  127. params.require(:member).permit(:person_id, :is_leader)
  128. end
  129. # Never trust parameters from the scary internet, only allow the white list
  130. # through. Note: differs from the ones in PeopleController because
  131. # creating admins is not allowed.
  132. def invite_params
  133. params.require(:person).permit(:first_name, :infix, :last_name, :email, :birth_date)
  134. end
  135. end