infopark_fiona7 1.1.0.0.10 → 1.2.0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/fiona7_ui.js +96 -50
  3. data/app/assets/javascripts/scrivito_patches/models/blob.js +21 -0
  4. data/app/assets/javascripts/scrivito_patches/models/obj.js +1 -1
  5. data/app/controllers/fiona7/release_controller.rb +6 -2
  6. data/app/controllers/fiona7/sessions_controller.rb +3 -0
  7. data/app/controllers/fiona7/workflow_controller.rb +46 -0
  8. data/app/helpers/fiona7_login_helper.rb +16 -0
  9. data/app/helpers/fiona7_override_helper.rb +1 -1
  10. data/config/delayed_routes.rb +1 -0
  11. data/config/precedence_routes.rb +92 -0
  12. data/infopark_fiona7.gemspec +2 -2
  13. data/lib/fiona7/blob_id_generator.rb +13 -0
  14. data/lib/fiona7/builder/indirect_blob_builder.rb +71 -0
  15. data/lib/fiona7/builder/lazy_blob_copier.rb +207 -0
  16. data/lib/fiona7/builder/obj_builder.rb +29 -50
  17. data/lib/fiona7/builder/obj_class_builder.rb +20 -0
  18. data/lib/fiona7/controllers/rest_api/blob_controller.rb +19 -0
  19. data/lib/fiona7/controllers/rest_api/obj_controller.rb +8 -4
  20. data/lib/fiona7/controllers/rest_api/workspace_controller.rb +2 -1
  21. data/lib/fiona7/engine.rb +56 -2
  22. data/lib/fiona7/json/obj_decorator.rb +4 -1
  23. data/lib/fiona7/link_converter/fiona_to_scrivito.rb +3 -1
  24. data/lib/fiona7/link_converter/scrivito_to_fiona.rb +12 -1
  25. data/lib/fiona7/mode_switch/cms_routes/scrivito_sdk.rb +1 -71
  26. data/lib/fiona7/mode_switch/cms_routes/scrivito_sdk_slave.rb +1 -71
  27. data/lib/fiona7/recursive_object_finder.rb +32 -8
  28. data/lib/fiona7/routers/rest_api.rb +6 -7
  29. data/lib/fiona7/scrivito_patches/attribute_content.rb +1 -1
  30. data/lib/fiona7/scrivito_patches/attribute_serializer.rb +22 -1
  31. data/lib/fiona7/scrivito_patches/basic_obj.rb +27 -5
  32. data/lib/fiona7/scrivito_patches/cms_backend.rb +3 -22
  33. data/lib/fiona7/scrivito_patches/cms_rest_api.rb +2 -1
  34. data/lib/fiona7/scrivito_patches/cms_routing.rb +2 -2
  35. data/lib/fiona7/scrivito_patches/model_library.rb +3 -3
  36. data/lib/fiona7/scrivito_patches/page_config.rb +21 -1
  37. data/lib/fiona7/scrivito_patches/preset_routes.rb +15 -2
  38. data/lib/fiona7/scrivito_patches/routing_extensions.rb +33 -20
  39. data/lib/fiona7/scrivito_patches/workspace.rb +3 -1
  40. data/lib/fiona7/super_object_finder.rb +63 -0
  41. data/lib/fiona7/type_register.rb +35 -9
  42. data/lib/fiona7/verity_search_engine.rb +1 -1
  43. data/lib/fiona7/version.rb +1 -1
  44. metadata +13 -7
  45. data/config/routes.rb +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f157ab2c9327bc25c25a102610afd55d62cd58a1
4
- data.tar.gz: e72a68bf50020c0ff5601cafe79abb25ed78914f
3
+ metadata.gz: 5390d8274e0e6c0929da925705786a07b297d912
4
+ data.tar.gz: 13969d1b7aa62d32be9679bd08b576bae5cb471a
5
5
  SHA512:
