drg_cms 0.4.54 → 0.4.57

Sign up to get free protection for your applications and to get access to all the features.
@@ -287,7 +287,7 @@ def dc_process_default_request()
287
287
  # Add edit menu
288
288
  layout = 'content'
289
289
  if session[:edit_mode] > 0
290
- layout = 'cms'
290
+ # layout = 'cms'
291
291
  session[:site_id] = @site.id
292
292
  session[:site_page_table] = @site.page_table
293
293
  session[:page_id] = @page.id
@@ -149,7 +149,10 @@ end
149
149
  ####################################################################
150
150
  def restore_from_journal
151
151
  # Only administrators can perform this operation
152
- return render(text: t('drgcms.not_authorized') ) unless dc_user_has_role('admin')
152
+ unless dc_user_has_role('admin')
153
+ { 'msg_info' => (t ('drgcms.not_authorized')) }
154
+ return render inline: result.to_json, formats: 'js'
155
+ end
153
156
  # selected fields to hash
154
157
  restore = params[:select].inject({}) {|r,v| r[v.first] = 0 if v.last == '1'; r}
155
158
  result = if restore.size == 0
@@ -248,7 +251,8 @@ def update_json(json, is_update=false) #:nodoc:
248
251
  result = {}
249
252
  json.each do |k,v|
250
253
  if v.class == Hash
251
- result[k] = v['$oid'] if is_update
254
+ result[k] = v['$oid'] unless is_update
255
+ #TODO Double check if unless works as expected
252
256
  elsif v.class == Array
253
257
  result[k] = []
254
258
  v.each {|e| result[k] << update_json(e, is_update)}
@@ -3,6 +3,10 @@
3
3
  extend: form_name
4
4
  table: table_name
5
5
  title: Some title
6
+ controls: controls_file
7
+ readonly: 1
8
+ permissions:
9
+ can_view: role_name
6
10
 
7
11
  index:
8
12
  filter: name, id as text_field
@@ -87,11 +91,18 @@ form:
87
91
  action: priprava_odlocbe
88
92
  method: (get),put,post
89
93
  caption: Priprava odločbe
94
+ 6:
95
+ type: script
96
+ caption: Cancle
97
+ js: parent.reload();
98
+
90
99
  tabs:
91
100
  tab1:
92
101
  10:
93
102
  name: name
94
103
  type: text_field
104
+ type: hidden_field
105
+ type: readonly
95
106
  html:
96
107
  size: 50
97
108
  40:
@@ -102,42 +113,15 @@ form:
102
113
  html:
103
114
  include_blank: true
104
115
 
105
- 20:
106
- name: title
107
- type: text_field
108
- html:
109
- size: 50
116
+ 40:
117
+ name: operation
118
+ type: select
110
119
 
111
120
  30:
112
121
  name: sub_text
113
122
  type: html_field
114
123
  options: 'height: 400'
115
124
 
116
- 35:
117
- name: pre_display
118
- type: text_field
119
- html:
120
- size: 50
121
- 40:
122
- name: operation
123
- type: select
124
-
125
- 50:
126
- name: display
127
- type: select
128
-
129
- 60:
130
- name: parameters
131
- type: text_field
132
- html:
133
- size: 50
134
-
135
- 70:
136
- name: captcha_type
137
- type: text_field
138
- html:
139
- size: 10
140
-
141
125
  80:
142
126
  name: valid_from
143
127
  type: datetime_select
@@ -159,6 +143,7 @@ form:
159
143
  110:
160
144
  name: active
161
145
  type: check_box
146
+
162
147
  tab2:
163
148
  10:
164
149
  name: form
@@ -45,6 +45,11 @@ form:
45
45
  type: text_field
46
46
  html:
47
47
  size: 20
48
+ 40:
49
+ name: link_prepend
50
+ type: text_field
51
+ html:
52
+ size: 20
48
53
 
49
54
  tab2:
50
55
  10:
@@ -46,18 +46,18 @@ form:
46
46
  eval: '@parent.dc_page_class.all_pages_for_site(@parent.dc_get_site)'
