kit_cms 2.3.20 → 2.3.22
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|