6
- metadata.gz: 039eb2f418d793ad1cf654a0dfcde66401b84ecdf9c6ac7a4173c774c3399cb228be72dbb2dc1b34f16de7821e2cb8c68c76c8626f3e8a54037b0ac3a3fe5865
7
- data.tar.gz: ac03a8ce8184097ec663ad18e6710cb8a4e002641c0b78be89e5fb4b9acc8fd9284acf219ff1f1eb2b9cc17b4e7aa1f156a0e12f68e83dfcc5b85e5b8ce41cf2
6
+ metadata.gz: a752b07549ac28002aede720ea199a2d299898e5d6e325365dabee926cca3a58d5a67f2352fcfc367fe19876b154bc9b4ed0add07c2b5e372300a3d8aa1f02b9
7
+ data.tar.gz: 6aa69f7e831a3d9fdc9fecb5028bbfbf3b935a29655895f5fa24aed5d8a67b70fed900bdbf2e40246a0ec33f96de671c7034921cd2f6ec03ae09471a56c3f67b
@@ -104,6 +104,13 @@
104
104
  'commands.release_obj.dialog.confirm': 'Freigeben',
105
105
  'commands.release_obj.failed': 'Freigabe fehlgeschlagen',
106
106
 
107
+ 'commands.edit_obj.title': 'Seite bearbeiten',
108
+ 'commands.edit_obj.dialog.title': 'Seite bearbeiten?',
109
+ 'commands.edit_obj.dialog.description': 'Es wird eine neue Arbeitsversion erstellt.',
110
+ 'commands.edit_obj.dialog.placeholder': 'Bitte Kommentar eintragen',
111
+ 'commands.edit_obj.dialog.confirm': 'Bearbeiten',
112
+ 'commands.edit_obj.failed': 'Bearbeitung fehlgeschlagen',
113
+
107
114
  'commands.forward_obj.title': 'Seite weiterleiten',
108
115
  'commands.forward_obj.dialog.title': 'Seite weiterleiten?',
109
116
  'commands.forward_obj.dialog.description': 'Die Arbeitsversion wird an einen weiteren Bearbeiter weitergeleitet. Dieser Vorgang kann nicht rückgängig gemacht werden.',
@@ -137,7 +144,10 @@
137
144
  'commands.take_obj.dialog.description': 'Die Arbeitsversion wird übernommen. Dieser Vorgang kann nicht rückgängig gemacht werden.',
138
145
  'commands.take_obj.dialog.placeholder': 'Bitte Kommentar eintragen',
139
146
  'commands.take_obj.dialog.confirm': 'Übernehmen',
140
- 'commands.take_obj.failed': 'Übernahme fehlgeschlagen'
147
+ 'commands.take_obj.failed': 'Übernahme fehlgeschlagen',
148
+
149
+ 'editing_disabled.workflow': 'Die Datei unterliegt einem Workflow und kann nicht direkt bearbeitet werden.',
150
+ 'editing_disabled.permissions': 'Ihnen fehlen die Rechte um die Datei zu bearbeiten'
141
151
  }, 'de');
142
152
 
143
153
  $.i18n().load({
@@ -149,6 +159,13 @@
149
159
  'commands.release_obj.dialog.confirm': 'Release',
150
160
  'commands.release_obj.failed': 'Release failed',
151
161
 
162
+ 'commands.edit_obj.title': 'Edit page',
163
+ 'commands.edit_obj.dialog.title': 'Edit this page?',
164
+ 'commands.edit_obj.dialog.description': 'A new version of this page will be created.',
165
+ 'commands.edit_obj.dialog.placeholder': 'Comment',
166
+ 'commands.edit_obj.dialog.confirm': 'Edit',
167
+ 'commands.edit_obj.failed': 'Edit failed',
168
+
152
169
  'commands.forward_obj.title': 'Forward page',
153
170
  'commands.forward_obj.dialog.title': 'Forward this page?',
154
171
  'commands.forward_obj.dialog.description': 'Forward and edited page is final. This operation cannot be reverted.',
@@ -158,14 +175,14 @@
158
175
 
159
176
  'commands.reject_obj.title': 'Reject page',
160
177
  'commands.reject_obj.dialog.title': 'Reject this page?',
161
- 'commands.reject_obj.dialog.description': 'Die Arbeitsversion wird abgelehnt. Dieser Vorgang kann nicht rückgängig gemacht werden.',
178
+ 'commands.reject_obj.dialog.description': 'Current page will be rejected. This operation cannot be reverted.',
162
179
  'commands.reject_obj.dialog.placeholder': 'Comment',
163
180
  'commands.reject_obj.dialog.confirm': 'Reject',
164
181
  'commands.reject_obj.failed': 'Reject failed',
165
182
 
166
183
  'commands.sign_obj.title': 'Sign page',
167
184
  'commands.sign_obj.dialog.title': 'Sign this page?',
168
- 'commands.sign_obj.dialog.description': 'Die eingereichte Version wird abgezeichnet. Dieser Vorgang kann nicht rückgängig gemacht werden.',
185
+ 'commands.sign_obj.dialog.description': 'Committed page will be signed. This operation cannot be reverted.',
169
186
  'commands.sign_obj.dialog.placeholder': 'Comment',
170
187
  'commands.sign_obj.dialog.confirm': 'Sign',
171
188
  'commands.sign_obj.failed': 'Signing failed',
@@ -182,19 +199,24 @@
182
199
  'commands.take_obj.dialog.description': 'Die Arbeitsversion wird übernommen. Dieser Vorgang kann nicht rückgängig gemacht werden.',
183
200
  'commands.take_obj.dialog.placeholder': 'Comment',
184
201
  'commands.take_obj.dialog.confirm': 'Take',
185
- 'commands.take_obj.failed': 'Take failed'
202
+ 'commands.take_obj.failed': 'Take failed',
203
+
204
+ 'editing_disabled.workflow': 'The current page belongs to a workflow and cannot be edited directly.',
205
+ 'editing_disabled.permissions': 'You do not have the permissions required to edit this page.'
186
206
  }, 'en');