47
47
  html:
48
48
  size: 50
49
- #
50
- # 30:
51
- # name: link
52
- # type: text_field
53
- # html:
54
- # size: 50
55
49
  40:
50
+ name: link_prepend
51
+ type: text_field
52
+ html:
53
+ size: 20
54
+
55
+ 50:
56
56
  name: target
57
57
  type: text_field
58
58
  html:
59
59
  size: 10
60
- 50:
60
+ 60:
61
61
  name: order
62
62
  type: text_field
63
63
  html:
@@ -45,6 +45,11 @@ form:
45
45
  type: text_field
46
46
  html:
47
47
  size: 20
48
+ 40:
49
+ name: link_prepend
50
+ type: text_field
51
+ html:
52
+ size: 20
48
53
 
49
54
  tab2:
50
55
  10:
@@ -43,32 +43,37 @@ form:
43
43
  html:
44
44
  size: 50
45
45
  30:
46
+ name: link_prepend
47
+ type: text_field
48
+ html:
49
+ size: 20
50
+ 40:
46
51
  name: link
47
52
  type: text_with_select
48
53
  eval: '@parent.dc_page_class.all_pages_for_site(@parent.dc_get_site)'
49
54
  html:
50
55
  size: 50
51
- 40:
56
+ 50:
52
57
  name: target
53
58
  type: text_field
54
59
  html:
55
60
  size: 10
56
- 50:
61
+ 60:
57
62
  name: order
58
63
  type: text_field
59
64
  html:
60
65
  size: 2
61
- 60:
66
+ 70:
62
67
  name: submenu
63
68
  type: text_area
64
69
  html:
65
70
  size: 60x20
66
- 70:
71
+ 80:
67
72
  name: css
68
73
  type: text_area
69
74
  html:
70
75
  size: 60x10
71
- 80:
76
+ 90:
72
77
  name: policy_id
73
78
  type: select
74
79
  eval: dc_choices4_site_policies
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -84,7 +84,7 @@ EOT
84
84
  choices << [ t("helpers.label.#{@form['table']}.#{s}"), s ]
85
85
  end
86
86
  end
87
- t('drgcms.sort') + select('sort', 'sort', choices, { include_blank: true }, { class: 'drgcms_sort', 'data-table' => @form['table']} )
87
+ t('drgcms.sort')+ ' ' + select('sort', 'sort', choices, { include_blank: true }, { class: 'drgcms_sort', 'data-table' => @form['table']} )
88
88
 
89
89
  when action == 'filter' then # filter
90
90
  caption = t('drgcms.filter')
@@ -126,6 +126,13 @@ end
126
126
  ############################################################################
127
127
  def _get_field_div(name) #:nodoc:
128
128
  # field not defined on form. Must be defined: name as form_field_type
129
+ filter = nil
130
+ if session[@form['table']] and session[@form['table']][:filter]
131
+ filter = session[@form['table']][:filter].split("\t")
132
+ end
133
+
134
+ #params[:filter_field], params[:filter_oper], params[:record][params[:filter_field]]
135
+
129
136
  if name.match(' as ')
130
137
  name, dummy, type = name.split(' ')
131
138
  field = {"name" => name, "type" => type, "html"=>{"size"=>20}}
@@ -133,6 +140,14 @@ def _get_field_div(name) #:nodoc:
133
140
  field = _get_field_def(name)
134
141
  field = {"name" => name, "type" => 'text_field', "html"=>{"size"=>20}} if field.nil?
135
142
  end
143
+ #
144
+ if filter
145
+ if field['html']
146
+ field['html']['value'] = filter[2]
147
+ else
148
+ field['html'] = {"value"=>filter[2]}
149
+ end
150
+ end
136
151
  klas_string = field['type'].camelize
137
152
  klas = DrgcmsFormField::const_get(klas_string)
138
153
  o = klas.new(self, @record, field).render
@@ -155,14 +170,16 @@ def dc_div_filter()
155
170
  inputs << _get_field_div(f)
156
171
  end
