drg_cms 0.5.52.12 → 0.5.52.16

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 (60) hide show
  1. checksums.yaml +5 -5
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +17 -2
  3. data/app/assets/stylesheets/drg_cms/drg_cms.css +16 -3
  4. data/app/assets/stylesheets/drg_cms/select-multiple.css +1 -1
  5. data/app/controllers/cmsedit_controller.rb +56 -16
  6. data/app/controllers/dc_application_controller.rb +83 -1
  7. data/app/controllers/dc_common_controller.rb +2 -52
  8. data/app/forms/all_options.yml +27 -4
  9. data/app/forms/cms_menu.yml +5 -0
  10. data/app/forms/dc_gallery.yml +53 -0
  11. data/app/forms/dc_link.yml +16 -10
  12. data/app/forms/dc_menu_item.yml +5 -0
  13. data/app/forms/dc_page.yml +1 -2
  14. data/app/forms/dc_removed_url.yml +42 -0
  15. data/app/helpers/cmsedit_helper.rb +63 -22
  16. data/app/helpers/dc_application_helper.rb +35 -11
  17. data/app/helpers/dc_gallery_renderer.rb +94 -0
  18. data/app/helpers/dc_page_renderer.rb +20 -3
  19. data/app/helpers/dc_poll_renderer.rb +6 -7
  20. data/app/models/concerns/dc_page_concern.rb +1 -1
  21. data/app/models/dc_filter.rb +15 -7
  22. data/app/models/dc_gallery.rb +64 -0
  23. data/app/models/dc_link.rb +1 -0
  24. data/app/models/dc_memory.rb +19 -4
  25. data/app/models/dc_page.rb +1 -1
  26. data/app/models/dc_removed_url.rb +54 -0
  27. data/app/models/drgcms_form_fields.rb +5 -1649
  28. data/app/models/drgcms_form_fields/check_box.rb +69 -0
  29. data/app/models/drgcms_form_fields/comment.rb +49 -0
  30. data/app/models/drgcms_form_fields/date_picker.rb +102 -0
  31. data/app/models/drgcms_form_fields/date_select.rb +68 -0
  32. data/app/models/drgcms_form_fields/date_time_picker.rb +87 -0
  33. data/app/models/drgcms_form_fields/datetime_select.rb +73 -0
  34. data/app/models/drgcms_form_fields/drgcms_field.rb +241 -0
  35. data/app/models/drgcms_form_fields/drgcms_form_fields.rb +25 -0
  36. data/app/models/drgcms_form_fields/embedded.rb +84 -0
  37. data/app/models/drgcms_form_fields/file_select.rb +70 -0
  38. data/app/models/drgcms_form_fields/hidden_field.rb +52 -0
  39. data/app/models/drgcms_form_fields/html_field.rb +70 -0
  40. data/app/models/drgcms_form_fields/journal_diff.rb +60 -0
  41. data/app/models/drgcms_form_fields/link_to.rb +69 -0
  42. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +195 -0
  43. data/app/models/drgcms_form_fields/number_field.rb +83 -0
  44. data/app/models/drgcms_form_fields/password_field.rb +62 -0
  45. data/app/models/drgcms_form_fields/readonly.rb +79 -0
  46. data/app/models/drgcms_form_fields/select.rb +164 -0
  47. data/app/models/drgcms_form_fields/submit_tag.rb +58 -0
  48. data/app/models/drgcms_form_fields/text_area.rb +68 -0
  49. data/app/models/drgcms_form_fields/text_autocomplete.rb +143 -0
  50. data/app/models/drgcms_form_fields/text_field.rb +56 -0
  51. data/app/models/drgcms_form_fields/text_with_select.rb +92 -0
  52. data/app/models/drgcms_form_fields/tree_select.rb +150 -0
  53. data/config/locales/drgcms_en.yml +1 -0
  54. data/config/locales/drgcms_sl.yml +2 -1
  55. data/config/locales/models_en.yml +42 -6
  56. data/config/locales/models_sl.yml +38 -3
  57. data/lib/drg_cms.rb +1 -1
  58. data/lib/drg_cms/version.rb +1 -1
  59. data/lib/tasks/dc_cleanup.rake +1 -1
  60. metadata +33 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 637c9ceaf9353fced28bc05ec02a3ad516d91f54