187
207
 
188
208
  var dialog_icons = {
209
+ "edit": "",
189
210
  "forward": "",
190
211
  "reject": "",
191
- "commit": "&#xcheck;",
212
+ "commit": "",
192
213
  "sign": "",
193
214
  "take": "",
194
215
  "release": ""
195
216
  };
196
217
 
197
218
  var icons = {
219
+ "edit": "pen",
198
220
  "forward": "check",
199
221
  "reject": "cross",
200
222
  "commit": "check",
@@ -202,69 +224,93 @@
202
224
  "take": "exclamation",
203
225
  "release": "globe"
204
226
  };
205
- var actions = ["forward", "reject","commit", "sign", "take", "release"];
206
- actions = ["release"];
227
+ var actions = ["edit", "forward", "reject","commit", "sign", "take"];
207
228
 
208
229
  scrivito.gui.on('document', function(cms_document) {
209
- //console.log('adding release button');
210
- var obj = cms_document.page();
230
+ var page_config = (cms_document.page_config() || {})['current_page'] || {};
231
+ var obj = cms_document.page();
232
+ var buttons = page_config['buttons'] || [];
233
+ var workflow_enabled = page_config['workflow'];
234
+
235
+ if (cms_document.browser_window().name !== 'scrivito_application') {
236
+ // TODO: add special handling for scrivito_details_dialog and scrivito_inspector
237
+ return;
238
+ }
239
+
240
+ /* release button */
241
+ scrivito.page_menu(cms_document).add('fiona7.idx'+99+'.release_obj', {
242
+ title: scrivito.t('commands.release_obj.title'),
243
+ icon: icons['release'],
244
+
245
+ present: function() {
246
+ return scrivito.editing_context.selected_workspace.is_editable() && obj && (!workflow_enabled || (buttons.indexOf('release') !== -1));
247
+ },
211
248
 
212
- _.each(actions, function(action,idx) {
249
+ disabled: function() {
250
+ if (!obj.modification()) {
251
+ return scrivito.t('commands.release_obj.not_modified_obj');
252
+ }
253
+ if (obj.has_restriction()) {
254
+ return obj.restriction_messages().join("; ");
255
+ }
256
+ },
257
+
258
+ update: function() {
259
+ return obj.reload();
260
+ },
261
+
262
+ execute: function() {
263
+ open_release_dialog(obj.id()).done(function(objIds, comment) {
264
+ scrivito.with_saving_overlay(scrivito.ajax('PUT', 'objs/release', {data: {objs: objIds, comment: comment}}).then(function() {
265
+ scrivito.reload();
266
+ }));
267
+ });
268
+ }
269
+ });
270
+ /* TODO: enforce permissions */
271
+
272
+ /* TODO: better sorting */
273
+
274
+ /* disable editing */
275
+ setTimeout(function (){
276
+ if (page_config['editing_disabled']) {
277
+ scrivito.editing_mode.disable(scrivito.t('editing_disabled.workflow'));
278
+ } else {
279
+ scrivito.editing_mode.enable();
280
+ }
281
+ }, 0);
282
+
283
+ /* add workflow buttons */
284
+ $.each(actions, function(idx, action) {
213
285
  scrivito.page_menu(cms_document).add('fiona7.idx'+idx+'.'+action+'_obj', {
214
286
  title: scrivito.t('commands.'+action+'_obj.title'),
215
287
  icon: icons[action],
216
288
 
217
289
  present: function() {
218
- return scrivito.editing_context.selected_workspace.is_editable() && obj;// && !obj.is_deleted() && scrivito.user_permissions.can(action + '_obj');
219
- },
220
-
221
- disabled: function() {
222
- if (action == 'release' && !obj.modification()) {
223
- return scrivito.t('commands.release_obj.not_modified_obj');
224
- }
225
- if (action == 'release' && obj.has_restriction()) {
226
- return obj.restriction_messages().join("; ");
227
-
228
- }
229
- },
230
-
231
- update: function() {
232
- return obj.reload();
290
+ return buttons.indexOf(action) !== -1;
233
291
  },
234
292
 
235
293
  execute: function() {
236
- open_release_dialog(obj.id()).done(function(objIds, comment) {
237
- scrivito.with_saving_overlay(scrivito.ajax('PUT', 'objs/release', {data: {objs: objIds, comment: comment}}).then(function() {
238
- scrivito.reload();
294
+ open_confirmation_dialog(action, dialog_icons[action]).done(function(comment) {
295
+ scrivito.with_saving_overlay(scrivito.ajax('PUT', 'objs/workflow/'+action, {data: {id: obj.id(), comment: comment}}).then(function() {
296
+ if (action == 'edit' || action == 'take') {
297
+
298
+ if (!scrivito.editing_context.is_editing_mode()) {
299
+ return scrivito.with_saving_overlay(
300
+ scrivito.change_editing_context({display_mode: 'editing', workspace_id: 'rtc'}));
301
+ } else {
302
+ return scrivito.with_saving_overlay(scrivito.reload());
303
+ }
304
+ } else {
305
+ return scrivito.with_saving_overlay(scrivito.reload());
306
+ }
239
307
  }));
240
308
  });
241
309
  }
242
310
  });
243
311
  });
244
312
 
245
-
246
- //var menu = cms_document.menu();
247
- //menu.push(scrivito.command_separator.create_instance({id: 'fiona7.zz_sparator'}));
248
- //cms_document.set_menu(menu);
249
-
250
- //scrivito.configure_menu_order(['fiona7.*', '*']);
251
313
  });
252
314
 
253
315
  return;
254
-
255
- /* enforce permissions */
256
- var originalGuiStart = scrivito.gui.start;
257
- scrivito.gui.start = function () {
258
- originalGuiStart.call(this, arguments);
259
- if (scrivito.in_editable_view()) {
260
- if (!scrivito.user_permissions.can('write_obj')) {
261
- $('.switch_to_view_mode').click();
262
- }
263
- } else {
264
- if (!scrivito.user_permissions.can('write_obj')) {
265
- $('.scrivito_viewmode_editing').remove();
266
- }
267
- }
268
- };
269
-
270
316
  }());
@@ -22,8 +22,29 @@
22
22
  params.filename = params.filename.replace(/[^\w\-_\.$]/g, '-');
23
23
 
24
24
  return $.extend(params, {is_uploaded_binary: true});
25
+ },
26
+
27
+ copy_binary: function(id, obj_id, attr_name, params) {
28
+ assert_valid_params(params);
29
+
30
+ return _.extend({
31
+ is_copied_binary: true,
32
+ id_to_copy: id,
33
+ obj_id: obj_id,
34
+ attr_name: attr_name
35
+ }, params);
25
36
  }
26
37
  }
27
38
  });
28
39
 
40
+
41
+ var assert_valid_params = function(params) {
42
+ if (_.has(params, 'filename') && !params.filename) {
43
+ $.error('filename cannot be blank');
44
+ }
45
+
46
+ if (_.has(params, 'content_type') && !params.content_type) {
47
+ $.error('content_type cannot be blank');
48
+ }
49
+ };
29
50
  }());
