drg_cms 0.4.39

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.
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