157
172
  choices4_operators = t('drgcms.choices4_filter_operators').chomp.split(',').inject([]) {|r,v| r << (v.match(':') ? v.split(':') : v )}
173
+ s = session[@form['table']]
174
+ is_hidden = (s and s[:filter]) ? '' : ' class="div-hidden" '
158
175
  html =<<EOT
159
- <div id="drgcms_filter">
176
+ <div id="drgcms_filter" #{is_hidden}>
177
+ <table class="dc-menu"><td>
160
178
  #{ form_tag :table => @form['table'], filter: :on, action: :index, method: :post }
161
179
  #{ select(nil, 'filter_field', choices, { include_blank: true}) }
162
180
  #{ select(nil, 'filter_oper', choices4_operators) }
163
181
  #{ inputs }
164
- <br>
165
- <table class="dc-menu">
182
+ </td>
166
183
  <td class="dc-link-submit dc-animate">#{submit_tag(t('drgcms.filter_on'), :class => 'dc-submit')}</td>
167
184
  <td class="dc-link dc-animate">#{link_to t('drgcms.filter_off'), action: 'index', filter: 'off', :table => @form['table']}</td>
168
185
  </table>
@@ -488,7 +505,7 @@ def dc_actions_for_form()
488
505
  end
489
506
  # Javascript action
490
507
  when v['type'] == 'script'
491
- v['caption'] ||= v['text'] || 'Caption missing!'
508
+ v['caption'] ||= 'Caption missing!'
492
509
  caption = t("#{v['caption'].downcase}", v['caption'])
493
510
  data = {'request' => 'script', 'script' => v['js']}
