@@ -10,10 +10,10 @@ class TeachersController < ApplicationController
1010 include CsvProcess
1111
1212 before_action :load_pages , only : [ :new , :create , :edit , :update ]
13- before_action :load_teacher , except : [ :new , :index , :create , :import , :search ]
13+ before_action :load_teacher , except : [ :new , :index , :create , :import , :search , :sync_all_mailbluster ]
1414 before_action :sanitize_params , only : [ :new , :create , :edit , :update ]
1515 before_action :require_login , except : [ :new , :create ]
16- before_action :require_admin , only : [ :validate , :deny , :destroy , :index , :show , :search ]
16+ before_action :require_admin , only : [ :validate , :deny , :destroy , :index , :show , :search , :sync_mailbluster , :sync_all_mailbluster ]
1717 before_action :require_edit_permission , only : [ :edit , :update , :resend_welcome_email ]
1818
1919 rescue_from ActiveRecord ::RecordNotUnique , with : :deny_access
@@ -131,6 +131,7 @@ def update
131131
132132 attach_new_files_if_any
133133 send_email_if_application_status_changed_and_email_resend_enabled
134+ sync_to_mailbluster_if_status_changed
134135
135136 if fail_to_update
136137 return
@@ -162,6 +163,19 @@ def send_email_if_application_status_changed_and_email_resend_enabled
162163 end
163164 end
164165
166+ def sync_to_mailbluster_if_status_changed
167+ return unless MailblusterService . configured?
168+ return unless @teacher . application_status_changed?
169+
170+ if @teacher . validated?
171+ MailblusterService . create_or_update_lead ( @teacher )
172+ elsif @teacher . application_status_was == "validated"
173+ # If teacher was validated but status changed away, update MailBluster
174+ # to mark them as unsubscribed
175+ MailblusterService . create_or_update_lead ( @teacher )
176+ end
177+ end
178+
165179 def request_info
166180 @teacher . info_needed!
167181 if !params [ :skip_email ] . present?
@@ -173,6 +187,7 @@ def request_info
173187 def validate
174188 @teacher . validated!
175189 TeacherMailer . welcome_email ( @teacher ) . deliver_now
190+ MailblusterService . create_or_update_lead ( @teacher ) if MailblusterService . configured?
176191 redirect_to root_path
177192 end
178193
@@ -185,6 +200,9 @@ def deny
185200 end
186201
187202 def destroy
203+ if MailblusterService . configured? && @teacher . primary_email . present?
204+ MailblusterService . delete_lead ( @teacher . primary_email )
205+ end
188206 @teacher . destroy!
189207 flash [ :info ] = "Deleted #{ @teacher . full_name } successfully."
190208 redirect_to teachers_path
@@ -208,6 +226,34 @@ def import
208226 redirect_to teachers_path
209227 end
210228
229+ def sync_mailbluster
230+ unless MailblusterService . configured?
231+ redirect_to teacher_path ( @teacher ) , alert : "MailBluster API key is not configured."
232+ return
233+ end
234+
235+ result = MailblusterService . sync_teacher ( @teacher )
236+ if result [ :success ]
237+ redirect_to teacher_path ( @teacher ) , notice : "Successfully synced #{ @teacher . full_name } to MailBluster."
238+ else
239+ redirect_to teacher_path ( @teacher ) , alert : "Failed to sync #{ @teacher . full_name } to MailBluster. #{ result [ :error ] } "
240+ end
241+ end
242+
243+ def sync_all_mailbluster
244+ unless MailblusterService . configured?
245+ redirect_to teachers_path , alert : "MailBluster API key is not configured."
246+ return
247+ end
248+
249+ results = MailblusterService . sync_all_teachers
250+ flash [ :notice ] = "MailBluster sync complete: #{ results [ :synced ] } synced, #{ results [ :failed ] } failed, #{ results [ :skipped ] } skipped."
251+ if results [ :errors ] . any?
252+ flash [ :alert ] = "Errors: #{ results [ :errors ] . first ( 5 ) . join ( '; ' ) } "
253+ end
254+ redirect_to teachers_path
255+ end
256+
211257 private
212258 def load_teacher
213259 @teachers = Teacher . all
0 commit comments