infopark_fiona7 1.2.0.2.3 → 1.5.2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +33 -0
  3. data/app/assets/javascripts/fiona7_ui.js +82 -23
  4. data/app/assets/javascripts/scrivito_patches/ajax.js +222 -0
  5. data/app/assets/javascripts/scrivito_patches/ajax_error_handling.js +24 -0
  6. data/app/assets/javascripts/scrivito_patches/attribute_serializer.js +259 -0
  7. data/app/assets/javascripts/scrivito_patches/base_obj_path.js +17 -0
  8. data/app/assets/javascripts/scrivito_patches/binary_utils.js +33 -0
  9. data/app/assets/javascripts/scrivito_patches/cms_rest_api.js +490 -0
  10. data/app/assets/javascripts/scrivito_patches/models/api/basic_obj.js +650 -0
  11. data/app/assets/javascripts/scrivito_patches/models/binary_field_element.js +53 -0
  12. data/app/assets/javascripts/scrivito_patches/models/obj.js +74 -239
  13. data/app/assets/javascripts/scrivito_patches/obj_serializer.js +91 -0
  14. data/app/assets/stylesheets/fiona7.css.scss +12 -0
  15. data/app/assets/stylesheets/fiona7_ui.css.scss +18 -0
  16. data/app/controllers/fiona7/api_controller.rb +20 -0
  17. data/app/controllers/fiona7/sessions_controller.rb +2 -10
  18. data/app/controllers/fiona7_login_page_controller.rb +0 -3
  19. data/app/controllers/scrivito/obj_class_controller.rb +58 -0
  20. data/app/controllers/scrivito/objs_controller.rb +2 -38
  21. data/app/helpers/fiona7_override_helper.rb +25 -0
  22. data/app/views/fiona7/release/preview.html.erb +1 -1
  23. data/app/views/fiona7_login_page/index.html.erb +0 -6
  24. data/app/views/scrivito/ui/index.html.erb +2 -1
  25. data/app/views/scrivito/webservice/_workspace.json.jbuilder +8 -0
  26. data/config/locales/errors.yml +18 -0
  27. data/config/locales/workflow.yml +24 -0
  28. data/config/precedence_routes.rb +7 -14
  29. data/infopark_fiona7.gemspec +6 -4
  30. data/lib/fiona7/assert.rb +2 -2
  31. data/lib/fiona7/attribute_readers/factory.rb +4 -0
  32. data/lib/fiona7/attribute_type_mapper.rb +4 -1
  33. data/lib/fiona7/attribute_writers/binary_as_binary.rb +2 -2
  34. data/lib/fiona7/attribute_writers/binary_as_linklist.rb +2 -2
  35. data/lib/fiona7/attribute_writers/factory.rb +4 -0
  36. data/lib/fiona7/builder/indirect_blob_builder.rb +2 -2
  37. data/lib/fiona7/builder/lazy_blob_copier.rb +1 -1
  38. data/lib/fiona7/builder/obj_builder.rb +45 -12
  39. data/lib/fiona7/controllers/rest_api/error_handler.rb +49 -0
  40. data/lib/fiona7/controllers/rest_api/obj_controller.rb +34 -20
  41. data/lib/fiona7/controllers/rest_api/session_controller.rb +13 -0
  42. data/lib/fiona7/engine.rb +7 -10
  43. data/lib/fiona7/facet_builder.rb +5 -1
  44. data/lib/fiona7/naive_search_engine.rb +9 -0
  45. data/lib/fiona7/routers/rest_api.rb +17 -0
  46. data/lib/fiona7/scrivito_patches/attribute_content.rb +28 -0
  47. data/lib/fiona7/scrivito_patches/cms_routing.rb +14 -31
  48. data/lib/fiona7/scrivito_patches/page_config.rb +1 -0
  49. data/lib/fiona7/scrivito_user.rb +3 -2
  50. data/lib/fiona7/type_register.rb +4 -0
  51. data/lib/fiona7/verity_search_engine.rb +6 -17
  52. data/lib/fiona7/version.rb +1 -1
  53. data/lib/fiona7/workspace.rb +2 -0
  54. metadata +28 -14
  55. data/app/assets/javascripts/scrivito_patches/models/ajax.js +0 -99
  56. data/app/assets/javascripts/scrivito_patches/models/blob.js +0 -50
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ (function () {
4
+ scrivito.ObjSerializer = {
5
+ serialize: function serialize(objId, attrs) {
6
+ var promise = serializeWidgetPool(objId, attrs._widget_pool).then(function (widgetPool) {
7
+ return serializeAttrs(objId, attrs).then(function (serializedAttrs) {
8
+ if (widgetPool) {
9
+ serializedAttrs._widget_pool = widgetPool;
10
+ }
11
+ return serializedAttrs;
12
+ });
13
+ });
14
+
15
+ return scrivito.promise.wrapInJqueryDeferred(promise);
16
+ },
17
+
18
+ serializeValue: function serializeValue(value) {
19
+ if (_.isDate(value)) {
20
+ return moment.utc(value).toISOString();
21
+ }
22
+
23
+ return value;
24
+ }
25
+ };
26
+
27
+ function serializeWidgetPool(objId, widgetPool) {
28
+ if (widgetPool) {
29
+ var promises = _.map(widgetPool, function (attrs, widgetId) {
30
+ return serializeAttrs(objId, attrs).then(function (serializedAttrs) {
31
+ return [widgetId, serializedAttrs];
32
+ });
33
+ });
34
+
35
+ return scrivito.Promise.all(promises).then(function (serializedWidgetPool) {
36
+ return _.object(serializedWidgetPool);
37
+ });
38
+ }
39
+
40
+ return scrivito.Promise.resolve(widgetPool);
41
+ }
42
+
43
+ function serializeAttrs(objId, attrs) {
44
+ var promises = _.map(attrs, function (attrValue, attrName) {
45
+ return serializeAttr(objId, attrName, attrValue);
46
+ });
47
+
48
+ return scrivito.Promise.all(promises).then(function (serializedAttrs) {
49
+ return _.object(serializedAttrs);
50
+ });
51
+ }
52
+
53
+ function serializeAttr(objId, attrName, attrValue) {
54
+ if (scrivito.BinaryUtils.isFile(attrValue) || scrivito.BinaryUtils.isBlob(attrValue)) {
55
+ return serializeFile(objId, attrName, attrValue);
56
+ }
57
+
58
+ if (attrValue instanceof scrivito.UploadedBlob) {
59
+ return serializeUploadedBlob(objId, attrName, attrValue);
60
+ }
61
+
62
+ if (attrValue instanceof scrivito.FutureBinary) {
63
+ return serializeFutureBinary(objId, attrName, attrValue);
64
+ }
65
+
66
+ return scrivito.Promise.resolve([attrName, scrivito.ObjSerializer.serializeValue(attrValue)]);
67
+ }
68
+
69
+ function serializeFile(objId, attrName, file) {
70
+ return scrivito.Promise.resolve([attrName, file]); // <-- PATCH HERE
71
+ }
72
+
73
+ function serializeUploadedBlob(objId, attrName, uploadedBlob) {
74
+ return serializeFutureBinary(objId, attrName, uploadedBlob.copy());
75
+ }
76
+
77
+ function serializeFutureBinary(objId, attrName, futureBinary) {
78
+ if (futureBinary.idToCopy) {
79
+ // blob copy/rename
80
+ var blob = {
81
+ id_to_copy: futureBinary.idToCopy
82
+ };
83
+ if (futureBinary.filename) blob.filename = futureBinary.filename;
84
+ if (futureBinary.contentType) blob.content_type = futureBinary.contentType;
85
+ return scrivito.Promise.resolve([attrName, blob]);
86
+ } else if (futureBinary.source) {
87
+ // normal upload
88
+ return scrivito.Promise.resolve([attrName, { blob_to_upload: futureBinary.source, filename: futureBinary.filename }]);
89
+ }
90
+ }
91
+ })();
@@ -49,3 +49,15 @@ body.scrivito_widget_dragging_active[data-scrivito-display-mode="editing"] *[dat
49
49
  .scrivito_editing_marker {
50
50
  padding: 0 !important;
51
51
  }
52
+
53
+ .scrivito_dialog .workflow.dropdown {
54
+ float: right;
55
+ margin-bottom: 5px;
56
+ button.dropdown-toggle {
57
+ width: 160px;
58
+ }
59
+ }
60
+ .scrivito_dialog .workflow.dropdown:hover .dropdown-menu {
61
+ display: block;
62
+ margin: 0;
63
+ }
@@ -1,3 +1,4 @@
1
+ /*
1
2
  body > div.scrivito_topbar > div > div.scrivito_button_bar.scrivito_app.scrivito_no_hover {
2
3
  width: 170px !important;
3
4
  }
@@ -8,6 +9,23 @@ body > div.scrivito_topbar > div > div.scrivito_button_bar.scrivito_app.scrivito
8
9
  top: 0px;
9
10
  left: 0px;
10
11
  }
12
+ */
13
+
14
+ @mixin fiona_logo() {
15
+ background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+PHN2ZyB2ZXJzaW9uPSIxLjAiIGlkPSJFYmVuZV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDEwMCAyOC42IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMjguNiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PGc+PHBhdGggZmlsbD0iI0NDMDAwMCIgZD0iTTAsMHYxNy40aDI2LjhjMS4zLDAsMi41LTEuMSwyLjUtMi40VjIuNGMwLTEuMy0xLjEtMi40LTIuNS0yLjRIMHoiLz48cGF0aCBmaWxsPSIjRkZGRkZGIiBkPSJNMTMuNSw4LjljMC0wLjQsMC40LTAuNywwLjctMC43bDAsMGwwLDBoMS42djUuOGgtMi40VjguOUwxMy41LDguOXogTTE2LjUsNWMwLTAuNy0wLjUtMS4zLTEuOC0xLjNDMTMuOCwzLjcsMTMsNCwxMyw1LjFjMCwwLjcsMC40LDEuMywxLjcsMS4zQzE1LjcsNi40LDE2LjUsNi4xLDE2LjUsNUwxNi41LDV6IE0yMC4zLDZjMC45LDAsMS41LDAuNywxLjUsMS42bDAsMGMwLDAuOS0wLjYsMS42LTEuNSwxLjZoLTIuOXYyLjFoMy4xYzIuMywwLDMuNS0xLjgsMy41LTMuOGMwLTItMS4zLTMuOC0zLjctMy44aC0xLjNjLTAuNCwwLTAuNywwLjMtMC43LDAuN1Y2TDIwLjMsNkwyMC4zLDZ6Ii8+PGc+PHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTM3LjYsNS4xYy0xLDAtMS40LTAuNC0xLjQtMWMwLTAuOSwwLjYtMS4xLDEuNC0xLjFjMSwwLDEuNCwwLjQsMS40LDFDMzksNC44LDM4LjQsNS4xLDM3LjYsNS4xeiBNMzksNy42VjE0YzAsMC44LTAuNCwxLjItMS40LDEuMmMtMS4yLDAtMS40LTAuNS0xLjQtMS41VjcuM2MwLTAuNywwLjQtMS4yLDEtMS4yaDAuNkMzOC42LDYuMSwzOSw2LjYsMzksNy42eiIvPjwvZz48Zz48cGF0aCBmaWxsPSIjRkZGRkZGIiBkPSJNNDguNSw4Ljl2NS40YzAsMC43LTAuNSwxLTEuMSwxSDQ3Yy0wLjYsMC0xLTAuMy0xLTF2LTMuN2MwLTEuNi0wLjUtMi40LTEuNS0yLjRjLTEsMC0xLjUsMC44LTEuNSwyLjV2My42YzAsMC43LTAuNSwxLTEuMSwxaC0wLjRjLTAuNiwwLTEtMC4zLTEtMS4xVjcuNGMwLTAuNywwLjQtMSwxLjItMWMwLjcsMCwxLjMsMC4yLDEuNywwLjJjMC44LDAsMS4xLTAuNCwyLjMtMC40QzQ3LjUsNi4yLDQ4LjUsNi45LDQ4LjUsOC45eiIvPjwvZz48Zz48cGF0aCBmaWxsPSIjRkZGRkZGIiBkPSJNNTMuMiw5LjJWMTRjMCwwLjgtMC40LDEuMi0xLjMsMS4yYy0wLjksMC0xLjQtMC4zLTEuNC0xLjJWOS40YzAtMS42LTEuMy0xLjMtMS4zLTIuMmMwLTAuNiwwLjUtMC43LDEtMS4yYzAuMi0wLjIsMC4yLTAuNSwwLjUtMS41QzUwLjksNCw1MS40LDMsNTIuOSwzaDAuN2MwLjcsMCwxLjIsMC40LDEuMiwwLjljMCwwLjQsMC4xLDAuOC0wLjUsMS4xYy0wLjYsMC4zLTAuNywwLjUtMC43LDAuN2MwLDAuMywwLjEsMC40LDAuNiwwLjdjMC40LDAuMiwwLjYsMC41LDAuNiwwLjdjMCwwLjYtMC45LDAuOC0xLjIsMUM1My40LDguMyw1My4yLDguNyw1My4yLDkuMnoiLz48L2c+PGc+PHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTU5LjgsMTUuNGMtMi42LDAtNC43LTEuNi00LjctNC42YzAtMy4yLDIuMy00LjYsNC44LTQuNmMyLjIsMCw0LjgsMS4yLDQuOCw0LjZDNjQuNywxMy40LDYzLjEsMTUuNCw1OS44LDE1LjR6IE01OS45LDEzLjZjMS4zLDAsMi4zLTEuMiwyLjMtMi45YzAtMS41LTAuOC0yLjgtMi4zLTIuOGMtMS4zLDAtMi4zLDEtMi4zLDIuOEM1Ny42LDEyLjQsNTguNSwxMy42LDU5LjksMTMuNnoiLz48L2c+PGc+PHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTc0LjEsMTAuNmMwLDMtMS4zLDQuNy0zLjcsNC43Yy0wLjcsMC0xLjQtMC4yLTEuNi0wLjJjLTAuNiwwLTAuOSwwLjMtMC45LDEuNGMwLDEuMy0wLjIsMS43LTEuMiwxLjdjLTAuOSwwLTEuMi0wLjQtMS4yLTEuMlY3LjRjMC0wLjcsMC4zLTEsMS4xLTFjMC42LDAsMSwwLjIsMS41LDAuMmMwLjcsMCwwLjktMC40LDIuMi0wLjRDNzIuNiw2LjIsNzQuMSw3LjksNzQuMSwxMC42eiBNNjkuOCwxMy43YzEuOSwwLDIuMS0yLjQsMi4xLTMuMWMwLTEuNS0wLjctMi44LTItMi44Yy0xLjIsMC0yLjEsMS4xLTIuMSwzQzY3LjgsMTIuNSw2OC42LDEzLjcsNjkuOCwxMy43eiIvPjwvZz48Zz48cGF0aCBmaWxsPSIjRkZGRkZGIiBkPSJNODEuNiwxNS4yYy0wLjcsMC0xLjEtMC4zLTEuNS0wLjNjLTAuOCwwLTEuNCwwLjYtMi41LDAuNmMtMS45LDAtMy0xLjEtMy0yLjZjMC0xLjUsMS4zLTIuNyw0LjEtMy4xYzEuMi0wLjEsMS41LTAuNiwxLjUtMWMwLTAuNy0wLjYtMS4xLTEuMi0xLjFjLTEuMywwLTEuMiwxLjEtMi43LDEuMWMtMC41LDAtMS0wLjEtMS0wLjdjMC0wLjYsMC43LTEuOSwzLjUtMS45YzIuNCwwLDMuOSwwLjYsMy45LDN2NS4yQzgyLjYsMTUsODIuMiwxNS4yLDgxLjYsMTUuMnogTTc4LjMsMTMuN2MwLjksMCwxLjgtMC44LDEuOC0xLjdjMC0wLjQtMC4yLTAuOC0wLjktMC44Yy0wLjcsMC0yLjIsMC41LTIuMiwxLjVDNzcuMSwxMy4yLDc3LjYsMTMuNyw3OC4zLDEzLjd6Ii8+PC9nPjxnPjxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik04OC41LDYuM2MwLjYsMCwwLjksMC4zLDAuOSwxYzAsMC44LTAuMiwxLjItMS4yLDEuNWMtMC45LDAuMy0xLjQsMC45LTEuNCwxLjd2My41YzAsMC45LTAuMywxLjMtMS4xLDEuM2gtMC43Yy0wLjcsMC0xLTAuNS0xLTEuNFY3LjRjMC0wLjksMC4zLTEuMywxLjMtMS4zYzEuMSwwLDEuNSwwLjQsMS45LDAuNEM4Ny44LDYuNSw4OCw2LjMsODguNSw2LjN6Ii8+PC9nPjxnPjxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik05Ny44LDEzLjljMC4yLDAuMywwLjMsMC42LDAuMywwLjhjMCwwLjQtMC4zLDAuNi0xLDAuNmMtMC44LDAtMS40LTAuMy0xLjctMC44bC0wLjktMS41Yy0wLjMtMC42LTAuNy0wLjgtMS0wLjhjLTAuNSwwLTEuMSwwLjQtMS4xLDEuN2MwLDAuOS0wLjIsMS40LTEuMiwxLjRjLTAuOSwwLTEuMi0wLjQtMS4yLTEuMlY0LjVjMC0wLjcsMC4zLTEuMSwxLjItMS4xYzAuOCwwLDEuMiwwLjMsMS4yLDEuMWMwLDMuNywwLDQuMiwwLjYsNC4yYzAuMiwwLDAuNC0wLjEsMS4xLTAuN2MwLDAsMC4yLTAuMiwwLjYtMC42YzAuNC0wLjQsMC42LTAuNiwwLjctMC42YzAuMy0wLjIsMC43LTAuMiwxLjMtMC4yaDAuMmMwLjUsMCwwLjgsMC4yLDAuOCwwLjVjMCwwLjItMC4xLDAuNC0wLjMsMC43TDk2LDljLTAuMywwLjQtMC40LDAuNy0wLjQsMC45YzAsMC4zLDAuMSwwLjYsMC4yLDAuN0w5Ny44LDEzLjl6Ii8+PC9nPjwvZz48dGV4dCB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDY1LjI3MjggMjYuODM3MSkiIGZpbGw9IiNDQ0NDQ0MiIGZvbnQtZmFtaWx5PSInSGVsdmV0aWNhJyIgZm9udC1zaXplPSIxMCI+RmlvbmEgNzwvdGV4dD48L3N2Zz4=);
16
+ background-size:contain;
17
+ background-repeat: no-repeat;
18
+ }
19
+
20
+ .scrivito_topbar .scrivito_button_bar .scrivito_logo {
21
+ display:block;padding:0;
22
+ height:30px;
23
+ width:105px;
24
+ position:absolute;
25
+ left:0;
26
+ top:8px;
27
+ @include fiona_logo;
28
+ }
11
29
 
