wco_models 3.1.0.89 → 3.1.0.91

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/wco/utils.scss +5 -1
  3. data/app/controllers/wco/application_controller.rb +6 -0
  4. data/app/controllers/wco/leadsets_controller.rb +1 -1
  5. data/app/controllers/wco/unsubscribes_controller.rb +40 -0
  6. data/app/mailers/wco_email/application_mailer.rb +15 -27
  7. data/app/models/wco/lead.rb +10 -0
  8. data/app/models/wco/leadset.rb +4 -0
  9. data/app/models/wco_email/context.rb +26 -8
  10. data/app/models/wco_email/email_template.rb +1 -1
  11. data/app/models/wco_email/message_stub.rb +2 -3
  12. data/app/views/wco/application/tinymce.html.erb +33 -0
  13. data/app/views/wco_email/application_mailer/_footer_unsubscribe.html.erb +24 -0
  14. data/app/views/wco_email/application_mailer/_header_logo.html.erb +12 -0
  15. data/app/views/wco_email/email_layouts/_m20221201react.html.erb +1202 -0
  16. data/app/views/wco_email/email_layouts/_m20221222merryxmas.html.erb +766 -0
  17. data/app/views/wco_email/email_layouts/_m202309_feedback.html.erb +1161 -0
  18. data/app/views/wco_email/email_layouts/_m202309_ror4.html.erb +1068 -0
  19. data/app/views/wco_email/email_layouts/_marketing_node_1.html.erb +984 -0
  20. data/app/views/wco_email/email_layouts/_marketing_react_1.html +0 -0
  21. data/app/views/wco_email/email_layouts/_marketing_react_2.html.erb +749 -0
  22. data/app/views/wco_email/email_layouts/_marketing_react_3.html.erb +628 -0
  23. data/app/views/wco_email/email_layouts/_marketing_ror_1.html +751 -0
  24. data/app/views/wco_email/email_layouts/_marketing_ror_2.html.erb +755 -0
  25. data/app/views/wco_email/email_layouts/_marketing_ror_3.html.erb +25 -0
  26. data/app/views/wco_email/email_layouts/_marketing_ror_4.html.erb +25 -0
  27. data/app/views/wco_email/email_layouts/_marketing_ror_5.html.erb +17 -0
  28. data/app/views/wco_email/email_layouts/_marketing_wordpress_1.html +0 -0
  29. data/app/views/wco_email/email_layouts/_marketing_wordpress_2.html +0 -0
  30. data/app/views/wco_email/email_layouts/_piousbox_roundborders.html.erb +1007 -0
  31. data/app/views/wco_email/email_layouts/_plain.haml +18 -0
  32. data/app/views/wco_email/email_layouts/_rec_resume_shared_with_you.html.erb +39 -0
  33. data/app/views/wco_email/email_layouts/_slug-1.html.erb +0 -0
  34. data/app/views/wco_email/email_layouts/_slug-2.html.erb +0 -0
  35. data/app/views/wco_email/email_layouts/_slug-3.html.erb +0 -0
  36. data/app/views/wco_email/email_layouts/_test_tracking_footer.haml +12 -0
  37. data/app/views/wco_email/email_layouts/_wasyaco_roundborders.html.erb +686 -0
  38. data/app/views/wco_email/unsubscribes/_header.haml +4 -0
  39. data/app/views/wco_email/unsubscribes/_table.haml +22 -0
  40. data/config/routes.rb +2 -0
  41. metadata +31 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a31a3f2a942a120f14f6749392ccae5a144062995f359be3827b989f238737da
4
- data.tar.gz: fd1fb43f8997d6cfd7e4750db138a59fecc0d3afa1613a7ab93ba530ca714730
3
+ metadata.gz: c267b89943c2cb18139bdd044522d142fca56a81cadd7930b21eec7f6349d813
4
+ data.tar.gz: 42c005b73cdb2d15d3157b2d485a57166519a594383caf5a959400c18ae693cb
5
5
  SHA512:
6
- metadata.gz: 5bb910e3451c67d9703797fa050786c4895b978ae55752f281949daa245b40364dfe05d87c27b8b597baeb30bc43b8b258e54a8b41c86d0efc07744962fb45d8
7
- data.tar.gz: cae491d9f519fa1cb60c0d0fa9509d0cd9b22ae97550d6910007c3af920a8aaf8d235b14866107779627fa58790a3e7f093732cab891e66be454bcda8fbad3aa
6
+ metadata.gz: 77f0973a4e5ecddd767b045a6c77a5ba6b1dc98eacef09931fbc71413143f5966a3104fa763526f61b0f4a96029b082b025918423146e8703c434469455e74a5
7
+ data.tar.gz: 564da09016bf7490ad15c0c394d15ffb1b453f610536dc4bd9f0cafb8fa8e855f6d7a66c999c5e7f75c4347157ec3a1cbe5e99d77a6dac1809555fe89757e6e0
@@ -123,8 +123,12 @@ textarea.monospace {
123
123
  }
124
124
 
125
125
  /* H */
126
- h5.title {
126
+ .header {
127
127
  display: flex;
128
+
129
+ h5.title {
130
+ display: flex;
131
+ }
128
132
  }
129
133
 
130
134
  .h-500px {
@@ -10,6 +10,12 @@ class Wco::ApplicationController < ActionController::Base
10
10
  authorize! :home, Wco
11
11
  end
12
12
 
13
+ def tinymce
14
+ authorize! :home, Wco
15
+ render layout: false
16
+ end
17
+
18
+
13
19
  ##
14
20
  ## private
15
21
  ##
@@ -37,7 +37,7 @@ class Wco::LeadsetsController < Wco::ApplicationController
37
37
  authorize! :index, Leadset
38
38
  @leadsets = Leadset.all.includes(:leads)
39
39
  if params[:q].present?
40
- @leadsets = @leadsets.where(" company_url LIKE ? ", "%#{params[:q]}%" )
40
+ @leadsets = @leadsets.where({ company_url: /.*#{params[:q]}.*/i })
41
41
  if @leadsets.length == 1
42
42
  return redirect_to action: :show, id: @leadsets[0][:id]
43
43
  end
@@ -0,0 +1,40 @@
1
+
2
+
3
+ class Wco::UnsubscribesController < WcoEmail::ApplicationController
4
+
5
+ def create
6
+ authorize! :open_permission, Wco
7
+ @lead = Wco::Lead.find params[:lead_id]
8
+
9
+ if( !params[:token] ||
10
+ @lead.unsubscribe_token != params[:token] )
11
+ render code: 400, message: "We're sorry, but something went wrong. Please try again later."
12
+ return
13
+ end
14
+
15
+ @unsubscribe = WcoEmail::Unsubscribe.find_or_create_by({
16
+ lead_id: params[:lead_id],
17
+ template_id: params[:template_id],
18
+ campaign_id: params[:campaign_id],
19
+ })
20
+ flag = @unsubscribe.update_attributes({
21
+ unsubscribed_at: Time.now,
22
+ })
23
+ if flag
24
+ flash_notice "You have been unsubscribed."
25
+ else
26
+ flash_alert "We're sorry, but something went wrong. Please try again later."
27
+ end
28
+
29
+ render layout: false
30
+ end
31
+
32
+ def index
33
+ authorize! :index, WcoEmail::Unsubscribe
34
+ @unsubscribes = WcoEmail::Unsubscribe.all
35
+
36
+ render '_table'
37
+ end
38
+
39
+ end
40
+
@@ -44,35 +44,11 @@ class WcoEmail::ApplicationMailer < ActionMailer::Base
44
44
  mail( to: DEFAULT_RECIPIENT, subject: "Test email at #{Time.now}" )
45
45
  end
46
46
 
47
- ## 2023-04-02 _vp_ Continue.
48
- ## 2023-09-24 _vp_ Continue : )
47
+
49
48
  def send_context_email ctx_id
50
49
  @ctx = Ctx.find ctx_id
51
- @lead = Wco::Lead.find @ctx.lead_id
52
- @tmpl_config = OpenStruct.new JSON.parse( @ctx.tmpl[:config_json] )
53
-
54
- @utm_tracking_str = {
55
- 'cid' => @ctx.lead_id,
56
- 'utm_campaign' => @ctx.tmpl.slug,
57
- 'utm_medium' => 'email',
58
- 'utm_source' => @ctx.tmpl.slug,
59
- }.map { |k, v| "#{k}=#{v}" }.join("&")
60
-
61
- @unsubscribe_url = WcoEmail::Engine.routes.url_helpers.unsubscribes_url({
62
- template_id: @ctx.tmpl.id,
63
- lead_id: @lead.id,
64
- token: @lead.unsubscribe_token,
65
- host: Rails.application.routes.default_url_options[:host],
66
- })
67
- renderer = WcoEmail::ApplicationMailer.new
68
-
69
- renderer.instance_variable_set( :@ctx, @ctx )
70
- renderer.instance_variable_set( :@lead, @ctx.lead )
71
- renderer.instance_variable_set( :@utm_tracking_str, @utm_tracking_str )
72
- renderer.instance_variable_set( :@unsubscribe_url, @unsubscribe_url )
73
- renderer.instance_variable_set( :@tmpl_config, @tmpl_config )
74
-
75
- rendered_str = renderer.render_to_string("/wco_email/email_templates/_#{@ctx.tmpl.layout}")
50
+ @renderer = self.class.renderer ctx: @ctx
51
+ rendered_str = @renderer.render_to_string("/wco_email/email_layouts/_#{@ctx.tmpl.layout}")
76
52
  @ctx.update({
77
53
  rendered_str: rendered_str,
78
54
  })
@@ -86,4 +62,16 @@ class WcoEmail::ApplicationMailer < ActionMailer::Base
86
62
  content_type: "text/html" )
87
63
  end
88
64
 
65
+
66
+ def self.renderer ctx:
67
+ out = self.new
68
+ out.instance_variable_set( :@ctx, ctx )
69
+ out.instance_variable_set( :@lead, ctx.lead )
70
+ out.instance_variable_set( :@utm_tracking_str, ctx.utm_tracking_str )
71
+ out.instance_variable_set( :@unsubscribe_url, ctx.unsubscribe_url )
72
+ out.instance_variable_set( :@config, ctx.config )
73
+ out.instance_variable_set( :@renderer, out )
74
+ return out
75
+ end
76
+
89
77
  end
@@ -19,6 +19,16 @@ class Wco::Lead
19
19
  domain = email.split('@')[1]
20
20
  self.leadset ||= Wco::Leadset.find_or_create_by({ company_url: domain })
21
21
  end
22
+ before_validation :normalize_email, on: :create
23
+ def normalize_email
24
+ self[:email] = email.downcase
25
+ if email.index('+')
26
+ a = email
27
+ a.slice!( a[a.index('+')...a.index('@')] )
28
+ self[:email] = a
29
+ end
30
+ end
31
+
22
32
 
23
33
  has_one :photo, class_name: 'Wco::Photo'
24
34
 
@@ -8,6 +8,10 @@ class Wco::Leadset
8
8
  field :company_url
9
9
  validates :company_url, presence: true, uniqueness: true
10
10
  index({ company_url: 1 }, { unique: true, name: 'company_url' })
11
+ before_validation :normalize_company_url, on: :create
12
+ def normalize_company_url
13
+ company_url.downcase!
14
+ end
11
15
 
12
16
  field :email
13
17
  index({ email: 1 }, { name: 'email' })
@@ -24,6 +24,7 @@ class WcoEmail::Context
24
24
  end
25
25
 
26
26
  field :body
27
+ ## Looks good... 2024-01-17
27
28
  def body
28
29
  if self[:body].presence
29
30
  return self[:body]
@@ -91,14 +92,9 @@ class WcoEmail::Context
91
92
  attr_reader :tid
92
93
 
93
94
  def get_binding
94
- @lead = lead()
95
- @utm_tracking_str = {
96
- 'cid' => lead.id,
97
- 'utm_campaign' => tmpl.slug,
98
- 'utm_medium' => 'email',
99
- 'utm_source' => tmpl.slug,
100
- }.map { |k, v| "#{k}=#{v}" }.join("&")
101
- eval( tmpl.config_exe )
95
+ @lead = lead
96
+ @utm_tracking_str = utm_tracking_str
97
+ # eval( tmpl.config_exe ) ## @TODO: remove? 2024-01-17
102
98
  binding()
103
99
  end
104
100
 
@@ -113,6 +109,28 @@ class WcoEmail::Context
113
109
  outs.to_a
114
110
  end
115
111
 
112
+ def config
113
+ OpenStruct.new JSON.parse( tmpl[:config_json] )
114
+ end
115
+
116
+ def utm_tracking_str
117
+ {
118
+ 'cid' => lead_id,
119
+ 'utm_campaign' => tmpl.slug,
120
+ 'utm_medium' => 'email',
121
+ 'utm_source' => tmpl.slug,
122
+ }.map { |k, v| "#{k}=#{v}" }.join("&")
123
+ end
124
+
125
+ def unsubscribe_url
126
+ Wco::Engine.routes.url_helpers.unsubscribes_url({
127
+ host: Rails.application.routes.default_url_options[:host],
128
+ lead_id: lead_id,
129
+ template_id: tmpl.id,
130
+ token: lead.unsubscribe_token,
131
+ })
132
+ end
133
+
116
134
  end
117
135
  Ctx = WcoEmail::Context
118
136
 
@@ -31,7 +31,7 @@ class WcoEmail::EmailTemplate
31
31
  marketing_wordpress_2
32
32
  piousbox_roundborders
33
33
  plain
34
- tracking_footer
34
+ test_tracking_footer
35
35
  wasyaco_roundborders |
36
36
 
37
37
  field :subject
@@ -87,8 +87,8 @@ class WcoEmail::MessageStub
87
87
  ## Leadset, Lead
88
88
  from = the_mail.from ? the_mail.from[0] : "nobody@unknown-doma.in"
89
89
  domain = from.split('@')[1]
90
- leadset = Wco::Leadset.where( company_url: domain ).first
91
- leadset ||= Wco::Leadset.create( company_url: domain, email: from )
90
+ leadset = Wco::Leadset.where( company_url: domain.downcase ).first
91
+ leadset ||= Wco::Leadset.create( company_url: domain.downcase, email: from.downcase )
92
92
  lead = Wco::Lead.find_or_create_by( email: from, leadset: leadset )
93
93
 
94
94
 
@@ -152,7 +152,6 @@ class WcoEmail::MessageStub
152
152
  puts! @message.errors.full_messages.join(", "), "Could not save @message"
153
153
  end
154
154
 
155
-
156
155
  conv.leads.push lead
157
156
  conv.save
158
157
 
@@ -0,0 +1,33 @@
1
+
2
+ <html>
3
+ <head>
4
+ <!-- include libraries(jQuery, bootstrap) -->
5
+ <link href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
6
+ <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
7
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
8
+
9
+ <!-- include codemirror (codemirror.css, codemirror.js, xml.js, formatting.js) -->
10
+ <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/codemirror.css">
11
+ <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/theme/monokai.css">
12
+ <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/codemirror.js"></script>
13
+ <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/mode/xml/xml.js"></script>
14
+ <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/codemirror/2.36.0/formatting.js"></script>
15
+
16
+ <!-- include summernote css/js-->
17
+ <link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.css">
18
+ <script type="text/javascript" src="//cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.js"></script>
19
+ </head>
20
+ <body>
21
+
22
+ <textarea class='tinymce'>
23
+ </textarea>
24
+
25
+ <script>
26
+ $('.tinymce').summernote({
27
+ height: 150, //set editable area's height
28
+ codemirror: { // codemirror options
29
+ theme: 'monokai'
30
+ }
31
+ });
32
+ </script>
33
+ </body></html>
@@ -0,0 +1,24 @@
1
+ <table align="left" border="0" cellpadding="0" cellspacing="0"
2
+ style="max-width:100%; min-width:100%;" width="100%"
3
+ class="mcnTextContentContainer">
4
+ <tbody>
5
+ <tr>
6
+
7
+ <td valign="top" class="mcnTextContent"
8
+ style="padding-top:0; padding-right:160px; padding-bottom:9px; padding-left:160px;">
9
+
10
+ <em>Copyright © Wasya Co</em><br><br>
11
+
12
+ <strong>Our mailing address is:</strong><br>
13
+
14
+ 201 W 5th St 11th Floor, Austin, TX 78701<br><br>
15
+
16
+ Want to change how you receive these emails? You can
17
+ <% # link_to( 'update your preferences', obfuscate( user_dashboard_url ) ) + ' or ' %>
18
+ <%= link_to 'unsubscribe from this list', obfuscate( @unsubscribe_url ) %>.<br><br>
19
+
20
+ </td>
21
+
22
+ </tr>
23
+ </tbody>
24
+ </table>
@@ -0,0 +1,12 @@
1
+
2
+ <table cellpadding="0" cellspacing="0" width="100%">
3
+ <tr>
4
+ <td align="center">
5
+ <br />
6
+ <img
7
+ src="https://d15g8hc4183yn4.cloudfront.net/wp-content/uploads/2022/09/29185755/259x66-WasyaCo-Logo-YellowShadow.png"
8
+ alt="Wasya Co [logo]" />
9
+ </td>
10
+ </tr>
11
+ </table>
12
+ <br /><br />