kit_cms 2.3.20 → 2.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/assets/images/kit/toolbar/smile.png +0 -0
- data/app/assets/images/kit/toolbar/wink.gif +0 -0
- data/app/assets/images/kit/toolbar/wink.png +0 -0
- data/app/assets/javascripts/codemirror/editor.js +55 -17
- data/app/assets/javascripts/codemirror/jquery.js +0 -1
- data/app/assets/javascripts/codemirror/ruby.js +196 -0
- data/app/assets/javascripts/jquery.js +3036 -2838
- data/app/assets/javascripts/kit/utilities.js +655 -586
- data/app/assets/stylesheets/codemirror/style.css +1 -1
- data/app/assets/stylesheets/codemirror/theme.css +23 -3
- data/app/assets/stylesheets/kit/calendar.css +6 -1
- data/app/assets/stylesheets/kit/cms/cms.css +36 -0
- data/app/assets/stylesheets/kit/forums.css +5 -1
- data/app/assets/stylesheets/kit/kit.css +3 -1
- data/app/controllers/account_controller.rb +306 -0
- data/app/controllers/ad_controller.rb +2 -0
- data/app/controllers/admin/ad_units_controller.rb +1 -1
- data/app/controllers/admin/ad_zones_controller.rb +15 -0
- data/app/controllers/admin/ads_controller.rb +5 -0
- data/app/controllers/admin/block_controller.rb +1 -65
- data/app/controllers/admin/blocks_controller.rb +2 -0
- data/app/controllers/admin/content_controller.rb +3 -1
- data/app/controllers/admin/dashboard_controller.rb +28 -4
- data/app/controllers/admin/dj_controller.rb +45 -0
- data/app/controllers/admin/help_controller.rb +1 -1
- data/app/controllers/admin/html_asset_controller.rb +0 -12
- data/app/controllers/admin/q_controller.rb +120 -0
- data/app/controllers/admin/user_controller.rb +4 -4
- data/app/controllers/api_controller.rb +34 -0
- data/app/controllers/calendar_controller.rb +1 -1
- data/app/controllers/form_controller.rb +3 -3
- data/app/controllers/forum_controller.rb +39 -29
- data/app/controllers/kit_controller.rb +42 -15
- data/app/controllers/pages_controller.rb +25 -5
- data/app/controllers/q_controller.rb +235 -0
- data/app/controllers/repo_controller.rb +7 -0
- data/app/controllers/user_controller.rb +14 -10
- data/app/controllers/utility_controller.rb +1 -1
- data/app/helpers/account_helper.rb +47 -0
- data/app/helpers/admin/layouts_helper.rb +8 -0
- data/app/helpers/admin/page_templates_helper.rb +8 -0
- data/app/helpers/ads_helper.rb +11 -12
- data/app/helpers/calendar_helper.rb +6 -2
- data/app/helpers/form_data_helper.rb +1 -1
- data/app/helpers/form_helper.rb +8 -0
- data/app/helpers/forum_helper.rb +5 -1
- data/app/helpers/kit_helper.rb +65 -35
- data/app/helpers/kit_modules_helper.rb +4 -0
- data/app/helpers/user_helper.rb +0 -28
- data/app/jobs/page_link_job.rb +34 -0
- data/app/jobs/queue_job.rb +134 -0
- data/app/mailers/notification.rb +10 -0
- data/app/mailers/queue_mailer.rb +13 -0
- data/app/models/ad.rb +6 -6
- data/app/models/ad_unit.rb +1 -1
- data/app/models/ad_zone.rb +4 -0
- data/app/models/block.rb +1 -1
- data/app/models/delayed_job.rb +3 -0
- data/app/models/form.rb +16 -4
- data/app/models/html_asset.rb +19 -4
- data/app/models/html_asset_usage.rb +3 -0
- data/app/models/html_assetable.rb +4 -0
- data/app/models/layout.rb +36 -6
- data/app/models/newsletter.rb +1 -1
- data/app/models/page.rb +36 -2
- data/app/models/page_link.rb +5 -0
- data/app/models/page_template.rb +22 -2
- data/app/models/preference.rb +1 -1
- data/app/models/q_event.rb +12 -0
- data/app/models/q_klass.rb +5 -0
- data/app/models/q_message.rb +9 -0
- data/app/models/q_publisher.rb +35 -0
- data/app/models/q_subscription.rb +7 -0
- data/app/models/q_user.rb +29 -0
- data/app/models/q_users_method.rb +6 -0
- data/app/models/q_users_publisher.rb +6 -0
- data/app/models/user.rb +127 -19
- data/app/models/user_login.rb +4 -0
- data/app/validators/email_validator.rb +14 -0
- data/app/views/account/_edit.html.haml +40 -0
- data/app/views/account/_edit_intro.html.haml +3 -0
- data/app/views/account/_forgotten.html.haml +20 -0
- data/app/views/account/_forgotten_intro.html.haml +5 -0
- data/app/views/account/_sign_in.html.haml +31 -0
- data/app/views/account/_sign_in_intro.html.haml +4 -0
- data/app/views/account/_sign_up.html.haml +51 -0
- data/app/views/account/_sign_up_intro.html.haml +4 -0
- data/app/views/account/edit.html.haml +1 -0
- data/app/views/account/forgotten.html.haml +1 -0
- data/app/views/account/sign_in.html.haml +2 -0
- data/app/views/account/sign_up.html.haml +1 -0
- data/app/views/ad/_buy.html.haml +2 -1
- data/app/views/admin/ad_zones/_form.html.haml +1 -1
- data/app/views/admin/ad_zones/show.html.haml +2 -0
- data/app/views/admin/blocks/_form.html.haml +11 -1
- data/app/views/admin/dashboard/broken_links.html.haml +9 -0
- data/app/views/admin/dashboard/system.html.haml +11 -0
- data/app/views/admin/dj/index.html.haml +43 -0
- data/app/views/admin/form/_form.html.haml +15 -10
- data/app/views/admin/group/index.html.haml +1 -1
- data/app/views/admin/help/edit.html.haml +1 -1
- data/app/views/admin/html_asset/show.html.haml +9 -2
- data/app/views/admin/layouts/show.html.haml +10 -16
- data/app/views/admin/page_templates/_form.html.haml +9 -17
- data/app/views/admin/page_templates/show.html.haml +5 -4
- data/app/views/admin/q/events.html.haml +26 -0
- data/app/views/admin/q/index.html.haml +28 -0
- data/app/views/admin/q/klasses.html.haml +61 -0
- data/app/views/admin/q/messages.html.haml +37 -0
- data/app/views/admin/q/show.html.haml +98 -0
- data/app/views/admin/q/subscriptions.html.haml +26 -0
- data/app/views/admin/q/users.html.haml +27 -0
- data/app/views/admin/snippet/edit.html.erb +1 -1
- data/app/views/admin/snippet/new.html.erb +1 -1
- data/app/views/admin/stylesheet/show.html.haml +1 -1
- data/app/views/admin/user/index.html.erb +15 -6
- data/app/views/admin/user/view.html.erb +5 -4
- data/app/views/admin/views/_form.html.haml +3 -3
- data/app/views/calendar/_buy_tickets.html.haml +1 -1
- data/app/views/calendar/_calendar_entry.html.haml +1 -1
- data/app/views/calendar/_month.html.haml +7 -7
- data/app/views/form/_show.html.haml +1 -1
- data/app/views/forum/_add_post.html.haml +7 -8
- data/app/views/forum/_mod_thread.js.erb +46 -6
- data/app/views/forum/_post_moderation.html.haml +2 -1
- data/app/views/forum/_post_preview.html.haml +1 -9
- data/app/views/forum/_post_scripts.js.erb +29 -5
- data/app/views/forum/fetch_raw.html.haml +1 -0
- data/app/views/forum/moderate.html.haml +1 -0
- data/app/views/forum/topic_index.html.haml +4 -0
- data/app/views/notification/{event.txt.erb → event.text.erb} +0 -0
- data/app/views/notification/forgotten_password.text.erb +2 -0
- data/app/views/pages/content_edit.html.haml +1 -1
- data/app/views/pages/info.html.erb +13 -2
- data/app/views/pages/links.html.haml +63 -0
- data/app/views/user/edit_profile.html.haml +1 -1
- data/app/views/utility/_cm_editor.html.erb +13 -10
- data/app/views/utility/_cm_toolbar_markdown.html.haml +8 -1
- data/app/views/utility/_menu.html.haml +4 -0
- data/app/views/utility/mercury_html.html.haml +1 -0
- data/config/initializers/elastic_search.rb +6 -3
- data/config/initializers/extend_controller.rb +3 -0
- data/config/initializers/string.rb +9 -6
- data/config/initializers/warden.rb +49 -0
- data/config/locales/en.yml +29 -1
- data/config/routes.rb +35 -2
- data/lib/kit_cms.rb +7 -2
- data/lib/tasks/kit.rake +90 -2
- metadata +139 -27
- data/app/controllers/user/confirmations_controller.rb +0 -11
- data/app/controllers/user/passwords_controller.rb +0 -13
- data/app/controllers/user/registrations_controller.rb +0 -110
- data/app/controllers/user/sessions_controller.rb +0 -33
- data/app/controllers/user/unlocks_controller.rb +0 -13
- data/app/views/devise/_links.erb +0 -25
- data/app/views/devise/confirmations/new.html.erb +0 -12
- data/app/views/devise/mailer/confirmation_instructions.html.erb +0 -5
- data/app/views/devise/mailer/reset_password_instructions.html.erb +0 -8
- data/app/views/devise/mailer/unlock_instructions.html.erb +0 -7
- data/app/views/devise/passwords/edit.html.erb +0 -16
- data/app/views/devise/passwords/new.html.erb +0 -12
- data/app/views/devise/registrations/edit.html.erb +0 -28
- data/app/views/devise/registrations/new.html.erb +0 -18
- data/app/views/devise/sessions/new.html.erb +0 -18
- data/app/views/devise/shared/_links.erb +0 -25
- data/app/views/devise/unlocks/new.html.erb +0 -12
- data/app/views/pages/links.html.erb +0 -8
- data/app/views/user/shared/_links.erb +0 -25
- data/config/initializers/devise.rb +0 -196
- data/config/initializers/devise_extender.rb +0 -39
data/app/helpers/form_helper.rb
CHANGED
data/app/helpers/forum_helper.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
module ForumHelper
|
2
2
|
|
3
|
+
def use_markdown_editor
|
4
|
+
(sys_pref('use_markdown_editor')=='true' && !is_mobile?) ? 'true' : 'false'
|
5
|
+
end
|
6
|
+
|
3
7
|
def forum_search(search_for, page, per, topic_ids = nil)
|
4
8
|
# need to get list of topic_ids visible to this user (unless a topic_id is provided)
|
5
9
|
# then do search, similar to forum_controller search
|
@@ -12,7 +16,7 @@ module ForumHelper
|
|
12
16
|
color = 'green' if user.forum_status == -1
|
13
17
|
|
14
18
|
( "[" +
|
15
|
-
link_to(user.email, "/admin/
|
19
|
+
link_to(user.email, "/admin/user/#{user.id}") +
|
16
20
|
"] <span class='#{color}'>" +
|
17
21
|
user.display_name +
|
18
22
|
"</span> " +
|
data/app/helpers/kit_helper.rb
CHANGED
@@ -52,15 +52,11 @@ module KitHelper
|
|
52
52
|
request.fullpath.split("?")[0]
|
53
53
|
end
|
54
54
|
|
55
|
-
def kit_javascripts
|
55
|
+
def kit_javascripts
|
56
56
|
op = []
|
57
|
-
|
58
|
-
next if name.is_blank?
|
59
|
-
js = HtmlAsset.fetch(_sid, name.downcase.strip, "js")
|
57
|
+
javascripts.each do |js|
|
60
58
|
if js
|
61
|
-
op << "<script type='text/javascript' src='/kit/js/#{js.kit_name.downcase}'></script>"
|
62
|
-
else
|
63
|
-
op << "<!-- javascript missing '#{name.downcase.strip}' -->"
|
59
|
+
op << "<script type='text/javascript' src='/kit/#{js.system_id}/js/#{js.kit_name.downcase}'></script>"
|
64
60
|
end
|
65
61
|
end
|
66
62
|
op.join("\n").html_safe
|
@@ -68,19 +64,19 @@ module KitHelper
|
|
68
64
|
|
69
65
|
def javascripts
|
70
66
|
if @page
|
71
|
-
(@page.page_template.layout.javascripts +
|
67
|
+
(@page.page_template.layout.javascripts + @page.page_template.javascripts).uniq rescue []
|
72
68
|
else
|
73
69
|
js = []
|
74
70
|
layout_name = controller.layout_name_being_used rescue "application"
|
75
71
|
if layout_name.not_blank?
|
76
72
|
layout = Layout.sys(_sid).where(:name=>layout_name).first
|
77
73
|
if layout
|
78
|
-
js += layout.javascripts.
|
74
|
+
js += layout.javascripts.uniq
|
79
75
|
end
|
80
76
|
end
|
81
77
|
begin
|
82
78
|
if controller.template_being_used
|
83
|
-
js += controller.template_being_used.javascripts.
|
79
|
+
js += controller.template_being_used.javascripts.uniq
|
84
80
|
end
|
85
81
|
rescue
|
86
82
|
logger.debug "Javascripts error"
|
@@ -90,23 +86,13 @@ module KitHelper
|
|
90
86
|
end
|
91
87
|
end
|
92
88
|
|
93
|
-
def kit_stylesheets
|
89
|
+
def kit_stylesheets
|
94
90
|
op = []
|
95
|
-
|
96
|
-
s = stylesheets
|
97
|
-
rescue Exception => e
|
98
|
-
s = ['application']
|
99
|
-
logger.info "#{e.message}"
|
100
|
-
end
|
101
|
-
(additional + s).each do |name|
|
102
|
-
next if name.is_blank?
|
103
|
-
sheet = HtmlAsset.fetch(_sid, name.downcase.strip, "css")
|
91
|
+
stylesheets.each do |sheet|
|
104
92
|
if sheet
|
105
|
-
op << "<link rel='stylesheet' type='text/css' href='/kit/css/#{sheet.kit_name.downcase}'>"
|
106
|
-
else
|
107
|
-
op << "<!-- stylesheet missing '#{name.downcase.strip}' -->"
|
93
|
+
op << "<link rel='stylesheet' type='text/css' href='/kit/#{sheet.system_id}/css/#{sheet.kit_name.downcase}'>"
|
108
94
|
end
|
109
|
-
end
|
95
|
+
end
|
110
96
|
op.join("\n").html_safe
|
111
97
|
end
|
112
98
|
|
@@ -142,12 +128,23 @@ module KitHelper
|
|
142
128
|
link_to_function label, "submit_form(this)", options
|
143
129
|
end
|
144
130
|
|
145
|
-
def cm_editor(
|
146
|
-
|
147
|
-
|
148
|
-
mode = '
|
149
|
-
|
150
|
-
|
131
|
+
def cm_editor(name, options = {})
|
132
|
+
options[:mode] ||= "html"
|
133
|
+
options[:mode] = 'htmlmixed' if options[:mode] == 'html'
|
134
|
+
options[:mode] = 'css' if options[:mode] == 'sass' || options[:mode] == 'scss'
|
135
|
+
|
136
|
+
options[:id] ||= name.gsub('[','_').gsub(']','') + rand(100000000).to_s
|
137
|
+
|
138
|
+
logger.debug "*** #{name}"
|
139
|
+
if options[:value].is_blank? && name =~ /([^\[]+)\[([^\]]+)\]/
|
140
|
+
o = $1
|
141
|
+
f = $2
|
142
|
+
options[:value] = eval("@#{o}.#{f}") rescue ""
|
143
|
+
end
|
144
|
+
|
145
|
+
options[:value] ||= ''
|
146
|
+
|
147
|
+
render :partial=>'utility/cm_editor', :locals=>{:options=>options, :name=>name}
|
151
148
|
end
|
152
149
|
|
153
150
|
def hide_if(bool)
|
@@ -360,7 +357,7 @@ module KitHelper
|
|
360
357
|
end
|
361
358
|
|
362
359
|
def pref(name, system = false, default = nil)
|
363
|
-
return nil unless
|
360
|
+
return nil unless system || current_user
|
364
361
|
p = Preference.getCached(_sid, name, system ? nil : current_user.id)
|
365
362
|
return p ? p : default
|
366
363
|
end
|
@@ -465,17 +462,50 @@ module KitHelper
|
|
465
462
|
date.strftime(Preference.getCached(_sid, 'date_time_format') || '%d-%b-%y %H:%M')
|
466
463
|
end
|
467
464
|
|
468
|
-
|
469
|
-
|
470
|
-
lower = ('a'..'z').to_a
|
465
|
+
def entity_encode(s)
|
466
|
+
lower = ('a'..'z').to_a
|
471
467
|
upper = ('A'..'Z').to_a
|
472
|
-
|
468
|
+
s.split('').map { |char|
|
473
469
|
output = lower.index(char) + 97 if lower.include?(char)
|
474
470
|
output = upper.index(char) + 65 if upper.include?(char)
|
475
471
|
output ? "&##{output};" : (char == '@' ? '@' : char)
|
476
472
|
}.join
|
473
|
+
end
|
474
|
+
|
475
|
+
def obscure_email(email)
|
476
|
+
return nil if email.nil? #Don't bother if the parameter is nil.
|
477
|
+
op = []
|
478
|
+
|
479
|
+
m = rand(4)+1
|
480
|
+
for i in 0..email.length-1
|
481
|
+
if (i % m)==0
|
482
|
+
random_class = "c#{rand(1000000)}"
|
483
|
+
op << "<style type='text/css'>span.#{random_class} { display: none; }</style>"
|
484
|
+
op << "<span class='#{random_class}'>"
|
485
|
+
for x in 0..rand(5)
|
486
|
+
op << (97+rand(25)).chr
|
487
|
+
end
|
488
|
+
op << "</span>"
|
489
|
+
end
|
490
|
+
op << entity_encode(email[i])
|
491
|
+
end
|
492
|
+
|
493
|
+
op.join('').html_safe
|
477
494
|
end
|
478
495
|
|
496
|
+
def ip_info_link(ip)
|
497
|
+
link_to ip, "http://www.infobyip.com/ip-#{ip}.html"
|
498
|
+
end
|
499
|
+
|
500
|
+
def is_mobile?
|
501
|
+
if @is_mobile==nil
|
502
|
+
browser = Browser.new(:ua=>request.env['HTTP_USER_AGENT'])
|
503
|
+
@is_mobile = browser.mobile?
|
504
|
+
end
|
505
|
+
|
506
|
+
return @is_mobile
|
507
|
+
end
|
508
|
+
|
479
509
|
end
|
480
510
|
|
481
511
|
|
data/app/helpers/user_helper.rb
CHANGED
@@ -1,33 +1,5 @@
|
|
1
1
|
module UserHelper
|
2
2
|
|
3
|
-
def devise_error_messages!
|
4
|
-
flash_alerts = []
|
5
|
-
error_key = 'errors.messages.not_saved'
|
6
|
-
|
7
|
-
if !flash.empty?
|
8
|
-
flash_alerts.push(flash[:error]) if flash[:error]
|
9
|
-
flash_alerts.push(flash[:alert]) if flash[:alert]
|
10
|
-
flash_alerts.push(flash[:notice]) if flash[:notice]
|
11
|
-
error_key = 'devise.failure.invalid'
|
12
|
-
end
|
13
|
-
|
14
|
-
return "" if resource.errors.empty? && flash_alerts.empty?
|
15
|
-
errors = resource.errors.empty? ? flash_alerts : resource.errors.full_messages
|
16
|
-
|
17
|
-
messages = errors.map { |msg| content_tag(:li, msg) }.join
|
18
|
-
sentence = I18n.t(error_key, :count => errors.count,
|
19
|
-
:resource => resource.class.model_name.human.downcase)
|
20
|
-
|
21
|
-
html = <<-HTML
|
22
|
-
<div id="error_explanation">
|
23
|
-
<h2>#{sentence}</h2>
|
24
|
-
<ul>#{messages}</ul>
|
25
|
-
</div>
|
26
|
-
HTML
|
27
|
-
|
28
|
-
html.html_safe
|
29
|
-
end
|
30
|
-
|
31
3
|
def field_types
|
32
4
|
FormFieldType.sys(_sid).where(:hidden=>0).order(:name).all
|
33
5
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class PageLinkJob < Struct.new(:system_id)
|
2
|
+
|
3
|
+
def perform
|
4
|
+
last_crawl = (Time.zone.parse(Preference.get(system_id, "last_crawl")) rescue nil)
|
5
|
+
this_crawl = Time.now
|
6
|
+
Preference.set(system_id, "last_crawl", this_crawl)
|
7
|
+
Rails.logger.debug "Last crawl #{last_crawl} This Crawl #{this_crawl}"
|
8
|
+
pages = Page
|
9
|
+
pages = pages.sys(system_id) unless system_id == 0
|
10
|
+
pages = pages.where(["needs_crawl > ?", last_crawl]) if last_crawl
|
11
|
+
pages = pages.where(["needs_crawl <= ?", this_crawl])
|
12
|
+
pages.where("needs_crawl is not null").find_each do |p|
|
13
|
+
Rails.logger.debug "Crawling page #{p.id}"
|
14
|
+
p.crawl
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def error(job, e)
|
19
|
+
Preference.set(system_id, "last_crawl", nil)
|
20
|
+
notes = []
|
21
|
+
notes << "Exception Message: #{e.message}"
|
22
|
+
notes << "Stack Trace: #{e.backtrace.join("\n")}"
|
23
|
+
reference = Digest::MD5.hexdigest(Time.now.to_s)[0..8]
|
24
|
+
Event.store("PageLinkJob error", nil, 0, notes.join("\n"), reference)
|
25
|
+
Activity.add(system_id, "Page Link refresh Failed #{reference}", 0, "System", '')
|
26
|
+
Rails.logger.error "PageLinkJob error: #{reference} #{e.message}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def success(job)
|
30
|
+
Activity.add(system_id, "Page Links refreshed", 0, "System", '')
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'twitter'
|
2
|
+
|
3
|
+
class QueueJob < Struct.new(:event_id)
|
4
|
+
|
5
|
+
class Message
|
6
|
+
attr_accessor :body, :h1, :h2
|
7
|
+
end
|
8
|
+
|
9
|
+
def perform
|
10
|
+
|
11
|
+
@event = QEvent.find(event_id)
|
12
|
+
return if @event.processed_at
|
13
|
+
|
14
|
+
messages = {} # keyed on klass, i.e. the database record which shows how to generate the message body
|
15
|
+
|
16
|
+
twitter = Twitter::publisher.new(
|
17
|
+
:consumer_key => @event.q_publisher.twitter_consumer_key,
|
18
|
+
:consumer_secret => @event.q_publisher.twitter_consumer_secret,
|
19
|
+
:oauth_token => @event.q_publisher.twitter_oauth_token,
|
20
|
+
:oauth_token_secret => @event.q_publisher.twitter_oauth_token_secret
|
21
|
+
) rescue nil
|
22
|
+
|
23
|
+
ios = Grocer.pusher(
|
24
|
+
certificate: StringIO.new(@event.q_publisher.ios_certificate),
|
25
|
+
port: 2195,
|
26
|
+
retries: 3
|
27
|
+
) rescue nil
|
28
|
+
|
29
|
+
QSubscription.sys(@event.system_id).where(:q_publisher_id=>@event.q_publisher_id).where(:topic=>@event.topic).includes(:q_user).find_each do |sub|
|
30
|
+
|
31
|
+
sub.q_user.q_users_methods.each do |method|
|
32
|
+
msg = messages[method]
|
33
|
+
unless msg
|
34
|
+
klass = QKlass.sys(@event.system_id).where(:q_publisher_id=>@event.q_publisher_id).where(:name=>@event.klass).first
|
35
|
+
if klass
|
36
|
+
body = eval(klass.message_code)
|
37
|
+
h1 = eval(klass.h1_code)
|
38
|
+
h2 = eval(klass.h2_code)
|
39
|
+
else
|
40
|
+
body = @event.data
|
41
|
+
h1 = ""
|
42
|
+
h2 = ""
|
43
|
+
end
|
44
|
+
msg = Message.new
|
45
|
+
msg.body = body
|
46
|
+
msg.h1 = h1
|
47
|
+
msg.h2 = h2
|
48
|
+
messages[method] = msg
|
49
|
+
end
|
50
|
+
|
51
|
+
message = QMessage.new(:q_publisher=>@event.q_publisher, :q_event=>@event, :q_subscription=>sub, :q_user=>sub.q_user, :body=>msg.body, :h1=>msg.h1, :h2=>msg.h2, :system_id=>@event.system_id)
|
52
|
+
|
53
|
+
next unless msg.body.not_blank?
|
54
|
+
begin
|
55
|
+
if method=='twitter'
|
56
|
+
do_twitter(sub, message, msg, twitter)
|
57
|
+
elsif method=='email'
|
58
|
+
do_email(sub, message, msg)
|
59
|
+
elsif method=='ios'
|
60
|
+
do_ios(sub, message, msg, ios)
|
61
|
+
elsif method=='web'
|
62
|
+
do_web(sub, message, msg)
|
63
|
+
end
|
64
|
+
rescue Exception => e
|
65
|
+
message.status = e.message
|
66
|
+
end
|
67
|
+
message.save
|
68
|
+
end
|
69
|
+
|
70
|
+
sub.last_notification = Time.now
|
71
|
+
sub.save
|
72
|
+
end
|
73
|
+
|
74
|
+
@event.processed_at = Time.now
|
75
|
+
@event.save
|
76
|
+
end
|
77
|
+
|
78
|
+
def do_twitter(sub, message, twitter, msg)
|
79
|
+
|
80
|
+
unless twitter
|
81
|
+
message.status = 'Twitter not configured'
|
82
|
+
return
|
83
|
+
end
|
84
|
+
|
85
|
+
if sub.q_user.source==1
|
86
|
+
twitter.update(msg.body) # tweet
|
87
|
+
message.destination = "tweet"
|
88
|
+
else
|
89
|
+
return unless sub.q_user.twitter_handle.not_blank?
|
90
|
+
twitter.direct_message_create(sub.q_user.twitter_handle, msg.body) # direct message
|
91
|
+
message.destination = "@#{sub.q_user.twitter_handle}"
|
92
|
+
end
|
93
|
+
message.status = "OK"
|
94
|
+
end
|
95
|
+
|
96
|
+
def do_email(sub, message, msg)
|
97
|
+
message.destination = sub.q_user.email
|
98
|
+
QueueMailer.delay.notification(message.id, sub.q_user.email, sub.q_publisher.mail_from, msg.h1, msg.body)
|
99
|
+
message.status = "PENDING"
|
100
|
+
end
|
101
|
+
|
102
|
+
def do_ios(sub, message, msg, ios)
|
103
|
+
notification = Grocer::Notification.new(
|
104
|
+
device_token: sub.q_user.ios_device_token,
|
105
|
+
alert: msg.body,
|
106
|
+
sound: "siren.aiff",
|
107
|
+
expiry: Time.now + 60*60,
|
108
|
+
)
|
109
|
+
|
110
|
+
ios.push(notification)
|
111
|
+
message.destination = "iOS"
|
112
|
+
message.status = "OK"
|
113
|
+
end
|
114
|
+
|
115
|
+
def do_web(sub, sent, msg)
|
116
|
+
message.status = "PENDING"
|
117
|
+
# do nothing - let the web api offer up the messages
|
118
|
+
end
|
119
|
+
|
120
|
+
def error(job, e)
|
121
|
+
notes = []
|
122
|
+
notes << "Exception Message: #{e.message}"
|
123
|
+
notes << "Stack Trace: #{e.backtrace.join("\n")}"
|
124
|
+
reference = Digest::MD5.hexdigest(Time.now.to_s)[0..8]
|
125
|
+
Event.store("QueueJob error", nil, 0, notes.join("\n"), reference)
|
126
|
+
Rails.logger.error "QueueJob error: #{reference} #{e.message}"
|
127
|
+
end
|
128
|
+
|
129
|
+
def success(job)
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
|
data/app/mailers/notification.rb
CHANGED
@@ -20,6 +20,16 @@ class Notification < ActionMailer::Base
|
|
20
20
|
mail :subject=>"#{Preference.get_cached(@sid, "site_name")}: New post on thread '#{truncate(post.topic_thread.title, :length=>80, :ommission=>'...')}'", :to=>@to_user.email, :from=>isfrom(@sid)
|
21
21
|
end
|
22
22
|
|
23
|
+
def forgotten_password(to_user_id)
|
24
|
+
@user = User.find(to_user_id)
|
25
|
+
reset_url = Preference.get_cached(@user.system_id, "account_reset_url") || "/users/reset"
|
26
|
+
|
27
|
+
@reset_link = Preference.get_cached(@user.system_id, "host") + reset_url + "/" + @user.reset_password_token
|
28
|
+
mail :subject=>t("account.forgotten_password_subject"),
|
29
|
+
:to=>@user.email,
|
30
|
+
:from=>isfrom(@user.system_id)
|
31
|
+
end
|
32
|
+
|
23
33
|
def welcome_message(to, sid)
|
24
34
|
@sid = sid
|
25
35
|
mail(:from=>isfrom(sid), :to=>to.email, :subject=>"Thanks for joining")
|
@@ -0,0 +1,13 @@
|
|
1
|
+
include ActionView::Helpers::TextHelper
|
2
|
+
|
3
|
+
class QueueMailer < ActionMailer::Base
|
4
|
+
|
5
|
+
def notification(sent_id, to, from, subject, body)
|
6
|
+
qs = QSent.find(sent_id)
|
7
|
+
qs.status = "OK"
|
8
|
+
qs.save
|
9
|
+
|
10
|
+
mail(:from=>from, :to => to, :subject => subject, :body=>body)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|