Guest User

Untitled

a guest
Feb 11th, 2016
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # было
  2. class Admin::MailingSystemsController < AdminController
  3.   include ActionView::Helpers::TextHelper
  4.  
  5.   mattr_accessor :jobs_ids do
  6.     []
  7.   end
  8.  
  9.   def index
  10.     @mailing_system = MailingSystem.new
  11.   end
  12.  
  13.   def create
  14.     @user = User.find(params[:mailing_system][:user_id])
  15.     case
  16.     when @user.is_admin? || (@user.is_consultant? && @user.is_client?)
  17.       emails = []
  18.       chats = []
  19.       if params[:mailing_system][:to_clients] == '1'
  20.         to_clients(params[:mailing_system])
  21.         emails = @emails
  22.         chats = @chats
  23.       end
  24.       if params[:mailing_system][:to_consultants] == '1'
  25.         to_consultants(params[:mailing_system])
  26.         @emails = (@emails + emails).uniq if params[:mailing_system][:email] == '1'
  27.         @chats = (@chats + chats).uniq if params[:mailing_system][:chat] == '1'
  28.       end
  29.     when @user.is_consultant? && params[:mailing_system][:to_clients] == '1'
  30.       to_clients(params[:mailing_system])
  31.     when @user.is_client? && params[:mailing_system][:to_consultants] == '1'
  32.       to_consultants(params[:mailing_system])
  33.     end
  34.  
  35.     if params[:button] == 'reach'
  36.       @mailing_system = MailingSystem.new(permit_params)
  37.       render 'index'
  38.     else
  39.       send_emails_messages(@emails, params[:mailing_system]) if params[:mailing_system][:email] == '1'
  40.       send_chats_messages(@chats, params[:mailing_system]) if params[:mailing_system][:chat] == '1'
  41.       redirect_to admin_mailing_systems_path
  42.     end
  43.   end
  44.  
  45.  
  46.   private
  47.  
  48.   def send_chats_messages(chats, params)
  49.     if chats.present?
  50.       chats.map do |user|
  51.         jobs_ids << SendChatsMessages.create(to: user, from: params[:user_id],
  52.           body: simple_format(params[:message]))
  53.       end
  54.     end
  55.   end
  56.  
  57.   def send_emails_messages(emails, params)
  58.     if emails.present?
  59.       emails.map do |email|
  60.         jobs_ids << SendEmailsMessages.create(email: email, subject: params[:subject],
  61.           body: params[:message], from: params[:user_id])
  62.       end
  63.     end
  64.   end
  65.  
  66.   def to_clients(params)
  67.     search = ::Search::ClientsQuery.new.search
  68.     @users = search.with_exact_countries_ids(params[:country_id]).with_migration_approaches_ids(params[:migration_approach_id])
  69.     @emails = create_lists_emails(users) if params[:email] == '1'
  70.     @chats = create_lists_chats(users) if params[:chat] == '1'
  71.   end
  72.  
  73.   def to_consultants(params)
  74.     search = ::Search::ConsultantsQuery.new.search
  75.     @users = search.with_exact_countries_ids(params[:country_id]).with_specializations_ids(params[:migration_approach_id])
  76.     @emails = create_lists_emails(users) if params[:email] == '1'
  77.     @chats = create_lists_chats(users) if params[:chat] == '1'
  78.   end
  79.  
  80.   def create_lists_chats(users)
  81.     users.to_a.map(&:id)
  82.   end
  83.  
  84.   def create_lists_emails(users)
  85.     users.to_a.map { |user| user.email if user.email.present? }.compact
  86.   end
  87.  
  88.   def values_for_select
  89.     @users = User.all
  90.     @countries = Country.all
  91.     @migration_apps = MigrationApproach.all
  92.   end
  93.  
  94.   def permit_params
  95.     params.require(:mailing_system).permit(:email, :chat, :user_id, :to_clients,
  96.       :to_consultants, :country_id, :migration_approach_id, :subject, :message)
  97.   end
  98. end
  99.  
  100.  
  101. # заменим case на фабрику
  102.  
  103. # Тип объекта будет зависит от того, что записано в поле RoleType.
  104. # Для начала создадим модуль, где перечислим все возможные значения поля RoleType:
  105.  
  106. module UserRoleType # Значения для RoleType в таблице User
  107.   ADMIN       = 'admin'
  108.   CONSULTANT  = 'consultant'
  109.   CLIENT      = 'client'
  110. end
  111.  
  112. # Создаём Hash, который необходим для того, чтобы по значению RoleType создавать объект определенного типа:
  113.  
  114. @@types_objects = {
  115.   ADMIN      => :admin_delivery,
  116.   CONSULTANT => :consultant_delivery,
  117.   CLIENT     => :client_delivery
  118. }
  119.  
  120. # Реализуем функции, которые отвечают за укомплектование рассылки:
  121.  
  122. def admin_delivery
  123.   obj = {
  124.     :emails => self.emails,
  125.     :chats => self.chats,
  126.     :to_clients => self.to_clients((params[:mailing_system])),
  127.     :to_consultants => self.to_consultants((params[:mailing_system]))
  128.   }
  129. end
  130.  
  131.  
  132. # Теперь напишем функцию, которая будет отвечать за создание объекта необходимого типа по значению RoleType.
  133.  
  134. def complet_delivery
  135.    if @@types_objects.has_key?(self.RoleType)
  136.       send(@@types_objects[self.RoleType])
  137.    else
  138.       raise
  139.    end
  140. end
  141.  
  142. def send_delivery(obj, params)
  143.   if params[:mailing_system][:email] == '1'
  144.     send_emails_messages(obj[:emails], params[:mailing_system])
  145.   end
  146.   if params[:mailing_system][:chat] == '1'
  147.     send_chats_messages(obj[:chats], params[:mailing_system])
  148.   end
  149. end
  150.  
  151. # Теперь перепишем case
  152.  
  153. send_delivery(@from_user.complect_delivery, params)
Add Comment
Please, Sign In to add comment