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,314 @@
1
+ #coding: utf-8
2
+ #--
3
+ # Copyright (c) 2012-2013 Damjan Rems
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ #++
24
+
25
+ class DcCommonController < DcApplicationController
26
+ layout false
27
+
28
+ ########################################################################
29
+ # Autocomplete request, for search fiels
30
+ ########################################################################
31
+ def autocomplete
32
+ # return '' unless session[:edit_mode] > 0 #
33
+ return render text: t('drgcms.not_authorized') unless dc_user_can(DcPermission::CAN_VIEW)
34
+ # TODO Double check if previous line works as it should.
35
+ table = params['table'].classify.constantize
36
+ id = [params['id']] || '_id'
37
+ # call method in class if search parameter has . This is for user defined sofisticated searches
38
+ # result must be returned as array of [id, search_field_value]
39
+ a = if params['search'].match(/\./)
40
+ name, method = params['search'].split('.')
41
+ table.send(method, params['input']).inject([]) do |r,v|
42
+ r << { label: v[1], value: v[1], id: v[0].to_s }
43
+ end
44
+ # simply search which will search and return field_name defined in params['search']
45
+ else
46
+ table.where(params['search'] => /#{params['input']}/i).limit(20).inject([]) do |r,v|
47
+ r << { label: v[params['search']], value: v[params['search']], id: v.id.to_s }
48
+ end
49
+ end
50
+ render inline: a.to_json, formats: 'js'
51
+ end
52
+
53
+ ########################################################################
54
+ # Register and save click on ad link
55
+ ########################################################################
56
+ def ad_click
57
+ if (ad = DcAd.find(params[:id]))
58
+ ad.clicked += 1
59
+ ad.save
60
+ DcAdStat.create!(dc_ad_id: params[:id], ip: request.ip, type: 2 ) #.save
61
+ else
62
+ logger.error "ERROR ADS: Invalid ad id=#{params[:id]} ip=#{request.ip}."
63
+ end
64
+
65
+ render :nothing => true
66
+ end
67
+
68
+ ##########################################################################
69
+ # Toggle cmd edit mode
70
+ ##########################################################################
71
+ def toggle_edit_mode
72
+ session[:edit_mode] ||= 0
73
+ # called directly without authorization
74
+ if session[:edit_mode] < 1
75
+ dc_render_404 #(:file => "#{Rails.root}/public/404", :status => 404, :layout => false, :formats => [:html])
76
+ else
77
+ session[:edit_mode] = (session[:edit_mode] == 1) ? 2 : 1
78
+ redirect_to params[:return_to]
79
+ end
80
+ end
81
+
82
+ ####################################################################
83
+ # Process login action
84
+ ####################################################################
85
+ def process_login
86
+ # Something is really wrong
87
+ return dc_render_404 unless ( params[:record] and params[:record][:username] and params[:record][:password] )
88
+
89
+ user = DcUser.find_by(username: params[:record][:username])
90
+ if user and user.authenticate(params[:record][:password])
91
+ fill_login_data(user, params[:record][:remember_me].to_i == 1)
92
+ else
93
+ flash[:error] = t('drgcms.invalid_username')
94
+ params[:return_to] = params[:return_to_error] # return_to error
95
+ end
96
+ redirect_to params[:return_to] || '/'
97
+ end
98
+
99
+ ####################################################################
100
+ # Process logout action
101
+ ####################################################################
102
+ def logout
103
+ clear_login_data
104
+ redirect_to params[:return_to] || '/'
105
+ end
106
+
107
+ ####################################################################
108
+ # Alternative login. If remember_me cookie is found it tries to automatically logs
109
+ ####################################################################
110
+ def login
111
+ if cookies.signed[:remember_me]
112
+ user = DcUser.find(cookies.signed[:remember_me])
113
+ if user
114
+ fill_login_data(user, true)
115
+ return redirect_to params[:return_to]
116
+
117
+ else
118
+ clear_login_data # on the safe side
119
+ end
120
+ end
121
+ # Display login
122
+ # redirect_to controller: 'poll', poll_id: 'login', return_to: params[:return_to]
123
+ # redirect_to( {host: 'poll', poll_id: 'login', return_to: params[:return_to]} )
124
+ route = params[:route] || 'poll'
125
+ redirect_to "/#{route}?poll_id=login&return_to=#{params[:return_to]}"
126
+ end
127
+
128
+ ####################################################################
129
+ # Processes restore from journal action
130
+ ####################################################################
131
+ def restore_from_journal
132
+ # selected fields to hash
133
+ restore = params[:select].inject({}) {|r,v| r[v.first] = 0 if v.last == '1'; r}
134
+ result = if restore.size == 0
135
+ { 'msg_error' => (t ('drgcms.dc_journal.zero_selected')) }
136
+ else
137
+ j = DcJournal.find(params[:id])
138
+ # update hash with data to be restored
139
+ JSON.parse(j.diff).each {|k,v| restore[k] = v.first if restore[k] }
140
+ # determine tables and record ids
141
+ tables = j.tables.split(';')
142
+ ids = (j.ids.blank? ? [] : j.ids.split(';') ) << j.doc_id
143
+ # find record
144
+ doc = nil
145
+ tables.each_index do |i|
146
+ doc = if doc.nil?
147
+ (tables[i].classify.constantize).find(ids[i])
148
+ else
149
+ doc.send(tables[i].pluralize).find(ids[i])
150
+ end
151
+ end
152
+ # restore values
153
+ restore.each do |k,v|
154
+ doc.send("#{k}=",v)
155
+ end
156
+ # save record
157
+ doc.save
158
+ # TODO Error checking
159
+ { 'msg_info' => (t ('drgcms.dc_journal.restored')) }
160
+ end
161
+ render inline: result.to_json, formats: 'js'
162
+ end
163
+
164
+ ########################################################################
165
+ # Update some anomalies in json
166
+ ########################################################################
167
+ def update_json(json, is_update=false)
168
+ result = {}
169
+ json.each do |k,v|
170
+ if v.class == Hash
171
+ result[k] = v['$oid'] if is_update
172
+ elsif v.class == Array
173
+ result[k] = []
174
+ v.each {|e| result[k] << update_json(e, is_update)}
175
+ else
176
+ result[k] = v
177
+ end
178
+ end
179
+ result
180
+ end
181
+
182
+ ########################################################################
183
+ # Copy current record to clipboard as json text. It will actually ouput an
184
+ # window with data formatted as json.
185
+ ########################################################################
186
+ def copy_clipboard
187
+ # Only administrators can perform this operation
188
+ return render(text: t('drgcms.not_authorized') ) unless dc_user_has_role('admin')
189
+ #
190
+ respond_to do |format|
191
+ # just open new window to same url and come back with html request
192
+ format.json { dc_render_ajax(operation: 'window', url: request.url ) }
193
+
194
+ format.html do
195
+ doc = dc_find_document(params[:table], params[:id], params[:ids])
196
+ text = "<br><br>[#{params[:table]},#{params[:id]},#{params[:ids]}]<br>"
197
+ render text: text + doc.as_document.to_json
198
+ end
199
+
200
+ end
201
+ end
202
+
203
+ ########################################################################
204
+ # Paste data from clipboard into text_area and update documents in destination database.
205
+ ########################################################################
206
+ def paste_clipboard
207
+ # Only administrators can perform this operation
208
+ return render(text: t('drgcms.not_authorized') ) unless dc_user_has_role('admin')
209
+
210
+ result = ''
211
+ respond_to do |format|
212
+ # just open new window to same url and come back with html request
213
+ format.html { return render('paste_clipboard', layout: 'cms') }
214
+ format.json {
215
+ table, id, ids = nil
216
+ params[:data].split("\n").each do |line|
217
+ line.chomp!
218
+ next if line.size < 5 # empty line. Skip
219
+ begin
220
+ if line[0] == '[' # id(s)
221
+ result << "<br>#{line}"
222
+ line = line[/\[(.*?)\]/, 1] # just what is between []
223
+ table, id, ids = line.split(',')
224
+ elsif line[0] == '{' # document data
225
+ result << process_document(line, table, id, ids)
226
+ end
227
+ rescue Exception => e
228
+ result << " Runtime error. #{e.message}\n"
229
+ break
230
+ end
231
+ end
232
+ }
233
+ end
234
+ dc_render_ajax(operation: :div, div: 'result', value: result )
235
+ end
236
+
237
+ protected
238
+
239
+ ########################################################################
240
+ # Processes one document. Subroutine of paste_clipboard.
241
+ ########################################################################
242
+ def process_document(line, table, id, ids)
243
+ if params[:do_update] == '1'
244
+ doc = dc_find_document(table, id, ids)
245
+ # document found. Update it and return
246
+ if doc
247
+ doc.update( update_json(ActiveSupport::JSON.decode(line), true) )
248
+ msg = dc_check_model(doc)
249
+ return (msg ? " ERROR! #{msg}" : " UPDATE. OK.")
250
+ end
251
+ end
252
+ # document will be added to collection
253
+ if ids.to_s.size > 5
254
+ #TODO Add embedded document
255
+ " NOT SUPPORTED YET!"
256
+ else
257
+ doc = table.classify.constantize.new( update_json(ActiveSupport::JSON.decode(line)) )
258
+ doc.save
259
+ end
260
+ msg = dc_check_model(doc)
261
+ msg ? " ERROR! #{msg}" : " NEW. OK."
262
+ end
263
+
264
+ ####################################################################
265
+ # Clears all session data related to login
266
+ ####################################################################
267
+ def clear_login_data
268
+ session[:edit_mode] = 0
269
+ session[:user_id] = nil
270
+ session[:user_name] = nil
271
+ session[:user_roles] = nil
272
+ cookies.delete :remember_me
273
+ end
274
+
275
+ ####################################################################
276
+ # Fills session with data related to succesfull login.
277
+ ####################################################################
278
+ def fill_login_data(user, remember_me)
279
+ session[:user_id] = user.id
280
+ session[:user_name] = user.name
281
+ session[:edit_mode] = 0
282
+ session[:user_roles] = nil
283
+ # special for SUPERADMIN
284
+ sa = DcPolicyRole.find_by(system_name: 'superadmin')
285
+ if sa and (role = user.dc_user_roles.find_by(dc_policy_role_id: sa.id))
286
+ session[:user_roles] = []
287
+ session[:user_roles] << role.dc_policy_role_id
288
+ session[:edit_mode] = 2
289
+ return
290
+ end
291
+ # read default policy from site
292
+ default_policy = dc_get_site().dc_policies.find_by(is_default: true)
293
+ # load user roles
294
+ user.dc_user_roles.each do |role|
295
+ next unless role.active
296
+ next if role.valid_from and role.valid_from > Time.now.end_of_day.to_date
297
+ next if role.valid_to and role.valid_to < Time.now.to_date
298
+ # check if role is active in this site
299
+ policy_role = default_policy.dc_policy_rules.find_by(dc_policy_role_id: role.dc_policy_role_id)
300
+ next unless policy_role
301
+
302
+ # set edit_mode
303
+ # session[:edit_mode] = 1 if policy_role.has_cms_menu
304
+ session[:edit_mode] = 1 if policy_role.permission > 1
305
+ session[:user_roles] ||= [] #
306
+ session[:user_roles] << role.dc_policy_role_id
307
+ end
308
+ # Save remember me cookie if not CMS user and remember me is selected
309
+ if session[:edit_mode] == 0 and remember_me
310
+ cookies.signed[:remember_me] = { :value => user.id, :expires => 180.days.from_now}
311
+ end
312
+ end
313
+
314
+ end
@@ -0,0 +1,89 @@
1
+ #--
2
+ # Copyright (c) 2012+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ # params[:msg_error] = 'Test mail send!'
25
+ # params[:record_from] = 'en@mail.com'
26
+ # params['.div_dc-title'] = 'Nov naslov'
27
+ # params['#div_dc-title'] = 'Nov naslov'
28
+ # params['url_'] = 'http://www.ozs.si'
29
+
30
+ class DcMailController < DcApplicationController
31
+
32
+ ########################################################################
33
+ # Sends test mail to test recipient
34
+ ########################################################################
35
+ def send_test_mail
36
+ # Only if loged on
37
+ if dc_edit_mode?
38
+ call_rake 'drg_cms:sendmail:test', 'MAIL_ID' => params[:id]
39
+ result = { msg_info: t('drgcms.dc_mail.test_mail_sent') }
40
+ render json: result.to_json
41
+ else
42
+ render nothing: true
43
+ end
44
+ end
45
+
46
+ ########################################################################
47
+ # Starts sending mail
48
+ ########################################################################
49
+ def send_mail
50
+ # Only if loged on
51
+ if dc_edit_mode?
52
+ doc = DcMail.find(params[:id])
53
+ if doc.status == 1
54
+ call_rake 'drg_cms:sendmail:sending', 'MAIL_ID' => params[:id]
55
+ result = { msg_info: t('drgcms.dc_mail.mail_sent') }
56
+ else
57
+ result = { msg_error: t('drgcms.dc_mail.message_status_error') }
58
+ end
59
+ render json: result.to_json
60
+ else
61
+ render nothing: true
62
+ end
63
+ end
64
+
65
+ ########################################################################
66
+ #
67
+ ########################################################################
68
+ def subscribe
69
+
70
+ end
71
+
72
+ ########################################################################
73
+ #
74
+ ########################################################################
75
+ def unsubscribe
76
+
77
+ end
78
+
79
+ private
80
+ ########################################################################
81
+ # Call rake task
82
+ ########################################################################
83
+ def call_rake(task, options = {})
84
+ options[:rails_env] ||= Rails.env
85
+ args = options.map { |n, v| "#{n.to_s.upcase}='#{v}'" }
86
+ system "rake #{task} #{args.join(' ')} --trace 2>&1 >> #{Rails.root}/log/rake.log &"
87
+ end
88
+
89
+ end
@@ -0,0 +1,40 @@
1
+ #coding: utf-8
2
+ #--
3
+ # Copyright (c) 2012+ Damjan Rems
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ #++
24
+
25
+ ##########################################################################
26
+ # This is entry point for processing pages with DRG
27
+ ##########################################################################
28
+ class DcMainController < DcApplicationController
29
+
30
+ ##########################################################################
31
+ # Request processing starts here
32
+ ##########################################################################
33
+ def page
34
+ dc_process_default_request
35
+ end
36
+
37
+ # It's easy to alias default action
38
+ #alias :default_action :page
39
+
40
+ end
@@ -0,0 +1,40 @@
1
+ #encoding: utf-8
2
+ #--
3
+ # Copyright (c) 2014+ Damjan Rems
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ #++
24
+
25
+ module DrgcmsControls::DcPageControls
26
+
27
+ ######################################################################
28
+ # Called when new empty record is created
29
+ ######################################################################
30
+ def dc_new_record()
31
+ @record.design_id = params[:design_id] if params[:design_id]
32
+ return unless params[:page_id]
33
+ #
34
+ if page = DcPage.find(params[:page_id])
35
+ @record.design_id = page.design_id
36
+ @record.menu = page.menu
37
+ end
38
+ end
39
+
40
+ end