@@ -201,7 +201,7 @@
201
201
  var current_page = scrivito.application_document().page();
202
202
  var path = (typeof current_page.provided_path === 'function') && current_page.provided_path();
203
203
  params = {};
204
- params['_path'] = path;
204
+ params['parent_path'] = path;
205
205
  }
206
206
  return scrivito.obj.fetch_class_selection('objs/page_class_selection', params);
207
207
  },
@@ -46,8 +46,12 @@ module Fiona7
46
46
  end
47
47
 
48
48
  def carefully_release(errors, obj, comment=nil)
49
- obj.take
50
- obj.release!(comment) if obj.really_edited?
49
+ if obj.really_edited?
50
+ # we don't care much if this fails
51
+ obj.take
52
+ obj.release!(comment)
53
+ ::Fiona7.run_callbacks(:release_obj, obj.id)
54
+ end
51
55
 
52
56
  complex_object = Fiona7::ComplexObject.new(obj)
53
57
  complex_object.widgets.each do |widget_obj|
@@ -42,6 +42,9 @@ module Fiona7
42
42
  Reactor::Sudo.su(Fiona7.root) do
43
43
  Reactor::Cm::User.new(login).has_password?(password)
44
44
  end
45
+ rescue Reactor::Cm::XmlRequestError => e
46
+ Rails.logger.error("Error logging in: #{e.message}")
47
+ false
45
48
  end
