drg_cms 0.4.39
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +39 -0
- data/app/assets/images/drg_cms/add.png +0 -0
- data/app/assets/images/drg_cms/arrow_in.png +0 -0
- data/app/assets/images/drg_cms/arrow_out.png +0 -0
- data/app/assets/images/drg_cms/checkbox-checked.png +0 -0
- data/app/assets/images/drg_cms/checkbox-unchecked.png +0 -0
- data/app/assets/images/drg_cms/cols.png +0 -0
- data/app/assets/images/drg_cms/copy.png +0 -0
- data/app/assets/images/drg_cms/edit.png +0 -0
- data/app/assets/images/drg_cms/edit_design.png +0 -0
- data/app/assets/images/drg_cms/edit_page.png +0 -0
- data/app/assets/images/drg_cms/edit_site.png +0 -0
- data/app/assets/images/drg_cms/html.png +0 -0
- data/app/assets/images/drg_cms/pin.png +0 -0
- data/app/assets/images/drg_cms/printer.png +0 -0
- data/app/assets/images/drg_cms/reload.png +0 -0
- data/app/assets/images/drg_cms/search_16.png +0 -0
- data/app/assets/images/drg_cms/spinner.gif +0 -0
- data/app/assets/images/drg_cms/view_tile.png +0 -0
- data/app/assets/images/drg_cms/x.png +0 -0
- data/app/assets/javascripts/drg_cms/drg_cms.js +449 -0
- data/app/assets/javascripts/drg_cms/jquery-migrate.js +511 -0
- data/app/assets/javascripts/drg_cms/jquery.datetimepicker.js +1353 -0
- data/app/assets/javascripts/drg_cms/some_scripts.js +33 -0
- data/app/assets/javascripts/drg_cms_application.js +11 -0
- data/app/assets/javascripts/drg_cms_cms.js +28 -0
- data/app/assets/stylesheets/drg_cms/drg_cms.css +632 -0
- data/app/assets/stylesheets/drg_cms/jquery-ui.css +339 -0
- data/app/assets/stylesheets/drg_cms/jquery.datetimepicker.css +304 -0
- data/app/assets/stylesheets/drg_cms/th-bg.png +0 -0
- data/app/assets/stylesheets/drg_cms/theme.css +49 -0
- data/app/assets/stylesheets/drg_cms_application.css +12 -0
- data/app/assets/stylesheets/drg_cms_cms.css +26 -0
- data/app/controllers/cmsedit_controller.rb +673 -0
- data/app/controllers/dc_application_controller.rb +385 -0
- data/app/controllers/dc_at_the_beginning_controller.rb +120 -0
- data/app/controllers/dc_common_controller.rb +314 -0
- data/app/controllers/dc_mail_controller.rb +89 -0
- data/app/controllers/dc_main_controller.rb +40 -0
- data/app/controllers/drgcms_controls/dc_page_controls.rb +40 -0
- data/app/forms/all_options.yml +176 -0
- data/app/forms/cms_forms.yml +93 -0
- data/app/forms/cms_menu.yml +142 -0
- data/app/forms/dc_ad.yml +130 -0
- data/app/forms/dc_big_table.yml +59 -0
- data/app/forms/dc_big_table_locale.yml +41 -0
- data/app/forms/dc_big_table_value.yml +47 -0
- data/app/forms/dc_category.yml +57 -0
- data/app/forms/dc_design.yml +68 -0
- data/app/forms/dc_folder_permission.yml +49 -0
- data/app/forms/dc_forum_cat.yml +54 -0
- data/app/forms/dc_forum_forum.yml +53 -0
- data/app/forms/dc_forum_msg.yml +124 -0
- data/app/forms/dc_forum_privmsg.yml +125 -0
- data/app/forms/dc_forum_topic.yml +131 -0
- data/app/forms/dc_journal.yml +85 -0
- data/app/forms/dc_link.yml +55 -0
- data/app/forms/dc_mail.yml +88 -0
- data/app/forms/dc_mail_address.yml +56 -0
- data/app/forms/dc_mail_list.yml +44 -0
- data/app/forms/dc_mail_list_member.yml +42 -0
- data/app/forms/dc_menu.yml +62 -0
- data/app/forms/dc_menu_item.yml +81 -0
- data/app/forms/dc_page.yml +145 -0
- data/app/forms/dc_part.yml +102 -0
- data/app/forms/dc_permission.yml +50 -0
- data/app/forms/dc_piece.yml +105 -0
- data/app/forms/dc_policy.yml +57 -0
- data/app/forms/dc_policy_role.yml +42 -0
- data/app/forms/dc_policy_rule.yml +38 -0
- data/app/forms/dc_policy_rule_nocms.yml +38 -0
- data/app/forms/dc_poll.yml +113 -0
- data/app/forms/dc_poll_item.yml +76 -0
- data/app/forms/dc_simple_menu.yml +64 -0
- data/app/forms/dc_simple_menu_item.yml +80 -0
- data/app/forms/dc_site.yml +149 -0
- data/app/forms/dc_user.yml +142 -0
- data/app/forms/dc_user_role.yml +54 -0
- data/app/forms/drgcms_cms.yml +28 -0
- data/app/helpers/cmsedit_helper.rb +698 -0
- data/app/helpers/dc_ad_renderer.rb +206 -0
- data/app/helpers/dc_application_helper.rb +704 -0
- data/app/helpers/dc_big_menu_renderer.rb +180 -0
- data/app/helpers/dc_captcha_renderer.rb +100 -0
- data/app/helpers/dc_common_renderer.rb +132 -0
- data/app/helpers/dc_mail_renderer.rb +76 -0
- data/app/helpers/dc_menu_renderer.rb +143 -0
- data/app/helpers/dc_page_renderer.rb +80 -0
- data/app/helpers/dc_part_renderer.rb +162 -0
- data/app/helpers/dc_piece_renderer.rb +124 -0
- data/app/helpers/dc_poll_renderer.rb +219 -0
- data/app/helpers/dc_renderer.rb +56 -0
- data/app/helpers/dc_simple_menu_renderer.rb +244 -0
- data/app/helpers/drgcms_form_field.rb +863 -0
- data/app/models/__dc_global_data.rb +44 -0
- data/app/models/dc_ad.rb +52 -0
- data/app/models/dc_ad_stat.rb +34 -0
- data/app/models/dc_big_menu.rb +89 -0
- data/app/models/dc_big_table.rb +63 -0
- data/app/models/dc_big_table_locale.rb +35 -0
- data/app/models/dc_big_table_value.rb +38 -0
- data/app/models/dc_category.rb +48 -0
- data/app/models/dc_design.rb +48 -0
- data/app/models/dc_dummy.rb +30 -0
- data/app/models/dc_folder_permission.rb +43 -0
- data/app/models/dc_global_data.rb +44 -0
- data/app/models/dc_journal.rb +39 -0
- data/app/models/dc_key_value_store.rb +90 -0
- data/app/models/dc_link.rb +39 -0
- data/app/models/dc_mail.rb +64 -0
- data/app/models/dc_mail_address.rb +69 -0
- data/app/models/dc_mail_list.rb +48 -0
- data/app/models/dc_mail_list_member.rb +34 -0
- data/app/models/dc_menu.rb +59 -0
- data/app/models/dc_menu_item.rb +40 -0
- data/app/models/dc_page.rb +123 -0
- data/app/models/dc_part.rb +28 -0
- data/app/models/dc_permission.rb +58 -0
- data/app/models/dc_piece.rb +57 -0
- data/app/models/dc_policy.rb +94 -0
- data/app/models/dc_policy_role.rb +47 -0
- data/app/models/dc_policy_rule.rb +65 -0
- data/app/models/dc_poll.rb +46 -0
- data/app/models/dc_poll_item.rb +40 -0
- data/app/models/dc_sendmail.rb +48 -0
- data/app/models/dc_simple_menu.rb +58 -0
- data/app/models/dc_simple_menu_item.rb +39 -0
- data/app/models/dc_site.rb +92 -0
- data/app/models/dc_stat.rb +36 -0
- data/app/models/dc_user.rb +91 -0
- data/app/models/dc_user_role.rb +36 -0
- data/app/models/dc_visit.rb +35 -0
- data/app/views/cmsedit/_edit_stuff.html.erb +59 -0
- data/app/views/cmsedit/_edit_stuff.js.erb +6 -0
- data/app/views/cmsedit/_form.html.erb +21 -0
- data/app/views/cmsedit/_result.html.erb +20 -0
- data/app/views/cmsedit/edit.html.erb +6 -0
- data/app/views/cmsedit/error.html.erb +2 -0
- data/app/views/cmsedit/index.html.erb +6 -0
- data/app/views/cmsedit/new.html.erb +5 -0
- data/app/views/cmsedit/show.html.erb +21 -0
- data/app/views/dc_at_the_beginning/create.html.erb +9 -0
- data/app/views/dc_at_the_beginning/index.html.erb +19 -0
- data/app/views/dc_common/paste_clipboard.html.erb +17 -0
- data/app/views/dc_mail/subscribe.html.erb +7 -0
- data/app/views/dc_mail/unsubscribe.html.erb +19 -0
- data/app/views/layouts/cms.html.erb +17 -0
- data/app/views/layouts/cmsedit.html.erb +16 -0
- data/app/views/layouts/content.html.erb +16 -0
- data/config/initializers/kaminari_patch.rb +36 -0
- data/config/locales/datetimepicker.yml +13 -0
- data/config/locales/drgcms_en.yml +96 -0
- data/config/locales/drgcms_sl.yml +97 -0
- data/config/locales/en.yml +7 -0
- data/config/locales/kaminari.yml +26 -0
- data/config/locales/models_en.yml +790 -0
- data/config/locales/models_sl.yml +805 -0
- data/config/locales/mongoid_sl.yml +60 -0
- data/config/locales/sl.yml +211 -0
- data/config/routes.rb +2 -0
- data/drg_cms.gemspec +28 -0
- data/lib/drg_cms.rb +45 -0
- data/lib/drg_cms/engine.rb +30 -0
- data/lib/drg_cms/version.rb +3 -0
- data/lib/tasks/at_the_beginning.yml +26 -0
- data/lib/tasks/dc_cleanup.rake +94 -0
- data/lib/tasks/drg_cms_tasks.rake +118 -0
- data/lib/tasks/send_mail.rake +253 -0
- data/lib/tasks/site_statistics.rake +80 -0
- data/test/drg_cms_test.rb +7 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +58 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- metadata +375 -0
@@ -0,0 +1,118 @@
|
|
1
|
+
#########################################################################
|
2
|
+
#
|
3
|
+
#########################################################################
|
4
|
+
def ok_to_start
|
5
|
+
p ''
|
6
|
+
DcPermission.all.delete
|
7
|
+
DcPolicyRole.all.delete
|
8
|
+
DcUser.all.delete
|
9
|
+
if DcPermission.all.size > 0
|
10
|
+
p 'DcPermission (Permissions) collection is not empty!'
|
11
|
+
return false
|
12
|
+
end
|
13
|
+
if DcPolicyRole.all.size > 0
|
14
|
+
p 'DcUserRole (User roles) collection is not empty!'
|
15
|
+
return false
|
16
|
+
end
|
17
|
+
if DcUser.all.size > 0
|
18
|
+
p 'DcUser (Users) collection is not empty!'
|
19
|
+
return false
|
20
|
+
end
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
#########################################################################
|
25
|
+
#
|
26
|
+
#########################################################################
|
27
|
+
def read_input(message, default='')
|
28
|
+
print "#{message} "
|
29
|
+
response = STDIN.gets.chomp
|
30
|
+
response.blank? ? default : response
|
31
|
+
end
|
32
|
+
|
33
|
+
########################################################################
|
34
|
+
#
|
35
|
+
########################################################################
|
36
|
+
def create_superadmin
|
37
|
+
username = read_input('Enter username for superadmin role:')
|
38
|
+
return p 'Username should be at least 6 character long' unless username.size >=6
|
39
|
+
#
|
40
|
+
password1 = read_input("Enter password for #{username} user :")
|
41
|
+
return p 'Password should be at least 8 character long' unless password1.size >=8
|
42
|
+
#
|
43
|
+
password2 = read_input("Please repeat password for #{username} user :")
|
44
|
+
return p 'Passwords are not equal' unless password2 == password1
|
45
|
+
#
|
46
|
+
# New role
|
47
|
+
role = DcPolicyRole.new
|
48
|
+
role.name = 'superadmin'
|
49
|
+
role.system_name = 'superadmin'
|
50
|
+
role.save
|
51
|
+
# User
|
52
|
+
usr = DcUser.new
|
53
|
+
usr.username = username
|
54
|
+
usr.password = password1
|
55
|
+
usr.password_confirmation = password2
|
56
|
+
usr.first_name = 'superadmin'
|
57
|
+
usr.save
|
58
|
+
# user role
|
59
|
+
# r = usr.dc_user_roles.new
|
60
|
+
# r.dc_policy_role_id = role._id
|
61
|
+
# r.save
|
62
|
+
r = DcUserRole.new
|
63
|
+
r.dc_policy_role_id = role._id
|
64
|
+
usr.dc_user_roles << r
|
65
|
+
# cmsedit permission
|
66
|
+
permission = DcPermission.new
|
67
|
+
permission.table_name = 'Default permission'
|
68
|
+
permission.is_default = true
|
69
|
+
permission.save
|
70
|
+
#
|
71
|
+
r = DcPolicyRule.new
|
72
|
+
r.dc_policy_role_id = role._id
|
73
|
+
r.permission = DcPermission::SUPERADMIN
|
74
|
+
permission.dc_policy_rules << r
|
75
|
+
# create login poll
|
76
|
+
poll = DcPoll.new
|
77
|
+
poll.name = 'login'
|
78
|
+
poll.display = 'td'
|
79
|
+
poll.operation = 'link'
|
80
|
+
poll.parameters = '/dc_common/process_login'
|
81
|
+
poll.title = 'Autocreated login form'
|
82
|
+
poll.save
|
83
|
+
#
|
84
|
+
i = poll.dc_poll_items.new
|
85
|
+
i.name = 'username'
|
86
|
+
i.size = 15
|
87
|
+
i.text = 'Username'
|
88
|
+
i.type = 'text_field'
|
89
|
+
i.save
|
90
|
+
#
|
91
|
+
i = poll.dc_poll_items.new
|
92
|
+
i.name = 'password'
|
93
|
+
i.size = 15
|
94
|
+
i.text = 'Password'
|
95
|
+
i.type = 'password_field'
|
96
|
+
i.save
|
97
|
+
#
|
98
|
+
i = poll.dc_poll_items.new
|
99
|
+
i.name = 'send'
|
100
|
+
i.text = 'Login'
|
101
|
+
i.type = 'submit_tag'
|
102
|
+
i.save
|
103
|
+
#
|
104
|
+
p "Superadmin user created. Please remember login data #{username}/#{password1}"
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
#########################################################################
|
109
|
+
#
|
110
|
+
#########################################################################
|
111
|
+
namespace :drg_cms do
|
112
|
+
desc "At the beginning god created superadmin"
|
113
|
+
task :at_the_beginning => :environment do
|
114
|
+
if ok_to_start
|
115
|
+
create_superadmin
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,253 @@
|
|
1
|
+
#coding: utf-8
|
2
|
+
require 'net/smtp'
|
3
|
+
Rake.application.options.trace = true
|
4
|
+
|
5
|
+
##############################################################################
|
6
|
+
# Add style to message body.
|
7
|
+
##############################################################################
|
8
|
+
def get_body(doc)
|
9
|
+
style =<<EOT
|
10
|
+
<style>
|
11
|
+
body {font-family: sans-serif;font-size:12px;}
|
12
|
+
</style>
|
13
|
+
EOT
|
14
|
+
"#{style}#{doc.body}"
|
15
|
+
end
|
16
|
+
|
17
|
+
###########################################################################
|
18
|
+
# Actually sends mail to mail server
|
19
|
+
###########################################################################
|
20
|
+
def smtp_send(mail)
|
21
|
+
smtp = Net::SMTP.start( ActionMailer::Base.smtp_settings[:address] )
|
22
|
+
begin
|
23
|
+
smtp.send_message mail.to_s, 'pmaster@ozs.si', mail.to
|
24
|
+
$mail_sent << mail.to
|
25
|
+
rescue Exception => exc
|
26
|
+
p "#{mail.to} : #{exc.message}"
|
27
|
+
$mail_errors << "#{mail.to} : #{exc.message}\n"
|
28
|
+
ensure
|
29
|
+
smtp.finish
|
30
|
+
end
|
31
|
+
sleep 0.4
|
32
|
+
end
|
33
|
+
=begin
|
34
|
+
##############################################################################
|
35
|
+
# Include pictures as inline attachments and update coresponding links in the message.
|
36
|
+
##############################################################################
|
37
|
+
def update_attachments(doc)
|
38
|
+
offset = 0
|
39
|
+
# find img tags
|
40
|
+
while i1 = doc.body.index('<img', offset)
|
41
|
+
i2 = doc.body.index('/>', i1) + 1
|
42
|
+
# find src tag
|
43
|
+
s1 = doc.body.index('src="', i1) + 6
|
44
|
+
s2 = doc.body.index('"', s1) - 1
|
45
|
+
filename = doc.body[s1..s2]
|
46
|
+
cid = File.basename(filename)
|
47
|
+
# read file into inline attachments and replace link with new link
|
48
|
+
attachments.inline[cid] = File.read( Rails.root.join('public', filename) )
|
49
|
+
doc.body[(s1-1)..s2] = "cid:#{cid}"
|
50
|
+
#
|
51
|
+
offset = i1 + 10 # just in case ..
|
52
|
+
# replace style with pure html height= and width= because inline style doesn't work in mailers. At least not in outlook.
|
53
|
+
s1 = doc.body.index('style="', i1) + 7
|
54
|
+
next if s1.nil? or s1 > i2 # style might not be present
|
55
|
+
s2 = doc.body.index('"', s1) - 1
|
56
|
+
style = doc.body[s1..s2]
|
57
|
+
h_w = ''
|
58
|
+
style.split(';').each do |hw|
|
59
|
+
a = hw.split(':')
|
60
|
+
h_w << "#{a.first}='#{a.last.strip.gsub('px','')}' "
|
61
|
+
end
|
62
|
+
doc.body[(s1-7)..s2] = h_w
|
63
|
+
end
|
64
|
+
end
|
65
|
+
=end
|
66
|
+
##############################################################################
|
67
|
+
# Include pictures as inline attachments and update coresponding links in the message.
|
68
|
+
##############################################################################
|
69
|
+
def update_attachments(docbody, mail)
|
70
|
+
offset, n = 0, 0
|
71
|
+
# find img tags
|
72
|
+
while i1 = docbody.index('<img', offset)
|
73
|
+
i2 = docbody.index('/>', i1) + 1
|
74
|
+
# find src tag
|
75
|
+
s1 = docbody.index('src="', i1) + 6
|
76
|
+
s2 = docbody.index('"', s1) - 1
|
77
|
+
filename = docbody[s1..s2]
|
78
|
+
cid = File.basename(filename)
|
79
|
+
# read file into inline attachments and replace link with new link
|
80
|
+
mail.attachments[cid] = File.read( Rails.root.join('public', filename) )
|
81
|
+
mail.parts[n].content_id = cid
|
82
|
+
mail.parts[n].content_disposition = "inline; filename=#{cid}"
|
83
|
+
|
84
|
+
# attachments.inline[cid] = File.read( Rails.root.join('public', filename) )
|
85
|
+
docbody[(s1-1)..s2] = "cid:#{cid}"
|
86
|
+
n += 1
|
87
|
+
#
|
88
|
+
offset = i1 + 10 # just in case ..
|
89
|
+
# replace style with pure html height= and width= because inline style doesn't work in mailers. At least not in outlook.
|
90
|
+
s1 = docbody.index('style="', i1) + 7
|
91
|
+
next if s1.nil? or s1 > i2 # style might not be present
|
92
|
+
s2 = docbody.index('"', s1) - 1
|
93
|
+
style = docbody[s1..s2]
|
94
|
+
h_w = ''
|
95
|
+
style.split(';').each do |hw|
|
96
|
+
a = hw.split(':')
|
97
|
+
h_w << "#{a.first}='#{a.last.strip.gsub('px','')}' "
|
98
|
+
end
|
99
|
+
docbody[(s1-7)..s2] = h_w
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
##############################################################################
|
104
|
+
# Send document to test e-mail address
|
105
|
+
##############################################################################
|
106
|
+
def send_test(doc)
|
107
|
+
mail = Mail.new
|
108
|
+
mail.to = doc.to_test
|
109
|
+
mail.subject = doc.subject
|
110
|
+
mail.from = doc.from
|
111
|
+
update_attachments(doc, mail)
|
112
|
+
#
|
113
|
+
body = (doc.css.to_s.size > 5 ? "<style type=\"text/css\">#{doc.css}</style>" : '') + doc.body
|
114
|
+
html = Mail::Part.new do
|
115
|
+
content_type 'text/html; charset=UTF8'
|
116
|
+
body body
|
117
|
+
end
|
118
|
+
mail.html_part = html
|
119
|
+
smtp_send(mail)
|
120
|
+
end
|
121
|
+
|
122
|
+
##############################################################################
|
123
|
+
# Returns array of addresses mail will be send to.
|
124
|
+
##############################################################################
|
125
|
+
def get_adresses(doc)
|
126
|
+
a = []
|
127
|
+
# direct specified addresses
|
128
|
+
if doc.to_address.size > 5
|
129
|
+
doc.to_address.split("\n").each do |line|
|
130
|
+
doc.to_address.split(/,|;| /).each { |address| a << [address.strip.downcase] }
|
131
|
+
end
|
132
|
+
end
|
133
|
+
# maling lists
|
134
|
+
doc.to_list.each do |id|
|
135
|
+
list = DcMailList.find(id)
|
136
|
+
DcMailAddress.where('dc_mail_list_members.dc_mail_list_id' => id, active: true).each do |addr|
|
137
|
+
address = ''
|
138
|
+
if addr.email.to_s.size > 5
|
139
|
+
address = addr.email
|
140
|
+
elsif addr.dc_user_id
|
141
|
+
address = DcUser.find(addr.dc_user_id).email.to_s
|
142
|
+
end
|
143
|
+
a << [address.strip.downcase, addr.id] if address.size > 1
|
144
|
+
end
|
145
|
+
end
|
146
|
+
# return only unique addresses
|
147
|
+
a.uniq { |s| s.first }
|
148
|
+
end
|
149
|
+
|
150
|
+
##############################################################################
|
151
|
+
# Send document to defined recipients
|
152
|
+
##############################################################################
|
153
|
+
def sending(doc)
|
154
|
+
addresses = get_adresses(doc)
|
155
|
+
|
156
|
+
# Write list of all addresses to file. Very useful when something gets wrong
|
157
|
+
File.open(Rails.root.join('log/sendmail.list'),'w') {|f| f.write(addresses.join("\n")) }
|
158
|
+
addresses.each do |a|
|
159
|
+
mail = Mail.new
|
160
|
+
mail.subject = doc.subject
|
161
|
+
mail.from = doc.from
|
162
|
+
docbody = doc.body.dup
|
163
|
+
update_attachments(docbody, mail)
|
164
|
+
url = "<a href=\"http://#{doc.dc_site.name}/dc_mail/unsubscribe?id_list=#{a.last}\">#{I18n.t('drgcms.dc_mail.unsubscription')}</a>"
|
165
|
+
#
|
166
|
+
body = (doc.css.to_s.size > 5 ? "<style type=\"text/css\">#{doc.css}</style>" : '')
|
167
|
+
body << docbody.sub('%{unsubscription}', url)
|
168
|
+
part = Mail::Part.new do
|
169
|
+
content_type 'text/html; charset=UTF8'
|
170
|
+
body body
|
171
|
+
end
|
172
|
+
mail.html_part = part
|
173
|
+
mail.to = a.first
|
174
|
+
smtp_send(mail)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
##############################################################################
|
179
|
+
# Send document to test e-mail address
|
180
|
+
##############################################################################
|
181
|
+
def send_report(doc, text, status = :ok)
|
182
|
+
mail = Mail.new
|
183
|
+
mail.to = doc.from
|
184
|
+
mail.subject = "#{(status == :ok ? '' : I18n.t('drgcms.error'))}#{I18n.t('drgcms.dc_mail.report')}: #{doc.subject}"
|
185
|
+
mail.from = 'SENDMAIL REPORT'
|
186
|
+
html = Mail::Part.new do
|
187
|
+
content_type 'text/html; charset=UTF8'
|
188
|
+
body text.gsub("\n",'<br>')
|
189
|
+
end
|
190
|
+
smtp_send(mail)
|
191
|
+
end
|
192
|
+
|
193
|
+
namespace :drg_cms do
|
194
|
+
namespace :sendmail do
|
195
|
+
###########################################################################
|
196
|
+
# sendmail:test
|
197
|
+
###########################################################################
|
198
|
+
desc 'Sends mail to test recipient!'
|
199
|
+
|
200
|
+
task :test => :environment do
|
201
|
+
begin
|
202
|
+
id = ENV["MAIL_ID"] || '517a7eb27246cd2958000104'
|
203
|
+
doc = DcMail.find(id)
|
204
|
+
send_test(doc)
|
205
|
+
rescue Exception => exc
|
206
|
+
stack = "\n#{Time.now.strftime('%d.%m.%Y %H:%M')}:#{exc.to_s} + \n"
|
207
|
+
exc.backtrace.each {|c| stack << "#{c}\n" }
|
208
|
+
p stack.to_yaml
|
209
|
+
File.open(Rails.root.join('log/error.log'),'a+') {|f| f.write(stack) }
|
210
|
+
send_report(doc)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
###########################################################################
|
215
|
+
# sendmail:send
|
216
|
+
###########################################################################
|
217
|
+
desc 'Sends mail to all recipients!'
|
218
|
+
|
219
|
+
task :sending => :environment do
|
220
|
+
$mail_errors, $mail_sent = [], []
|
221
|
+
ok = false
|
222
|
+
begin
|
223
|
+
id = ENV["MAIL_ID"] || '517a7eb27246cd2958000104'
|
224
|
+
doc = DcMail.find(id)
|
225
|
+
if doc.status == 1 # status must be ready
|
226
|
+
doc.status = 2; doc.save
|
227
|
+
sending(doc)
|
228
|
+
else
|
229
|
+
send_report(doc, I18n.t('drgcms.dc_mail.message_status_error'), :error )
|
230
|
+
end
|
231
|
+
ok = true
|
232
|
+
rescue Exception => exc
|
233
|
+
stack = "ERROR! rake drgcms:sendmail:send\n\n#{Time.now.strftime('%d.%m.%Y %H:%M')}:#{exc.to_s} \n"
|
234
|
+
exc.backtrace.each {|c| stack << "#{c}\n\n" }
|
235
|
+
stack << "Last OK mail sent:#{$mail_sent.last}\n"
|
236
|
+
p stack.to_yaml
|
237
|
+
File.open(Rails.root.join('log/error.log'),'a+') {|f| f.write(stack) }
|
238
|
+
send_report(doc, stack, :error )
|
239
|
+
doc.status = 3; doc.save
|
240
|
+
end
|
241
|
+
# Send report if OK
|
242
|
+
if ok
|
243
|
+
msg = I18n.t('drgcms.dc_mail.message_sent_to', :number => $mail_sent.size) + "\n\n"
|
244
|
+
msg << I18n.t('drgcms.dc_mail.message_errors', :number => $mail_errors.size) + "\n"
|
245
|
+
msg << $mail_errors.join("\n")
|
246
|
+
doc.status = 10; doc.save
|
247
|
+
send_report(doc, msg)
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
@@ -0,0 +1,80 @@
|
|
1
|
+
|
2
|
+
#########################################################################
|
3
|
+
#
|
4
|
+
#########################################################################
|
5
|
+
def read_input(message, default='')
|
6
|
+
print "#{message} "
|
7
|
+
response = STDIN.gets.chomp
|
8
|
+
response.blank? ? default : response
|
9
|
+
end
|
10
|
+
|
11
|
+
########################################################################
|
12
|
+
#
|
13
|
+
########################################################################
|
14
|
+
def create_statistics
|
15
|
+
site = read_input('Enter site name: ')
|
16
|
+
@site = DcSite.find_by(name: site)
|
17
|
+
return unless @site
|
18
|
+
date_from = read_input("Enter from date (yyyymmdd): ")
|
19
|
+
return unless date_from.size == 8
|
20
|
+
date_to = read_input("Enter to (yyyymmdd): ")
|
21
|
+
return unless date_to.size == 8
|
22
|
+
#
|
23
|
+
@date_from = Time.local(date_from[0,4].to_i, date_from[4,2].to_i, date_from[6,2].to_i).beginning_of_day
|
24
|
+
@date_to = Time.local(date_to[0,4].to_i, date_to[4,2].to_i, date_to[6,2].to_i).end_of_day
|
25
|
+
#
|
26
|
+
=begin
|
27
|
+
map =
|
28
|
+
%Q{
|
29
|
+
function() {
|
30
|
+
day_session = Date.UTC(this.time.getFullYear(), this.time.getMonth(), this.time.getDate()) + this.session_id;
|
31
|
+
day_session = this.time.getFullYear().toString() + this.time.getMonth().toString() + this.time.getDate().toString() + '_' + this.session_id;
|
32
|
+
emit({day_session: day_session}, {count: 1});
|
33
|
+
}
|
34
|
+
}
|
35
|
+
reduce =
|
36
|
+
%Q{
|
37
|
+
function(key, values) {
|
38
|
+
var count = 0;
|
39
|
+
values.forEach(function(v) {
|
40
|
+
count += v['count'];
|
41
|
+
});
|
42
|
+
}
|
43
|
+
}
|
44
|
+
visits = DcVisit.only(:session_id, :time).where(:time.gt => @date_from, :time.lt => @date_to).map_reduce(map, reduce).out(inline: 1).to_a
|
45
|
+
visits.each do |stat|
|
46
|
+
p stat
|
47
|
+
end
|
48
|
+
=end
|
49
|
+
totals = {}
|
50
|
+
visits = DcVisit.only(:session_id, :time).where(:time.gt => @date_from, :time.lt => @date_to).order_by('time asc')
|
51
|
+
visits.each do |visit|
|
52
|
+
key = visit.time.strftime('%Y%m%d') + '_' + visit.session_id
|
53
|
+
totals[key] ||= 0
|
54
|
+
totals[key] += 1
|
55
|
+
end
|
56
|
+
output,old_date,unique,count = '','',0,0
|
57
|
+
totals.to_a.sort! {|x,y| x <=> y}.each do |e|
|
58
|
+
if e.first[0,8] != old_date
|
59
|
+
output << "#{old_date}\t#{unique}\t#{count}\n" unless old_date == ''
|
60
|
+
old_date,unique,count = e.first[0,8], 0, 0
|
61
|
+
end
|
62
|
+
unique += 1
|
63
|
+
count += e.last
|
64
|
+
end
|
65
|
+
output << "#{old_date}\t#{unique}\t#{count}\n"
|
66
|
+
filename = Rails.root.join('tmp/','statistics.txt')
|
67
|
+
File.open(filename,'w') {|f| f.write(output) }
|
68
|
+
p "Statistics saved to #{filename}."
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
#########################################################################
|
73
|
+
#
|
74
|
+
#########################################################################
|
75
|
+
namespace :drg_cms do
|
76
|
+
desc "Quick site statistics according to dc_visits collection."
|
77
|
+
task :site_statistics => :environment do
|
78
|
+
create_statistics
|
79
|
+
end
|
80
|
+
end
|