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