46
49
  end
47
50
  end
@@ -0,0 +1,46 @@
1
+ module Fiona7
2
+ class WorkflowController < ActionController::Base
3
+ def edit
4
+ workflow_action('edit')
5
+ end
6
+
7
+ def take
8
+ workflow_action('take')
9
+ end
10
+
11
+ def forward
12
+ workflow_action('forward')
13
+ end
14
+
15
+ def commit
16
+ workflow_action('commit')
17
+ end
18
+
19
+ def sign
20
+ workflow_action('sign')
21
+ end
22
+
23
+ def reject
24
+ workflow_action('reject')
25
+ end
26
+
27
+ protected
28
+ def workflow_action(action)
29
+ @obj = WriteObj.find(params[:id])
30
+ @comment = params[:comment]
31
+
32
+ if action == 'edit'
33
+ # TODO: this should be implemented in reactor.
34
+ @obj.edit!(@comment)
35
+ else
36
+ @obj.workflow.send(:"#{action}!", @comment)
37
+ end
38
+
39
+ render json: {}
40
+ rescue => e
41
+ Rails.logger.error("Error #{e.inspect} when executing workflow operation on #{@obj.id} with comment=#{@comment}")
42
+ render json: {message: e.message, message_for_editor: e.message}, status: 412
43
+ end
44
+
45
+ end
46
+ end
@@ -1,4 +1,20 @@
1
1
  module Fiona7LoginHelper
2
+ def fiona7_login_path
3
+ fiona7_engine.fiona7_login_path
4
+ end
5
+
6
+ def fiona7_login_url
7
+ fiona7_engine.fiona7_login_url
8
+ end
9
+
10
+ def fiona7_logout_path
11
+ fiona7_engine.fiona7_logout_path
12
+ end
13
+
14
+ def fiona7_logout_url
15
+ fiona7_engine.fiona7_logout_url
16
+ end
17
+
2
18
  def fiona7_logged_in?
3
19
  rsession.user?
4
20
  end
@@ -31,7 +31,7 @@ module Fiona7OverrideHelper
31
31
  raise "This method can only be used in legacy mode" unless Fiona7.mode == :legacy
32
32
 
33
33
  obj_or_widget = obj_or_widget.kind_of?(RailsConnector::BasicObj) ? obj_or_widget.scrivito_obj : obj_or_widget
34
- scrivito_tag(tag_name, obj_or_widget, field_name, html_options, editing_options = {}, &block)
34
+ scrivito_tag(tag_name, obj_or_widget, field_name, html_options, editing_options, &block)
35
35
  end
36
36
 
37
37
  def fiona7_tag_list(tag_name, obj, field_name, options = {}, &block)