12
30
  .scrivito_menu_box #scrivito_sdk_workspace_settings, .scrivito_menu_box #scrivito_sdk_rename_workspace, .scrivito_menu_box #scrivito_sdk_rebase_workspace, .scrivito_menu_box #scrivito_sdk_delete_workspace, .scrivito_menu_box #scrivito_sdk_create_workspace {
13
31
  display: none;
@@ -0,0 +1,20 @@
1
+ require 'fiona7/controllers/rest_api/error_handler'
2
+
3
+ module Fiona7
4
+ class ApiController < ActionController::Base
5
+ def perform
6
+ path = params[:path].to_s
7
+ verb = params[:verb].to_s.downcase.to_sym
8
+ payload = params[:params]
9
+
10
+ render json: Scrivito::CmsRestApi.task_unaware_request(verb, path, payload)
11
+ rescue *Fiona7::ErrorHandler::HANDLED_ERRORS => e
12
+ message = Fiona7::ErrorHandler.new(e).api_error
13
+ render json: {error: message}, status: 422
14
+ rescue Scrivito::ApplicationError => e
15
+ render json: {error: e.message}, status: e.http_code
16
+ rescue Scrivito::ClientError => e
17
+ render json: {error: e.message}, status: 422
18
+ end
19
+ end
20
+ end
@@ -7,7 +7,7 @@ module Fiona7
7
7
  if valid_credentials?(login, password)