4
- data.tar.gz: 949139ee0f5a5351741e94d74d5e7e1502426946
2
+ SHA256:
3
+ metadata.gz: 4830c6ed53c032e56282ba2b6b2b2e3a3c98630e45ee6a96a3d1f03531081738
4
+ data.tar.gz: e9bf50040f3dce41deb7b97b4927a58aace756a4060cdfe64e6424188cdb66ae
5
5
  SHA512:
6
- metadata.gz: c67a0b1046125b1408fa8604b88d5b9993d29832fbe6daac9d829b4f6c2bb7537049da1636eefd5f5d3aaebdc84e3ef0ed5f9dd9abb56d039a857b509367573c
7
- data.tar.gz: 44e2b256013e943de0edb9e96a947e4deebca64a24686809b2b70ed4d1d9edb827aafb0a300473dbfde0888f6044108150eeb84517ca822529f4b69773083499
6
+ metadata.gz: e5f93f0426f8cda2ff394d3233372cd056dbcd0cd140507d392b7db47e68ba57cf47e1f4696ae2da9c4ff2b9ea3331e186750fd88a07221bc0557056c4c47c4d
7
+ data.tar.gz: 2cd13d6c58e907e6d2133681387d9bb760e5a5a57e34ad25d694737f86cb5fc7ecc74e60adbf12a67e7e1cb3dfe8b23dc35e1463f5e22ce71beb9b5055080424
@@ -322,7 +322,7 @@ $(document).ready( function() {
322
322
  $('#iframe_cms').load( function() {
323
323
  // alert('bla 1');
324
324
  new_height = this.contentWindow.document.body.offsetHeight + 50;
325
- if (new_height < 500 & new_height > 60) new_height = 500;
325
+ if (new_height < 500 && new_height > 60) new_height = 500;
326
326
  this.style.height = new_height + 'px';
327
327
  // scroll to top
328
328
  $('#iframe_cms').dc_scroll_view();
@@ -346,7 +346,7 @@ $(document).ready( function() {
346
346
  *******************************************************************/
347
347
  $('.dc-link-ajax').on('click', function(e) {
348
348
  // check HTML5 validations
349
- if (!$("form")[0].checkValidity() ) {
349
+ if ($("form")[0] && !$("form")[0].checkValidity() ) {
350
350
  $("form")[0].reportValidity();
351
351
  return false;
352
352
  }
@@ -381,6 +381,21 @@ $(document).ready( function() {
381
381
  }
382
382
 
383
383
  });
384
+ });
385
+
386
+ /*******************************************************************
387
+ will open a new window with URL specified.
388
+ ********************************************************************/
389
+ $('.dc-window-open').on('click', function(e) {
390
+ var url = this.getAttribute("data-url");
391
+ var title = this.getAttribute("title");
392
+ var w = 1000;
393
+ var h = 800;
394
+ var left = (screen.width/2)-(w/2);
395
+ var top = (screen.height/2)-(h/2);
396
+ var win = window.open(url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left);
397
+ win.focus();
398
+ // $('#bpopup').bPopup({ loadUrl: url, speed: 650, transition: 'slideDown' });
384
399
  });
385
400
 
386
401
  /*******************************************************************
@@ -93,6 +93,7 @@ padding: 6px 4px;
93
93
  border: solid 2px #ddd;
94
94
  border-radius: 2px;
95
95
  font: 14px helvetica;
96
+ max-width: 100%;
96
97
  }
97
98
 
98
99
  textarea:focus, input:focus, select:focus {
@@ -270,9 +271,10 @@ display: inline-table;
270
271
  #data-fields {margin: 5px;}
271
272
 
272
273
  .dc-link {
273
- padding: 6px;
274
-
274
+ font-weight: bold;
275
+ color: #666;
275
276
  text-align: center;
277
+ padding: 6px;
276
278
  border-radius: 2px;
277
279
  background: transparent linear-gradient(to bottom, #FFF 0%, #F2F2F2 100%) repeat scroll 0% 0%;
278
280
  border: 1px solid #eee;
@@ -281,7 +283,9 @@ border: 1px solid #eee;
281
283
  .dc-link:hover {
282
284
  background: #ddd;
283
285
  border: 1px solid #ddd;
284
- transition: 0.3s;
286
+ transition: 0.3s;
287
+ color: #000;
288
+ cursor: pointer;
285
289
  }
286
290
 
287
291
  .dc-link:hover a {
@@ -289,6 +293,15 @@ border: 1px solid #eee;
289
293
  transition: 0.3s;
290
294
  }
291
295
 
296
+ .dc-link-no {
297
+ text-align: left;
298
+ font-weight: bold;
299
+ padding: 6px;
300
+ border-radius: 2px;
301
+ color: #fff;
302
+ background: #ddd;
303
+ }
304
+
292
305
  .dc-link-ajax {
293
306
  text-align: left;
294
307
  font-weight: bold;
@@ -1,5 +1,5 @@
1
1
  .ms-container{
2
- width: 200px;
2
+ max-width: 200px;
3
3
  }
4
4
 
5
5
  .ms-container:after{
@@ -207,18 +207,17 @@ def check_filter_options() #:nodoc:
207
207
  =end
208
208
  # pagination if required
209
209
  per_page = (@form['result_set']['per_page'] || 30).to_i
210
- if per_page > 0
211
- @records = @records.page(session[table_name][:page]).per(per_page)
212
- end
210
+ @records = @records.page(session[table_name][:page]).per(per_page) if per_page > 0
213
211
  end
214
212
 
215
213
  ########################################################################
216
- # Index action.
214
+ # Process index action for normal collections.
217
215
  ########################################################################
218
- def index
216
+ def process_collections #:nodoc
219
217
  # If result_set is not defined on form, then it will fail. :return_to should know where to go
220
218
  if @form['result_set'].nil?
221
- return process_return_to(params[:return_to] || 'reload')
219
+ process_return_to(params[:return_to] || 'reload')
220
+ return true
222
221
  end
223
222
  # for now enable only filtering of top level documents
224
223
  if @tables.size == 1
@@ -232,7 +231,8 @@ def index
232
231
  # something iz wrong. flash[] should have explanation.
233
232
  if @records.class == FalseClass
234
233
  @records = []
235
- return render(action: :index)
234
+ render(action: :index)
235
+ return true
236
236
  end
237
237
  # pagination but only if not already set
238
238
  unless (@form['table'] == 'dc_memory' or @records.options[:limit])
@@ -253,8 +253,35 @@ def index
253
253
  end
254
254
  end
255
255
  end
256
- #
257
- call_callback_method('dc_footer')
256
+ false
257
+ end
258
+
259
+ ########################################################################
260
+ # Process index action for in memory data.
261
+ ########################################################################
262
+ def process_in_memory #:nodoc
263
+ @records = []
264
+ # result set is defined by filter method in control object
265
+ if (method = @form['result_set']['filter'])
266
+ send(method) if respond_to?(method)
267
+ end
268
+ # result set is defined by class method
269
+ if (klass_method = @form['result_set']['filter_method'])
270
+ _klass, method = klass_method.split('.')
271
+ klass = _klass.classify.constantize
272
+ @records = klass.send(method) if klass.respond_to?(method)
273
+ end
274
+ false
275
+ end
276
+
277
+ ########################################################################
278
+ # Indx action
279
+ ########################################################################
280
+ def index
281
+ redirected = (@form['table'] == 'dc_memory' ? process_in_memory : process_collections)
282
+ return if redirected
283
+ #
284
+ call_callback_method(@form['result_set']['footer'] || 'dc_footer')
258
285
  respond_to do |format|
259
286
  format.html { render action: :index }
260
287
  format.js { render partial: :result }
@@ -471,7 +498,9 @@ def update
471
498
  params[:return_to] = 'index' if params[:commit] == t('drgcms.save&back') # save & back
472
499
  @parms['action'] = 'update'
473
500
  # Process return_to link
474
- return process_return_to(params[:return_to]) if params[:return_to]
501
+ return process_return_to(params[:return_to]) if params[:return_to]
502
+ else
503
+ return render action: :edit
475
504
  end
476
505
  else
477
506
  flash[:error] = t('drgcms.not_authorized')
@@ -505,6 +534,7 @@ def destroy
505
534
  when !ok2delete then
506
535
  flash[:error] = t('drgcms.not_authorized')
507
536
  return index
537
+
508
538
  when params['operation'].nil? then
509
539
  # Process before delete callback
510
540
  if (m = callback_method('before_delete') )
@@ -517,13 +547,18 @@ def destroy
517
547
  save_journal(:delete)
518
548
  flash[:info] = t('drgcms.record_deleted')
519
549
  # Process after delete callback
520
- if (m = callback_method('after_delete') ) then call_callback_method(m) end
550
+ if (m = callback_method('after_delete') )
551
+ call_callback_method(m)
552
+ elsif params['after-delete'].to_s.match('return_to')
553
+ params[:return_to] = params['after-delete']
554
+ end
521
555
  # Process return_to link
522
556
  return process_return_to(params[:return_to]) if params[:return_to]
523
557
  else
524
558
  flash[:error] = dc_error_messages_for(@record)
525
559
  end
526
560
  return index
561
+
527
562
  # deaktivate document
528
563
  when params['operation'] == 'disable' then
529
564
  if @record.respond_to?('active')
@@ -533,6 +568,7 @@ def destroy
533
568
  @record.save
534
569
  flash[:info] = t('drgcms.doc_disabled')
535
570
  end
571
+
536
572
  # reaktivate document
537
573
  when params['operation'] == 'enable' then
538
574
  if @record.respond_to?('active')
@@ -542,6 +578,10 @@ def destroy
542
578
  @record.save
543
579
  flash[:info] = t('drgcms.doc_enabled')
544
580
  end
581
+
582
+ # reorder documents
583
+ when params['operation'] == 'reorder' then
584
+
545
585
  end
546
586
  #
547
587
  @parms['action'] = 'update'
@@ -588,8 +628,7 @@ def read_drg_cms_form
588
628
  # split ids passed when embedded document
589
629
  ids = params[:ids].to_s.strip.downcase
590
630
  @ids = ids.split(';').inject([]) { |r,v| r << v }
591
- # formname defaults to last table specified
592
- dc_deprecate("Parameter :formname will be deprecated in future. Use :form_name instead") if params[:formname]
631
+ # form_name defaults to last table specified
593
632
  form_name = params[:form_name] || @tables.last[1]
594
633
  @form = YAML.load_file( dc_find_form_file(form_name) ) rescue nil
595
634
  return unless @form
@@ -621,9 +660,10 @@ def check_authorization
621
660
  # Just show menu
622
661
  # return show if params[:action] == 'show'
623
662
  return login if params[:id].in?(%w(login logout))
663
+ table = params[:table].to_s.strip.downcase
624
664
  # request shouldn't pass
625
- if session[:user_roles].nil? or params[:table].to_s.strip.downcase.size < 3 or
626
- !dc_user_can(DcPermission::CAN_VIEW)
665
+ if table != 'dc_memory' and
666
+ (session[:user_roles].nil? or table.size < 3 or !dc_user_can(DcPermission::CAN_VIEW))
627
667
  return render(action: 'error', locals: { error: t('drgcms.not_authorized')} )
628
668
  end
629
669
 
@@ -729,7 +769,7 @@ def callback_method(key) #:nodoc:
729
769
  when params['data'] && params['data'][data_key] then params['data'][data_key]
730
770
  # if dc_ + key method is present in model then it will be called automatically
731
771
  when respond_to?('dc_' + key) then 'dc_' + key
732
- when params[key] then params[key]
772
+ when params[data_key] then params[data_key]
733
773
  else nil
734
774
  end
735
775
  #
@@ -206,12 +206,20 @@ def dc_user_can(permission, table=params[:table])
206
206
  end
207
207
 
208
208
  ####################################################################
209
- # Detects if called from mobile agent according to http://detectmobilebrowsers.com/
209
+ # Detects if called from mobile agent according to http://detectmobilebrowsers.com/
210
+ # and set session[:is_mobile]
211
+ #
212
+ # Detect also if caller is a robot and set session[:is_robot]
210
213
  ####################################################################
211
214
  def dc_set_is_mobile
212
215
  is_mobile = request.user_agent ? /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.match(request.user_agent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.match(request.user_agent[0..3])
213
216
  : false
214
217
  session[:is_mobile] = is_mobile ? 1 : 0
218
+ #
219
+ if request.env["HTTP_USER_AGENT"] and request.env["HTTP_USER_AGENT"].match(/\(.*https?:\/\/.*\)/)
220
+ logger.info "ROBOT: #{Time.now.strftime('%Y.%m.%d %H:%M:%S')} id=#{@page.id} ip=#{request.remote_ip}."
221
+ session[:is_robot] = true
222
+ end
215
223
  end
216
224
 
217
225
 
@@ -576,4 +584,78 @@ def dc_deprecate(msg)
576
584
  ActiveSupport::Deprecation.warn("#{dc_get_site.name}: #{msg}")
577
585
  end
578
586
 
587
+ ####################################################################
588
+ # Clears all session data related to login.
589
+ ####################################################################
590
+ def clear_login_data
591
+ session[:edit_mode] = 0
592
+ session[:user_id] = nil
593
+ session[:user_name] = nil
594
+ session[:user_roles] = nil
595
+ cookies.delete :remember_me
596
+ end
597
+
598
+ ####################################################################
599
+ # Fills session with data related to successful login.
600
+ #
601
+ # @param [DcUser] user : User's document
602
+ # @param [Boolean] remember_me : false by default
603
+ ####################################################################
604
+ def fill_login_data(user, remember_me=false)
605
+ session[:user_id] = user.id if user
606
+ session[:user_name] = user.name if user
607
+ session[:edit_mode] = 0
608
+ session[:user_roles] = []
609
+ # Every user has guest role
610
+ guest = DcPolicyRole.find_by(system_name: 'guest')
611
+ session[:user_roles] << guest.id if guest
612
+ return unless user and user.active
613
+ # special for SUPERADMIN
614
+ sa = DcPolicyRole.find_by(system_name: 'superadmin')
615
+ if sa and (role = user.dc_user_roles.find_by(dc_policy_role_id: sa.id))
616
+ session[:user_roles] << role.dc_policy_role_id
617
+ session[:edit_mode] = 2
618
+ return
619
+ end
620
+ # read default policy from site. Policy might be inherited
621
+ policy_site = dc_get_site()
622
+ policy_site = DcSite.find(policy_site.inherit_policy) if policy_site.inherit_policy
623
+ default_policy = policy_site.dc_policies.find_by(is_default: true)
624
+ # load user roles
625
+ user.dc_user_roles.each do |role|
626
+ next unless role.active
627
+ next if role.valid_from and role.valid_from > Time.now.end_of_day.to_date
628
+ next if role.valid_to and role.valid_to < Time.now.to_date
629
+ # check if role is active in this site
630
+ policy_role = default_policy.dc_policy_rules.find_by(dc_policy_role_id: role.dc_policy_role_id)
631
+ next unless policy_role
632
+ # set edit_mode
633
+ session[:edit_mode] = 1 if policy_role.permission > 1
634
+ session[:user_roles] << role.dc_policy_role_id
635
+ end
636
+ # Save remember me cookie if not CMS user and remember me is selected
637
+ if session[:edit_mode] == 0 and remember_me
638
+ cookies.signed[:remember_me] = { :value => user.id, :expires => 180.days.from_now}
639
+ end
640
+ end
641
+
642
+ ##########################################################################
643
+ # Will check if user's login data is stil valid and reload user roles.
644
+ #
645
+ # @param [Time] repeat_after : Check is repeated after time. This is by default performed every 24 hours.
646
+ ##########################################################################
647
+ def dc_check_user_still_valid(repeat_after=1.day)
648
+ # not needed
649
+ return if session[:user_id].nil?
650
+ # last check more than a day ago
651
+ if (session[:user_chk] ||= Time.now) < repeat_after.ago
652
+ user_id = session[:user_id]
653
+ clear_login_data
654
+ # reload user roles
655
+ user = DcUser.find( user_id ) rescue nil
656
+ fill_login_data(user)
657
+ session[:user_chk] = Time.now
658
+ end
659
+ end
660
+
579
661
  end
@@ -105,7 +105,7 @@ def process_login
105
105
  return dc_render_404 unless ( params[:record] and params[:record][:username] and params[:record][:password] )
106
106
 
107
107
  unless params[:record][:password].blank? #password must not be empty
108
- user = DcUser.find_by(username: params[:record][:username])
108
+ user = DcUser.find_by(username: params[:record][:username], active: true)
109
109
  if user and user.authenticate(params[:record][:password])
110
110
  fill_login_data(user, params[:record][:remember_me].to_i == 1)
111
111
  return redirect_to params[:return_to] || '/'
@@ -130,7 +130,7 @@ end
130
130
  def login
131
131
  if cookies.signed[:remember_me]
132
132
  user = DcUser.find(cookies.signed[:remember_me])
133
- if user
133
+ if user and user.active
134
134
  fill_login_data(user, true)
135
135
  return redirect_to params[:return_to]
136
136
 
@@ -282,54 +282,4 @@ def process_document(line, table, id, ids)
282
282
  msg ? " ERROR! #{msg}" : " NEW. OK."
283
283
  end
284
284
 
285
- ####################################################################
286
- # Clears all session data related to login.
287
- ####################################################################
288
- def clear_login_data
289
- session[:edit_mode] = 0
290
- session[:user_id] = nil
291
- session[:user_name] = nil
292
- session[:user_roles] = nil
293
- cookies.delete :remember_me
294
- end
295
-
296
- ####################################################################
297
- # Fills session with data related to successful login.
298
- ####################################################################
299
- def fill_login_data(user, remember_me)
300
- session[:user_id] = user.id
301
- session[:user_name] = user.name
302
- session[:edit_mode] = 0
303
- session[:user_roles] = []
304
-
305
- # special for SUPERADMIN
306
- sa = DcPolicyRole.find_by(system_name: 'superadmin')
307
- if sa and (role = user.dc_user_roles.find_by(dc_policy_role_id: sa.id))
308
- session[:user_roles] << role.dc_policy_role_id
309
- session[:edit_mode] = 2
310
- return
311
- end
312
- # Every user has guest role
313
- guest = DcPolicyRole.find_by(system_name: 'guest')
314
- session[:user_roles] << guest.id if guest
315
- # read default policy from site
316
- default_policy = dc_get_site().dc_policies.find_by(is_default: true)
317
- # load user roles
318
- user.dc_user_roles.each do |role|
319
- next unless role.active
320
- next if role.valid_from and role.valid_from > Time.now.end_of_day.to_date
321
- next if role.valid_to and role.valid_to < Time.now.to_date
322
- # check if role is active in this site
323
- policy_role = default_policy.dc_policy_rules.find_by(dc_policy_role_id: role.dc_policy_role_id)
324
- next unless policy_role
325
- # set edit_mode
326
- session[:edit_mode] = 1 if policy_role.permission > 1
327
- session[:user_roles] << role.dc_policy_role_id
328
- end
329
- # Save remember me cookie if not CMS user and remember me is selected
330
- if session[:edit_mode] == 0 and remember_me
331
- cookies.signed[:remember_me] = { :value => user.id, :expires => 180.days.from_now}
332
- end
333
- end
334
-
335
285
  end
@@ -27,6 +27,9 @@ index:
27
27
  url: some_url
28
28
  caption: Some caption
29
29
  title: Text for mouse over
30
+ html:
31
+ class: dc-link-spinner
32
+ data-confirm: Confirm dialog text.
30
33
 
31
34
  3:
32
35
  type: link
@@ -41,6 +44,7 @@ index:
41
44
 
42
45
  result_set:
43
46
  filter: custom_filter
47
+ footer: custom_footer
44
48
  actions_width: 100
45
49
  per_page: 10
46
50
  table_style: 'color: green;'
@@ -109,17 +113,36 @@ form:
109
113
  actions:
110
114
  5:
111
115
  type: ajax
112
- controller: ppk
113
- action: priprava_odlocbe
116
+ controller: ctrl
117
+ action: action
114
118
  method: (get),put,post
115
- caption: Priprava odločbe
119
+ caption: ajax_call
120
+ when_new: false
121
+ 5:
122
+ type: window
123
+ controller: cmsedit
124
+ form_name: form
125
+ table: table
126
+ action: edit
127
+ method: (get),put,post
128
+ caption: Edit linked document
129
+ when_new: false
130
+ params:
131
+ id:
132
+ object: record (can be omitted)
133
+ method: page_id
134
+ user:
135
+ object: session
136
+ method: user_id
137
+
116
138
  6:
117
139
  type: script
118
140
  caption: Cancle
119
- js: parent.reload();
141
+ js: parent.location.reload();
120
142
  7:
121
143
  type: submit
122
144
  caption: Send
145
+ when_new: false
123
146
  params:
124
147
  before-save: send_mail
125
148
  after-save: return_to parent.reload