Sprankelprachtig aan/afmeldsysteem

members_controller.rb 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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, "#{@member.person.full_name} is now a group leader.")
  29. redirect_to group_members_path(@group)
  30. end
  31. def demote
  32. @member.update_attribute(:is_leader, false)
  33. flash_message(:success, "#{@member.person.full_name} is no longer a group leader.")
  34. redirect_to group_members_path(@group)
  35. end
  36. def process_invite
  37. @person = Person.find_by(email: params[:person][:email])
  38. if not @person
  39. @person = Person.new(invite_params)
  40. if not @person.save
  41. respond_to do |format|
  42. format.html { render 'invite' }
  43. format.json { render json: @person.errors, status: :unprocessable_entity }
  44. end
  45. return
  46. end
  47. end
  48. new_rec = @member.new_record?
  49. @member = Member.new(person: @person, group: @group, is_leader: false)
  50. @member.save!
  51. respond_to do |format|
  52. format.html do
  53. invited = "invited to Aardbei and " if new_rec else ""
  54. flash_message(
  55. :success,
  56. "#{@person.full_name} #{invited}added to group."
  57. )
  58. redirect_to group_members_path(@group)
  59. end
  60. format.json { render :show, status: :created, location: @person }
  61. end
  62. end
  63. # GET /members/1/edit
  64. def edit
  65. @possible_members = Person.where.not(id: @group.person_ids)
  66. end
  67. # POST /members
  68. # POST /members.json
  69. def create
  70. @member = Member.new(member_params)
  71. @member.group = @group
  72. respond_to do |format|
  73. if @member.save
  74. format.html {
  75. redirect_to group_member_url(@group, @member)
  76. flash_message(:info, "#{@member.full_name} was added successfully.")
  77. }
  78. format.json { render :show, status: :created, location: @member }
  79. else
  80. @possible_members = Person.where.not(id: @group.person_ids)
  81. format.html { render :new }
  82. format.json { render json: @member.errors, status: :unprocessable_entity }
  83. end
  84. end
  85. end
  86. # PATCH/PUT /members/1
  87. # PATCH/PUT /members/1.json
  88. def update
  89. respond_to do |format|
  90. if @member.update(member_params)
  91. format.html {
  92. redirect_to group_member_url(@group, @member)
  93. flash_message(:info, 'Member was successfully updated.')
  94. }
  95. format.json { render :show, status: :ok, location: @member }
  96. else
  97. @possible_members = Person.where.not(id: @group.person_ids)
  98. format.html { render :edit }
  99. format.json { render json: @member.errors, status: :unprocessable_entity }
  100. end
  101. end
  102. end
  103. # DELETE /members/1
  104. # DELETE /members/1.json
  105. def destroy
  106. @member.destroy
  107. respond_to do |format|
  108. format.html {
  109. redirect_to group_members_url(@group)
  110. flash_message(:info, "#{@member.person.full_name} was successfully removed.")
  111. }
  112. format.json { head :no_content }
  113. end
  114. end
  115. private
  116. # Use callbacks to share common setup or constraints between actions.
  117. def set_member
  118. @member = Member.find(params[:id])
  119. end
  120. def set_group
  121. @group = Group.find(params[:group_id])
  122. end
  123. # Never trust parameters from the scary internet, only allow the white list through.
  124. def member_params
  125. params.require(:member).permit(:person_id, :is_leader)
  126. end
  127. # Never trust parameters from the scary internet, only allow the white list
  128. # through. Note: differs from the ones in PeopleController because
  129. # creating admins is not allowed.
  130. def invite_params
  131. params.require(:person).permit(:first_name, :infix, :last_name, :email, :birth_date)
  132. end
  133. end