494
511
  %Q[<td class="dc-link-ajax dc-animate">#{ link_to(caption, '#', data: data ) }</td>]
@@ -578,9 +595,6 @@ end
578
595
  # Creates edit form div.
579
596
  ############################################################################
580
597
  def dc_fields_for_form()
581
- if @form['edit']
582
- p "@form['edit']['title'] directive will be depricated. Use edit_title in form directive instead! #{@form['table']}"
583
- end
584
598
  html, tabs, tdata = '',[], ''
585
599
  # Only fields defined
586
600
  if (fields = @form['form']['fields'])
@@ -140,11 +140,18 @@ end
140
140
  # String. HTML code for title.
141
141
  ############################################################################
142
142
  def dc_edit_title()
143
- c = "#{t('drgcms.edit')} : "
144
- c << (@form['title'] ? t( @form['title'], @form['title'] ) : t_tablename(@form['table'])) + ' : '
145
- title = @form['form']['edit_title'] || @form['edit_title'] # edit_title bo šel ven
146
- c << "#{@record[ title ]} : " if title and @record.respond_to?(title)
147
- c << @record._id
143
+ title = @form['form']['title']
144
+ # defined as form:title:edit
145
+ if title and title['edit']
146
+ t( title['edit'], title['edit'] )
147
+ else
148
+ # concatenate title
149
+ c = "#{t('drgcms.edit')} : "
150
+ c << (@form['title'] ? t( @form['title'], @form['title'] ) : t_tablename(@form['table'])) + ' : '
151
+ title = (title and title['field']) ? title['field'] : @form['form']['edit_title']
152
+ c << "#{@record[ title ]} : " if title and @record.respond_to?(title)
153
+ c << @record._id
154
+ end
148
155
  end
149
156
 
150
157
  ############################################################################
@@ -154,10 +161,16 @@ end
154
161
  # String. HTML code for title.
155
162
  ############################################################################
156
163
  def dc_new_title()
157
- if @form['table'] == 'dc_dummy'
158
- t( @form['title'], @form['title'] )
164
+ title = @form['form']['title']
165
+ # defined as form:title:new
166
+ if title and title['new']
167
+ t( title['new'], title['new'] )
159
168
  else
160
- "#{t('drgcms.new')} : #{t_tablename(@form['table'])}"
169
+ if @form['table'] == 'dc_dummy'
170
+ t( @form['title'], @form['title'] )
171
+ else
172
+ "#{t('drgcms.new')} : #{t_tablename(@form['table'])}"
173
+ end
161
174
  end
162
175
  end
163
176
 
@@ -431,7 +444,9 @@ def t(key, default='')
431
444
  if c.class == Hash or c.match( 'translation missing' )
432
445
  c = I18n.t(key, locale: 'en')
433
446
  # Still not found. Return default if set
434
- c = default if c.match( 'translation missing' ) and !default.blank?
447
+ if c.class == Hash or c.match( 'translation missing' )
448
+ c = default.blank? ? key : default
449
+ end
435
450
  end
436
451
  c
437
452
  end
@@ -938,4 +953,29 @@ def dc_big_table(key)
938
953
  ret
939
954
  end
940
955
 
956
+ ########################################################################
957
+ # Will return html code required for open edit form in iframe. If parameters
958
+ # are found in url iframe will be initial loaded with url parameters thus
959
+ # enabling forms load on page display.
960
+ ########################################################################
961
+ def iframe_edit1()
962
+ # default_table = params[:table] if default_table.nil?
963
+ # p params
964
+ parms = {}
965
+ ret = if params.size > 2 #and default_table # controller, action, path is minimum
966
+ parms[:controller] = 'cmsedit'
967
+ parms[:action] = params[:oper] ? params[:oper] : 'index'
968
+ parms[:table] = params[:table]
969
+ parms[:formname] = params[:formname] || params[:table]
970
+ parms[:id] = params[:idp]
971
+ p '**************', url_for(parms)
972
+ "<iframe id='iframe_edit' name='iframe_edit' src='#{url_for parms}'></iframe>"
973
+ else
974
+ "<iframe id='iframe_edit' name='iframe_edit'></iframe>"
975
+ end
976
+ #bla
977
+ p ret
978
+ ret.html_safe
979
+ end
980
+
941
981
  end
@@ -88,6 +88,15 @@ EOT
88
88
  html.html_safe
89
89
  end
90
90
 
91
+ ########################################################################
92
+ # Will return html code required for open edit form in iframe. If parameters
93
+ # are found in url iframe will be initial loaded with url parameters thus
94
+ # enabling forms load on page display.
95
+ ########################################################################
96
+ def iframe_edit()
97
+ @parent.render(partial: 'dc_common/iframe_edit', formats: [:html])
98
+ end
99
+
91
100
  ########################################################################
92
101
  # Return HTML part of code.
93
102
  ########################################################################
@@ -73,17 +73,31 @@ end
73
73
  # Returns html code required to create single link in a menu. Subroutine of do_menu_level.
74
74
  ########################################################################
75
75
  def link_4menu(item)
76
- # link should start with '/'
77
- item.link = ((item.link[0] == '/' ? '' : '/') + item.link) unless item.link.match('http')
76
+ # prepand to link
77
+ link = if !item.link_prepend.blank?
78
+ item.link_prepend
79
+ elsif !@menu.link_prepend.blank?
80
+ @menu.link_prepend
81
+ else
82
+ ''
83
+ end
84
+
85
+ if item.link.match('http')
86
+ link = item.link
87
+ else
88
+ link += (item.link[0] == '/' ? '' : '/') + item.link
89
+ link = '/' + link unless link[0] == '/' # link should start with '/'
90
+ end
91
+
78
92
  target = item.target.blank? ? nil : item.target
79
93
  # - in first place won't write caption text
80
94
  caption = item.caption[0] == '-' ? '' : item.caption.to_s
81
95
  img_title = item.caption.to_s.sub('-','')
82
96
  # add picture if picture is not blank
83
97
  (item.picture.blank? ? '' :
84
- @parent.link_to( @parent.image_tag(item.picture), item.link, {title: img_title, target: target} )) +
98
+ @parent.link_to( @parent.image_tag(item.picture), link, {title: img_title, target: target} )) +
85
99
  (caption.blank? ? '' :
86
- @parent.link_to(caption, item.link, {target: target}) )
100
+ @parent.link_to(caption, link, {target: target}) )
87
101
  end
