| 
				
			 | 
			
			
				@@ -1,16 +1,16 @@ 
			 | 
		
	
		
			
			| 
				1
			 | 
			
				1
			 | 
			
			
				 class MembersController < ApplicationController 
			 | 
		
	
		
			
			| 
				2
			 | 
			
				2
			 | 
			
			
				   include GroupsHelper 
			 | 
		
	
		
			
			| 
				3
			 | 
			
				3
			 | 
			
			
				   before_action :set_group 
			 | 
		
	
		
			
			| 
				4
			 | 
			
				
			 | 
			
			
				-  before_action :set_member, only: [:show, :edit, :update, :destroy] 
			 | 
		
	
		
			
			| 
				5
			 | 
			
				
			 | 
			
			
				-  before_action :require_leader! 
			 | 
		
	
		
			
			| 
				
			 | 
			
				4
			 | 
			
			
				+  before_action :set_member, only: [:show, :edit, :update, :destroy, :promote, :demote] 
			 | 
		
	
		
			
			| 
				
			 | 
			
				5
			 | 
			
			
				+  before_action :require_leader!, except: [ :index ] 
			 | 
		
	
		
			
			| 
				6
			 | 
			
				6
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				7
			 | 
			
				7
			 | 
			
			
				   # GET /members 
			 | 
		
	
		
			
			| 
				8
			 | 
			
				8
			 | 
			
			
				   # GET /members.json 
			 | 
		
	
		
			
			| 
				9
			 | 
			
				9
			 | 
			
			
				   def index 
			 | 
		
	
		
			
			| 
				
			 | 
			
				10
			 | 
			
			
				+    @admin = @group.is_leader?(current_person) 
			 | 
		
	
		
			
			| 
				10
			 | 
			
				11
			 | 
			
			
				     @members = @group.members 
			 | 
		
	
		
			
			| 
				11
			 | 
			
				12
			 | 
			
			
				       .joins(:person) 
			 | 
		
	
		
			
			| 
				12
			 | 
			
				
			 | 
			
			
				-      .order(is_leader: :desc) 
			 | 
		
	
		
			
			| 
				13
			 | 
			
				
			 | 
			
			
				-      .order('people.first_name ASC') 
			 | 
		
	
		
			
			| 
				
			 | 
			
				13
			 | 
			
			
				+      .order('members.is_leader DESC, people.first_name ASC') 
			 | 
		
	
		
			
			| 
				14
			 | 
			
				14
			 | 
			
			
				   end 
			 | 
		
	
		
			
			| 
				15
			 | 
			
				15
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				16
			 | 
			
				16
			 | 
			
			
				   # GET /members/1 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -24,6 +24,56 @@ class MembersController < ApplicationController 
			 | 
		
	
		
			
			| 
				24
			 | 
			
				24
			 | 
			
			
				     @possible_members = Person.where.not(id: @group.person_ids) 
			 | 
		
	
		
			
			| 
				25
			 | 
			
				25
			 | 
			
			
				   end 
			 | 
		
	
		
			
			| 
				26
			 | 
			
				26
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				27
			 | 
			
			
				+  def invite 
			 | 
		
	
		
			
			| 
				
			 | 
			
				28
			 | 
			
			
				+    @person = Person.new 
			 | 
		
	
		
			
			| 
				
			 | 
			
				29
			 | 
			
			
				+  end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				30
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				31
			 | 
			
			
				+  def promote 
			 | 
		
	
		
			
			| 
				
			 | 
			
				32
			 | 
			
			
				+    @member.update_attribute(:is_leader, true) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				33
			 | 
			
			
				+    flash_message(:success, "#{@member.person.full_name} is now a group leader.") 
			 | 
		
	
		
			
			| 
				
			 | 
			
				34
			 | 
			
			
				+    redirect_to group_members_path(@group) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				35
			 | 
			
			
				+  end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				36
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				37
			 | 
			
			
				+  def demote 
			 | 
		
	
		
			
			| 
				
			 | 
			
				38
			 | 
			
			
				+    @member.update_attribute(:is_leader, false) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				39
			 | 
			
			
				+    flash_message(:success, "#{@member.person.full_name} is no longer a group leader.") 
			 | 
		
	
		
			
			| 
				
			 | 
			
				40
			 | 
			
			
				+    redirect_to group_members_path(@group) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				41
			 | 
			
			
				+  end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				42
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				43
			 | 
			
			
				+  def process_invite 
			 | 
		
	
		
			
			| 
				
			 | 
			
				44
			 | 
			
			
				+    @person = Person.find_by(email: params[:person][:email]) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				45
			 | 
			
			
				+    if not @person 
			 | 
		
	
		
			
			| 
				
			 | 
			
				46
			 | 
			
			
				+      @person = Person.new(invite_params) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				47
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				48
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				49
			 | 
			
			
				+      if not @person.save 
			 | 
		
	
		
			
			| 
				
			 | 
			
				50
			 | 
			
			
				+        respond_to do |format| 
			 | 
		
	
		
			
			| 
				
			 | 
			
				51
			 | 
			
			
				+          format.html { render 'invite' } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				52
			 | 
			
			
				+          format.json { render json: @person.errors, status: :unprocessable_entity } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				53
			 | 
			
			
				+        end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				54
			 | 
			
			
				+        return 
			 | 
		
	
		
			
			| 
				
			 | 
			
				55
			 | 
			
			
				+      end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				56
			 | 
			
			
				+    end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				57
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				58
			 | 
			
			
				+    new_rec = @member.new_record? 
			 | 
		
	
		
			
			| 
				
			 | 
			
				59
			 | 
			
			
				+    @member = Member.new(person: @person, group: @group, is_leader: false) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				60
			 | 
			
			
				+    @member.save! 
			 | 
		
	
		
			
			| 
				
			 | 
			
				61
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				62
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				63
			 | 
			
			
				+    respond_to do |format| 
			 | 
		
	
		
			
			| 
				
			 | 
			
				64
			 | 
			
			
				+      format.html do 
			 | 
		
	
		
			
			| 
				
			 | 
			
				65
			 | 
			
			
				+        invited = "invited to Aardbei and " if new_rec else "" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				66
			 | 
			
			
				+        flash_message( 
			 | 
		
	
		
			
			| 
				
			 | 
			
				67
			 | 
			
			
				+          :success, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				68
			 | 
			
			
				+          "#{@person.full_name} #{invited}added to group." 
			 | 
		
	
		
			
			| 
				
			 | 
			
				69
			 | 
			
			
				+        ) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				70
			 | 
			
			
				+        redirect_to group_members_path(@group) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				71
			 | 
			
			
				+      end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				72
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				73
			 | 
			
			
				+      format.json { render :show, status: :created, location: @person } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				74
			 | 
			
			
				+    end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				75
			 | 
			
			
				+  end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				76
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				27
			 | 
			
				77
			 | 
			
			
				   # GET /members/1/edit 
			 | 
		
	
		
			
			| 
				28
			 | 
			
				78
			 | 
			
			
				   def edit 
			 | 
		
	
		
			
			| 
				29
			 | 
			
				79
			 | 
			
			
				     @possible_members = Person.where.not(id: @group.person_ids) 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -39,7 +89,7 @@ class MembersController < ApplicationController 
			 | 
		
	
		
			
			| 
				39
			 | 
			
				89
			 | 
			
			
				       if @member.save 
			 | 
		
	
		
			
			| 
				40
			 | 
			
				90
			 | 
			
			
				         format.html { 
			 | 
		
	
		
			
			| 
				41
			 | 
			
				91
			 | 
			
			
				           redirect_to group_member_url(@group, @member) 
			 | 
		
	
		
			
			| 
				42
			 | 
			
				
			 | 
			
			
				-          flash_message(:info, 'Member was successfully created.') 
			 | 
		
	
		
			
			| 
				
			 | 
			
				92
			 | 
			
			
				+          flash_message(:info, "#{@member.full_name} was added successfully.") 
			 | 
		
	
		
			
			| 
				43
			 | 
			
				93
			 | 
			
			
				         } 
			 | 
		
	
		
			
			| 
				44
			 | 
			
				94
			 | 
			
			
				         format.json { render :show, status: :created, location: @member } 
			 | 
		
	
		
			
			| 
				45
			 | 
			
				95
			 | 
			
			
				       else 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -75,7 +125,7 @@ class MembersController < ApplicationController 
			 | 
		
	
		
			
			| 
				75
			 | 
			
				125
			 | 
			
			
				     respond_to do |format| 
			 | 
		
	
		
			
			| 
				76
			 | 
			
				126
			 | 
			
			
				       format.html { 
			 | 
		
	
		
			
			| 
				77
			 | 
			
				127
			 | 
			
			
				         redirect_to group_members_url(@group) 
			 | 
		
	
		
			
			| 
				78
			 | 
			
				
			 | 
			
			
				-        flash_message(:info, 'Member was successfully destroyed.') 
			 | 
		
	
		
			
			| 
				
			 | 
			
				128
			 | 
			
			
				+        flash_message(:info, "#{@member.person.full_name} was successfully removed.") 
			 | 
		
	
		
			
			| 
				79
			 | 
			
				129
			 | 
			
			
				       } 
			 | 
		
	
		
			
			| 
				80
			 | 
			
				130
			 | 
			
			
				       format.json { head :no_content } 
			 | 
		
	
		
			
			| 
				81
			 | 
			
				131
			 | 
			
			
				     end 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -95,4 +145,11 @@ class MembersController < ApplicationController 
			 | 
		
	
		
			
			| 
				95
			 | 
			
				145
			 | 
			
			
				     def member_params 
			 | 
		
	
		
			
			| 
				96
			 | 
			
				146
			 | 
			
			
				       params.require(:member).permit(:person_id, :is_leader) 
			 | 
		
	
		
			
			| 
				97
			 | 
			
				147
			 | 
			
			
				     end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				148
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				149
			 | 
			
			
				+    # Never trust parameters from the scary internet, only allow the white list 
			 | 
		
	
		
			
			| 
				
			 | 
			
				150
			 | 
			
			
				+    # through.  Note: differs from the ones in PeopleController because 
			 | 
		
	
		
			
			| 
				
			 | 
			
				151
			 | 
			
			
				+    # creating admins is not allowed. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				152
			 | 
			
			
				+    def invite_params 
			 | 
		
	
		
			
			| 
				
			 | 
			
				153
			 | 
			
			
				+      params.require(:person).permit(:first_name, :infix, :last_name, :email, :birth_date) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				154
			 | 
			
			
				+    end 
			 | 
		
	
		
			
			| 
				98
			 | 
			
				155
			 | 
			
			
				 end 
			 |