8
8
  rsession.user_name = login
9
9
 
10
- redirect_to login_redirect
10
+ redirect_to true_root_path
11
11
  else
12
12
  flash[:error] = I18n.t(:"fiona7.invalid_credentails")
13
13
  begin
@@ -20,11 +20,7 @@ module Fiona7
20
20
 
21
21
  def destroy
22
22
  rsession.destroy
23
- begin
24
- redirect_to :back
25
- rescue ActionController::RedirectBackError
26
- redirect_to true_root_path
27
- end
23
+ redirect_to true_root_path
28
24
  end
29
25
 
30
26
  protected
@@ -32,10 +28,6 @@ module Fiona7
32
28
  @login_page = Fiona7LoginPage.instance || Scrivito::BasicObj.root
33
29
  end
34
30
 
35
- def login_redirect
36
- session[:login_redirect].presence || true_root_path
37
- end
38
-
39
31
  def true_root_path
40
32
  if Fiona7.mode == :standalone
41
33
  '/'
@@ -18,9 +18,6 @@ class Fiona7LoginPageController < parent_class
18
18
  end
19
19
 
20
20
  def index
21
- if request.referrer.present?
22
- session[:login_redirect] ||= request.referrer
23
- end
24
21
  super
25
22
  end
26
23
 
@@ -0,0 +1,58 @@
1
+ module Scrivito
2
+ class ObjClassController < WebserviceController
3
+ def defaults
4
+ obj_class_name = params.fetch(:obj_class_name)
5
+ obj_class = fetch_obj_class(obj_class_name)
6
+ if obj_class
7
+ attributes = params.fetch(:attributes, {}).merge(_obj_class: obj_class.to_s) # <-- PATCH HERE
8
+ defaults = obj_class.build_attributes_with_defaults(
9
+ attributes, scrivito_user: scrivito_user)
10
+ @defaults = computed_nested_attributes(defaults, obj_class)
11
+ else
12
+ raise ResourceNotFound, %{The obj class "#{obj_class_name}" is not available.}
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def computed_nested_attributes(defaults, obj_class)
19
+ widget_attributes = {}
20
+ other_attributes = {}
21
+
22
+ defaults.each do |name, value|
23
+ next if value.nil?
24
+
25
+ attribute_type = obj_class.attribute_definitions[name].try(:type)
26
+ if attribute_type == 'widgetlist'
27
+ widgets = value.map do |new_widget|
28
+ computed_nested_attributes(new_widget.attributes_to_be_saved, new_widget.class)
29
+ end
30
+
31
+ widget_attributes[name] = ['widgetlist', widgets]
32
+ elsif attribute_type != 'binary'
33
+ other_attributes[name] = value
34
+ end
35
+ end
36
+
37
+ other_attributes = serialize(other_attributes, obj_class)
38
+
39
+ widget_attributes.merge(other_attributes).merge(_obj_class: obj_class.to_s) # <-- PATCH HERE
40
+ end
41
+
42
+ def serialize(attributes, obj_class)
43
+ serializer = AttributeSerializer.new(obj_class)
44
+
45
+ serializer.serialize(attributes, obj_class.attribute_definitions)
46
+ end
47
+
48
+ def fetch_obj_class(obj_class_name)
49
+ compute_type(Widget, obj_class_name) || compute_type(Obj, obj_class_name)
50
+ end
51
+
52
+ def compute_type(base_class, obj_class_name)
53
+ base_class.type_computer.compute_type_without_fallback(obj_class_name)
54
+ rescue ObjClassNotFound
55
+ nil
56
+ end
57
+ end
58
+ end
@@ -1,12 +1,8 @@
1
1
  module Scrivito