88
102
 
89
103
  ########################################################################
@@ -79,19 +79,28 @@ end
79
79
  # [item] SimpleMenuItem.
80
80
  ########################################################################
81
81
  def link_4menu(item)
82
- # Link should start with /
83
- item.link = ((item.link[0,1] == '/' ? '' : '/') + item.link) unless item.link.match('http:')
84
- target = item.target.blank? ? nil : item.target
85
- if item.caption.match('pic:')
86
- p 'pic: value in caption will be deprecated. Use picture field instead.'
87
- @parent.link_to( @parent.image_tag(item.caption.sub('pic:','')), item.link, {target: target} )
82
+ # prepand to link
83
+ link = if !item.link_prepend.blank?
84
+ item.link_prepend
85
+ elsif !@menu.link_prepend.blank?
86
+ @menu.link_prepend
88
87
  else
89
- # - in first place won't write caption text
90
- caption = item.caption[0] == '-' ? '' : item.caption.to_s
91
- img_title = item.caption.to_s.sub('-','')
92
- (item.picture.blank? ? '' : @parent.link_to( @parent.image_tag(item.picture), item.link, {title: img_title, target: target} )) +
93
- ( caption.blank? ? '' : @parent.link_to(caption, item.link, {target: target}))
88
+ ''
94
89
  end
90
+
91
+ if item.link.match('http')
92
+ link = item.link
93
+ else
94
+ link += (item.link[0] == '/' ? '' : '/') + item.link
95
+ link = '/' + link unless link[0] == '/' # link should start with '/'
96
+ end
97
+
98
+ target = item.target.blank? ? nil : item.target
99
+ # - in first place won't write caption text
100
+ caption = item.caption[0] == '-' ? '' : item.caption.to_s
101
+ img_title = item.caption.to_s.sub('-','')
102
+ (item.picture.blank? ? '' : @parent.link_to( @parent.image_tag(item.picture), link, {title: img_title, target: target} )) +
103
+ ( caption.blank? ? '' : @parent.link_to(caption, link, {target: target}))
95
104
  end
96
105
 
97
106
  ########################################################################
@@ -106,8 +115,7 @@ def as_table
106
115
  # use div_name if specified otherwise menu.name
107
116
  div_name = (@menu.div_name.to_s.size > 2 ? @menu.div_name : @menu.name).downcase
108
117
  html << "<table class=\"#{div_name}\"><tr>"
109
- # sort items acording to :order
110
- # items = @menu.dc_simple_menu_items.sort {|a,b| a.order <=> b.order}
118
+ #
111
119
  items = @menu.dc_simple_menu_items.where(active: true).order(order: 1)
112
120
  items.each do |item|
113
121
  # menu can be hidden from user
@@ -119,6 +127,28 @@ def as_table
119
127
  end
120
128
  html << "</table>"
121
129
  end
130
+ ########################################################################
131
+ # Renders menu as table. This is single level menu only and uses table elements to
132
+ # display menu options evenly justified.
133
+ ########################################################################
134
+ def as_responsive
135
+ html = link_4edit
136
+ return "#{html}#{@opts[:name]}<br>Menu not found!" if @menu.nil?
137
+ #
138
+ @selected = find_selected
139
+ klas = @opts[:classes] ? @opts[:classes] : 'small-2 middle-4 large-6 columns'
140
+ klas << ' columns' unless klas.match('column')
141
+ klas=''
142
+ #
143
+ items = @menu.dc_simple_menu_items.where(active: true).order(order: 1)
144
+ items.each do |item|
145
+ # menu can be hidden from user
146
+ can_view, msg = dc_user_can_view(@parent, item)
147
+ next unless can_view
148
+ html << "<li class=\"#{klas}#{(item.id == @selected.id) ? 'selected' : 'item'}\">#{ link_4menu(item) }</li>" #
149
+ end
150
+ html
151
+ end
122
152
 
123
153
  ########################################################################
124
154
  # Creates menu with single level dropdown menu. This is older version of method which