SHOW:
|
|
- or go back to the newest paste.
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 | - | # Тип объекта будет зависит от того, что записано в поле role. |
103 | + | # Тип объекта будет зависит от того, что записано в поле RoleType. |
104 | - | # Для начала создадим модуль, где перечислим все возможные значения поля role: |
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) |