2
2
  class ObjsController < WebserviceController
3
3
  around_action :require_selected_workspace_write_authorization, only: [
4
- :copy,
5
4
  :create,
6
5
  :destroy,
7
- :destroy_widget,
8
- :duplicate,
9
- :mark_resolved,
10
6
  :restore,
11
7
  :restore_widget,
12
8
  :revert,
@@ -15,9 +11,7 @@ module Scrivito
15
11
  ]
16
12
 
17
13
  before_filter :require_identical_selected_and_visible_workspace, only: [
18
- :copy,
19
14
  :create,
20
- :duplicate,
21
15
  :page_class_selection,
22
16
  :update,
23
17
  :widget_class_selection,
@@ -38,8 +32,7 @@ module Scrivito
38
32
  rescue ObjClassNotFound => e
39
33
  raise ClientError.new(
40
34
  "You've tried to create a CMS object based on the \"#{e.message}\" class, which is "\
41
- "either missing or not suitable for the object.",
42
- 400
35
+ "either missing or not suitable for the object."
43
36
  )
44
37
  end
45
38
 
@@ -62,11 +55,6 @@ module Scrivito
62
55
  end
63
56
  end
64
57
 
65
- def destroy_widget
66
- in_selected_workspace { current_widget.destroy }
67
- render_empty_json
68
- end
69
-
70
58
  def revert
71
59
  in_selected_workspace { current_obj.revert }
72
60
  render_empty_json
@@ -88,14 +76,10 @@ module Scrivito
88
76
  end
89
77
 
90
78
  def conflicting_workspaces
91
- @workspaces = []
79
+ @workspaces = selected_workspace.conflict_warning_for(params[:id])
92
80
  render :workspaces
93
81
  end
94
82
 
95
- def is_outdated
96
- @is_outdated = false
97
- end
98
-
99
83
  def binary_no_cache
100
84
  in_selected_workspace do
101
85
  binary = current_obj[params[:attribute_name]]
@@ -103,16 +87,6 @@ module Scrivito
103
87
  end
104
88
  end
105
89
 
106
- def mark_resolved
107
- in_selected_workspace { current_obj.mark_resolved }
108
- render_empty_json
109
- end
110
-
111
- def copy
112
- @obj = copy_obj(current_obj, params[:parent_path])
113
- render :obj
114
- end
115
-
116
90
  def transfer_modifications
117
91
  in_selected_workspace do
118
92
  begin
@@ -129,11 +103,6 @@ module Scrivito
129
103
  end
130
104
  end
131
105
 
132
- def duplicate
133
- @obj = copy_obj(current_obj, current_obj.parent_path)
134
- render :obj
135
- end
136
-
137
106
  def page_class_selection
138
107
  @page_class_markup = valid_page_classes.map do |page_class_name|
139
108
  build_selection_option(page_class_name)
@@ -214,11 +183,6 @@ module Scrivito
214
183
  @widget
215
184
  end
216
185
 
217
- def copy_obj(obj, parent_path)
218
- id = SecureRandom.hex(8)
219
- obj.copy(_id: id, _path: parent_path && "#{parent_path}/#{id}")
220
- end
221
-
222
186
  def fetch_formatter(name)
223
187
  name ? Configuration.obj_formats[name] : proc { |obj, _| obj.id }
224
188
  end
@@ -27,6 +27,31 @@ module Fiona7OverrideHelper
27
27
  scrivito_body_tags
28
28
  end
29
29
 
30
+ def fiona7_workflow_buttons
31
+ locale = Scrivito::Configuration.ui_locale || I18n.locale
32
+ tt = lambda {|action|
33
+ I18n.t(:"fiona7.workflow.#{action}", locale: locale)
34
+ }
35
+ # TODO: add translation
36
+ html = <<-EOHTML
37
+ <div class="btn-group workflow dropdown">
38
+ <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
39
+ #{tt['actions']} <span class="caret"></span>
40
+ </button>
41
+ <ul class="dropdown-menu">
42
+ <li class="disabled" data-fiona7-private-workflow-button="edit" disabled><a href="#">#{tt['edit']}</a></li>
43
+ <li class="disabled" data-fiona7-private-workflow-button="take" disabled><a href="#">#{tt['take']}</a></li>
44
+ <li class="disabled" data-fiona7-private-workflow-button="forward" disabled><a href="#">#{tt['forward']}</a></li>
45
+ <li class="disabled" data-fiona7-private-workflow-button="commit" disabled><a href="#">#{tt['commit']}</a></li>
46
+ <li class="disabled" data-fiona7-private-workflow-button="sign" disabled><a href="#">#{tt['sign']}</a></li>
47
+ <li class="disabled" data-fiona7-private-workflow-button="reject" disabled><a href="#">#{tt['reject']}</a></li>
48
+ <li class="disabled" data-fiona7-private-workflow-button="release" disabled><a href="#">#{tt['release']}</a></li>
49
+ </ul>
50
+ </div>
51
+ EOHTML
52
+ html.html_safe
53
+ end
54
+
30
55
  def fiona7_tag(tag_name, obj_or_widget, field_name, html_options = {}, editing_options = {}, &block)
31
56
  raise "This method can only be used in legacy mode" unless Fiona7.mode == :legacy
32
57
 
@@ -1,7 +1,7 @@
1
1
  <div class="scrivito_prompt_dialog scrivito_center_dialog scrivito_modal_prompt scrivito_green scrivito_show" style="margin-left: -250px; margin-top: -165px; left: 50%;">
2
2
  <div class="scrivito_modal_header">
3
3
  <i class="scrivito_icon"></i>
4
- <h3 class="scrivito_title"><%= t(:"fiona7.release.config", locale: current_locale) %></h3>
4
+ <h3 class="scrivito_title"><%= t(:"fiona7.release.confirm", locale: current_locale) %></h3>
5
5
 
6
6
  <p class="scrivito_description"><%= t(:"fiona7.release.description", locale: current_locale) %></p>
7
7
 
@@ -1,12 +1,6 @@
1
1
  <%= scrivito_tag :h1, @obj, :title %>
2
2
  <%= scrivito_tag :div, @obj, :body %>
3
3
 
4
- <% if flash[:error].present? %>
5
- <div class="alert alert-danger" role="alert">
6
- <%= flash[:error] %>
7
- </div>
8
- <% end %>
9
-
10
4
  <%= form_tag fiona7_login_path, role: 'form' do %>
11
5
  <div class="form-group">
12
6
  <%= label_tag :login, t(:"fiona7.login_field") %>
@@ -1,12 +1,13 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
- <title>Fiona7</title>
4
+ <title>Fiona 7</title>
5
5
  <%= stylesheet_link_tag 'scrivito_ui' %>
6
6
  <%= stylesheet_link_tag 'fiona7_ui' %>
7
7
  <%= javascript_include_tag 'scrivito_ui' %>
8
8
  <%= javascript_include_tag 'scrivito_ui_extensions' %>
9
9
  <%= javascript_include_tag 'fiona7_ui' %>
10
+ <%= csrf_meta_tags %>
10
11
  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
11
12
  </head>
12
13
  <body id="scrivito_ui">
@@ -0,0 +1,8 @@
1
+ json.extract! workspace, :id, :title
2
+ json.is_accessible can_user_read_workspace?(workspace)
3
+ json.outdated workspace.outdated?
4
+
5
+ json.memberships workspace.memberships do |membership|
6
+ json.extract! membership, :user_id, :role
7
+ json.description membership.user.description
8
+ end
@@ -0,0 +1,18 @@
1
+ de:
2
+ fiona7:
3
+ errors:
4
+ not_permitted: "Ihnen fehlen die Rechte um diese Aktion auszuführen."
5
+ missing_credentials: "Ihre Sitzung ist abgelaufen. Bitte laden Sie die Seite erneut und melden Sie Sich an."
6
+ no_working_version: "Die Datei hat keine Arbeitsversion. Überprüfen Sie, ob Sie eine gültige Datei bearbeiten wollen."
7
+ already_released: "Die Datei wurde bereits freigegeben."
8
+ type_system: "Fehler in der Attributedefinitionen gefunden. Bitte wenden Sie sich an den technischen Ansprechpartner."
9
+
10
+ en:
11
+ fiona7:
12
+ errors:
13
+ not_permitted: "You are lacking the permissions required for this action."
14
+ missing_credentials: "Your session has expired. Please refresh the page and login again."
15
+ no_working_version: "This object has no working version. Please check if you are editing a valid object."
16
+ already_released: "The object has already been released."
17
+ type_system: "Type system errror. Please contact the responsible technician."
18
+