@@ -0,0 +1 @@
1
+ Scrivito::PresetRoutes.install_delayed
@@ -0,0 +1,92 @@
1
+ Rails.application.routes.draw do
2
+ mount Fiona7::Engine, at: '/', as: :fiona7_engine
3
+ mount Scrivito::SdkEngine, at: '/', as: :scrivito_engine
4
+ end
5
+
6
+ Fiona7::Engine.routes.draw do
7
+ get '/_b/:id(/:name)' => 'fiona7/blobs#show', as: :fiona7_blob
8
+
9
+ match '/_b/:id(/:name)' => 'fiona7/blobs#query', as: :fiona7_blob_meta, via: [:head]
10
+
11
+ post '/_f7/login', to: 'fiona7/sessions#create', as: :fiona7_login
12
+
13
+ delete '/_f7/logout', to: 'fiona7/sessions#destroy', as: :fiona7_logout
14
+
15
+ put '/__scrivito/objs/release(.:format)', to: 'fiona7/release#release', as: :fiona7_release
16
+
17
+ put '/__scrivito/objs/workflow/edit(.:format)', to: 'fiona7/workflow#edit', as: :fiona7_workflow_edit
18
+ put '/__scrivito/objs/workflow/take(.:format)', to: 'fiona7/workflow#take', as: :fiona7_workflow_take
19
+ put '/__scrivito/objs/workflow/forward(.:format)', to: 'fiona7/workflow#forward', as: :fiona7_workflow_forward
20
+ put '/__scrivito/objs/workflow/commit(.:format)', to: 'fiona7/workflow#commit', as: :fiona7_workflow_commit
21
+ put '/__scrivito/objs/workflow/sign(.:format)', to: 'fiona7/workflow#sign', as: :fiona7_workflow_sign
22
+ put '/__scrivito/objs/workflow/reject(.:format)', to: 'fiona7/workflow#reject', as: :fiona7_workflow_reject
23
+
24
+
25
+ get '/__scrivito/objs/:id/release/preview(.:format)', to: 'fiona7/release#preview', as: :fiona7_release_preview
26
+ end
27
+
28
+ Scrivito::SdkEngine.routes.draw do
29
+ get 'scrivito', to: 'scrivito/ui#index'
30
+ get 'scrivito/*application_path', to: 'scrivito/ui#index', format: false
31
+
32
+ scope '__scrivito', module: 'scrivito' do
33
+ get ':id', to: 'cms_dispatch#index', as: :base_id, constraints: {id: /\h{4,}/}
34
+
35
+ resources :objs, controller: 'objs', only: [:show, :create, :update, :destroy],
36
+ defaults: {format: :json} do
37
+ collection do
38
+ get :page_class_selection
39
+ get :search
40
+ end
41
+
42
+ member do
43
+ get :widget
44
+ get :widget_class_selection
45
+ get :widget_modification
46
+ get :conflicting_workspaces
47
+ get :is_outdated
48
+ get :binary_no_cache
49
+
50
+ post :copy
51
+ post :duplicate
52
+
53
+ put :revert
54
+ put :restore
55
+ put :mark_resolved
56
+ put :revert_widget
57
+ put :restore_widget
58
+ put :transfer_modifications
59
+ end
60
+ end
61
+
62
+ resources :tasks, controller: 'tasks', only: [:show], defaults: {format: :json}
63
+
64
+ get 'blobs/upload_permission' => 'blobs#upload_permission', defaults: {format: :json}
65
+ put 'blobs/activate_upload' => 'blobs#activate_upload', defaults: {format: :json}
66
+ put 'blobs/copy' => 'blobs#copy', defaults: {format: :json}
67
+
68
+ resources :workspaces,
69
+ controller: 'workspaces',
70
+ only: [:index, :show, :create, :destroy],
71
+ defaults: {format: :json} do
72
+ member do
73
+ put :rename
74
+ put :memberships
75
+ put :rebase
76
+ put :publish
77
+ get :check
78
+ end
79
+ end
80
+
81
+ get 'users/suggest' => 'users#suggest', defaults: {format: :json}
82
+ get 'suggest_completion' => 'completion#suggest', defaults: {format: :json}
83
+
84
+ get 'render_widget/:id/show_widget/:widget_id' => 'cms_dispatch#show_widget'
85
+ get 'render_widget/:id/widget_details/:widget_id' => 'cms_dispatch#widget_details'
86
+
87
+ get 'page_details/:id' => 'cms_dispatch#page_details'
88
+ get 'resource_details/:resource_id', to: 'ui#index'
89
+
90
+ get 'to_binary' => 'binary_redirect#to_binary', as: :binary
91
+ end
92
+ end