drg_cms 0.4.39

Sign up to get free protection for your applications and to get access to all the features.
Files changed (204) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +39 -0
  5. data/app/assets/images/drg_cms/add.png +0 -0
  6. data/app/assets/images/drg_cms/arrow_in.png +0 -0
  7. data/app/assets/images/drg_cms/arrow_out.png +0 -0
  8. data/app/assets/images/drg_cms/checkbox-checked.png +0 -0
  9. data/app/assets/images/drg_cms/checkbox-unchecked.png +0 -0
  10. data/app/assets/images/drg_cms/cols.png +0 -0
  11. data/app/assets/images/drg_cms/copy.png +0 -0
  12. data/app/assets/images/drg_cms/edit.png +0 -0
  13. data/app/assets/images/drg_cms/edit_design.png +0 -0
  14. data/app/assets/images/drg_cms/edit_page.png +0 -0
  15. data/app/assets/images/drg_cms/edit_site.png +0 -0
  16. data/app/assets/images/drg_cms/html.png +0 -0
  17. data/app/assets/images/drg_cms/pin.png +0 -0
  18. data/app/assets/images/drg_cms/printer.png +0 -0
  19. data/app/assets/images/drg_cms/reload.png +0 -0
  20. data/app/assets/images/drg_cms/search_16.png +0 -0
  21. data/app/assets/images/drg_cms/spinner.gif +0 -0
  22. data/app/assets/images/drg_cms/view_tile.png +0 -0
  23. data/app/assets/images/drg_cms/x.png +0 -0
  24. data/app/assets/javascripts/drg_cms/drg_cms.js +449 -0
  25. data/app/assets/javascripts/drg_cms/jquery-migrate.js +511 -0
  26. data/app/assets/javascripts/drg_cms/jquery.datetimepicker.js +1353 -0
  27. data/app/assets/javascripts/drg_cms/some_scripts.js +33 -0
  28. data/app/assets/javascripts/drg_cms_application.js +11 -0
  29. data/app/assets/javascripts/drg_cms_cms.js +28 -0
  30. data/app/assets/stylesheets/drg_cms/drg_cms.css +632 -0
  31. data/app/assets/stylesheets/drg_cms/jquery-ui.css +339 -0
  32. data/app/assets/stylesheets/drg_cms/jquery.datetimepicker.css +304 -0
  33. data/app/assets/stylesheets/drg_cms/th-bg.png +0 -0
  34. data/app/assets/stylesheets/drg_cms/theme.css +49 -0
  35. data/app/assets/stylesheets/drg_cms_application.css +12 -0
  36. data/app/assets/stylesheets/drg_cms_cms.css +26 -0
  37. data/app/controllers/cmsedit_controller.rb +673 -0
  38. data/app/controllers/dc_application_controller.rb +385 -0
  39. data/app/controllers/dc_at_the_beginning_controller.rb +120 -0
  40. data/app/controllers/dc_common_controller.rb +314 -0
  41. data/app/controllers/dc_mail_controller.rb +89 -0
  42. data/app/controllers/dc_main_controller.rb +40 -0
  43. data/app/controllers/drgcms_controls/dc_page_controls.rb +40 -0
  44. data/app/forms/all_options.yml +176 -0
  45. data/app/forms/cms_forms.yml +93 -0
  46. data/app/forms/cms_menu.yml +142 -0
  47. data/app/forms/dc_ad.yml +130 -0
  48. data/app/forms/dc_big_table.yml +59 -0
  49. data/app/forms/dc_big_table_locale.yml +41 -0
  50. data/app/forms/dc_big_table_value.yml +47 -0
  51. data/app/forms/dc_category.yml +57 -0
  52. data/app/forms/dc_design.yml +68 -0
  53. data/app/forms/dc_folder_permission.yml +49 -0
  54. data/app/forms/dc_forum_cat.yml +54 -0
  55. data/app/forms/dc_forum_forum.yml +53 -0
  56. data/app/forms/dc_forum_msg.yml +124 -0
  57. data/app/forms/dc_forum_privmsg.yml +125 -0
  58. data/app/forms/dc_forum_topic.yml +131 -0
  59. data/app/forms/dc_journal.yml +85 -0
  60. data/app/forms/dc_link.yml +55 -0
  61. data/app/forms/dc_mail.yml +88 -0
  62. data/app/forms/dc_mail_address.yml +56 -0
  63. data/app/forms/dc_mail_list.yml +44 -0
  64. data/app/forms/dc_mail_list_member.yml +42 -0
  65. data/app/forms/dc_menu.yml +62 -0
  66. data/app/forms/dc_menu_item.yml +81 -0
  67. data/app/forms/dc_page.yml +145 -0
  68. data/app/forms/dc_part.yml +102 -0
  69. data/app/forms/dc_permission.yml +50 -0
  70. data/app/forms/dc_piece.yml +105 -0
  71. data/app/forms/dc_policy.yml +57 -0
  72. data/app/forms/dc_policy_role.yml +42 -0
  73. data/app/forms/dc_policy_rule.yml +38 -0
  74. data/app/forms/dc_policy_rule_nocms.yml +38 -0
  75. data/app/forms/dc_poll.yml +113 -0
  76. data/app/forms/dc_poll_item.yml +76 -0
  77. data/app/forms/dc_simple_menu.yml +64 -0
  78. data/app/forms/dc_simple_menu_item.yml +80 -0
  79. data/app/forms/dc_site.yml +149 -0
  80. data/app/forms/dc_user.yml +142 -0
  81. data/app/forms/dc_user_role.yml +54 -0
  82. data/app/forms/drgcms_cms.yml +28 -0
  83. data/app/helpers/cmsedit_helper.rb +698 -0
  84. data/app/helpers/dc_ad_renderer.rb +206 -0
  85. data/app/helpers/dc_application_helper.rb +704 -0
  86. data/app/helpers/dc_big_menu_renderer.rb +180 -0
  87. data/app/helpers/dc_captcha_renderer.rb +100 -0
  88. data/app/helpers/dc_common_renderer.rb +132 -0
  89. data/app/helpers/dc_mail_renderer.rb +76 -0
  90. data/app/helpers/dc_menu_renderer.rb +143 -0
  91. data/app/helpers/dc_page_renderer.rb +80 -0
  92. data/app/helpers/dc_part_renderer.rb +162 -0
  93. data/app/helpers/dc_piece_renderer.rb +124 -0
  94. data/app/helpers/dc_poll_renderer.rb +219 -0
  95. data/app/helpers/dc_renderer.rb +56 -0
  96. data/app/helpers/dc_simple_menu_renderer.rb +244 -0
  97. data/app/helpers/drgcms_form_field.rb +863 -0
  98. data/app/models/__dc_global_data.rb +44 -0
  99. data/app/models/dc_ad.rb +52 -0
  100. data/app/models/dc_ad_stat.rb +34 -0
  101. data/app/models/dc_big_menu.rb +89 -0
  102. data/app/models/dc_big_table.rb +63 -0
  103. data/app/models/dc_big_table_locale.rb +35 -0
  104. data/app/models/dc_big_table_value.rb +38 -0
  105. data/app/models/dc_category.rb +48 -0
  106. data/app/models/dc_design.rb +48 -0
  107. data/app/models/dc_dummy.rb +30 -0
  108. data/app/models/dc_folder_permission.rb +43 -0
  109. data/app/models/dc_global_data.rb +44 -0
  110. data/app/models/dc_journal.rb +39 -0
  111. data/app/models/dc_key_value_store.rb +90 -0
  112. data/app/models/dc_link.rb +39 -0
  113. data/app/models/dc_mail.rb +64 -0
  114. data/app/models/dc_mail_address.rb +69 -0
  115. data/app/models/dc_mail_list.rb +48 -0
  116. data/app/models/dc_mail_list_member.rb +34 -0
  117. data/app/models/dc_menu.rb +59 -0
  118. data/app/models/dc_menu_item.rb +40 -0
  119. data/app/models/dc_page.rb +123 -0
  120. data/app/models/dc_part.rb +28 -0
  121. data/app/models/dc_permission.rb +58 -0
  122. data/app/models/dc_piece.rb +57 -0
  123. data/app/models/dc_policy.rb +94 -0
  124. data/app/models/dc_policy_role.rb +47 -0
  125. data/app/models/dc_policy_rule.rb +65 -0
  126. data/app/models/dc_poll.rb +46 -0
  127. data/app/models/dc_poll_item.rb +40 -0
  128. data/app/models/dc_sendmail.rb +48 -0
  129. data/app/models/dc_simple_menu.rb +58 -0
  130. data/app/models/dc_simple_menu_item.rb +39 -0
  131. data/app/models/dc_site.rb +92 -0
  132. data/app/models/dc_stat.rb +36 -0
  133. data/app/models/dc_user.rb +91 -0
  134. data/app/models/dc_user_role.rb +36 -0
  135. data/app/models/dc_visit.rb +35 -0
  136. data/app/views/cmsedit/_edit_stuff.html.erb +59 -0
  137. data/app/views/cmsedit/_edit_stuff.js.erb +6 -0
  138. data/app/views/cmsedit/_form.html.erb +21 -0
  139. data/app/views/cmsedit/_result.html.erb +20 -0
  140. data/app/views/cmsedit/edit.html.erb +6 -0
  141. data/app/views/cmsedit/error.html.erb +2 -0
  142. data/app/views/cmsedit/index.html.erb +6 -0
  143. data/app/views/cmsedit/new.html.erb +5 -0
  144. data/app/views/cmsedit/show.html.erb +21 -0
  145. data/app/views/dc_at_the_beginning/create.html.erb +9 -0
  146. data/app/views/dc_at_the_beginning/index.html.erb +19 -0
  147. data/app/views/dc_common/paste_clipboard.html.erb +17 -0
  148. data/app/views/dc_mail/subscribe.html.erb +7 -0
  149. data/app/views/dc_mail/unsubscribe.html.erb +19 -0
  150. data/app/views/layouts/cms.html.erb +17 -0
  151. data/app/views/layouts/cmsedit.html.erb +16 -0
  152. data/app/views/layouts/content.html.erb +16 -0
  153. data/config/initializers/kaminari_patch.rb +36 -0
  154. data/config/locales/datetimepicker.yml +13 -0
  155. data/config/locales/drgcms_en.yml +96 -0
  156. data/config/locales/drgcms_sl.yml +97 -0
  157. data/config/locales/en.yml +7 -0
  158. data/config/locales/kaminari.yml +26 -0
  159. data/config/locales/models_en.yml +790 -0
  160. data/config/locales/models_sl.yml +805 -0
  161. data/config/locales/mongoid_sl.yml +60 -0
  162. data/config/locales/sl.yml +211 -0
  163. data/config/routes.rb +2 -0
  164. data/drg_cms.gemspec +28 -0
  165. data/lib/drg_cms.rb +45 -0
  166. data/lib/drg_cms/engine.rb +30 -0
  167. data/lib/drg_cms/version.rb +3 -0
  168. data/lib/tasks/at_the_beginning.yml +26 -0
  169. data/lib/tasks/dc_cleanup.rake +94 -0
  170. data/lib/tasks/drg_cms_tasks.rake +118 -0
  171. data/lib/tasks/send_mail.rake +253 -0
  172. data/lib/tasks/site_statistics.rake +80 -0
  173. data/test/drg_cms_test.rb +7 -0
  174. data/test/dummy/README.rdoc +261 -0
  175. data/test/dummy/Rakefile +7 -0
  176. data/test/dummy/app/assets/javascripts/application.js +15 -0
  177. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  178. data/test/dummy/app/controllers/application_controller.rb +3 -0
  179. data/test/dummy/app/helpers/application_helper.rb +2 -0
  180. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  181. data/test/dummy/config.ru +4 -0
  182. data/test/dummy/config/application.rb +59 -0
  183. data/test/dummy/config/boot.rb +10 -0
  184. data/test/dummy/config/database.yml +25 -0
  185. data/test/dummy/config/environment.rb +5 -0
  186. data/test/dummy/config/environments/development.rb +37 -0
  187. data/test/dummy/config/environments/production.rb +67 -0
  188. data/test/dummy/config/environments/test.rb +37 -0
  189. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  190. data/test/dummy/config/initializers/inflections.rb +15 -0
  191. data/test/dummy/config/initializers/mime_types.rb +5 -0
  192. data/test/dummy/config/initializers/secret_token.rb +7 -0
  193. data/test/dummy/config/initializers/session_store.rb +8 -0
  194. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  195. data/test/dummy/config/locales/en.yml +5 -0
  196. data/test/dummy/config/routes.rb +58 -0
  197. data/test/dummy/public/404.html +26 -0
  198. data/test/dummy/public/422.html +26 -0
  199. data/test/dummy/public/500.html +25 -0
  200. data/test/dummy/public/favicon.ico +0 -0
  201. data/test/dummy/script/rails +6 -0
  202. data/test/integration/navigation_test.rb +10 -0
  203. data/test/test_helper.rb +15 -0
  204. 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