infopark_fiona7 1.2.0.2.3 → 1.5.2.0.0
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 +4 -4
- data/Rakefile +33 -0
- data/app/assets/javascripts/fiona7_ui.js +82 -23
- data/app/assets/javascripts/scrivito_patches/ajax.js +222 -0
- data/app/assets/javascripts/scrivito_patches/ajax_error_handling.js +24 -0
- data/app/assets/javascripts/scrivito_patches/attribute_serializer.js +259 -0
- data/app/assets/javascripts/scrivito_patches/base_obj_path.js +17 -0
- data/app/assets/javascripts/scrivito_patches/binary_utils.js +33 -0
- data/app/assets/javascripts/scrivito_patches/cms_rest_api.js +490 -0
- data/app/assets/javascripts/scrivito_patches/models/api/basic_obj.js +650 -0
- data/app/assets/javascripts/scrivito_patches/models/binary_field_element.js +53 -0
- data/app/assets/javascripts/scrivito_patches/models/obj.js +74 -239
- data/app/assets/javascripts/scrivito_patches/obj_serializer.js +91 -0
- data/app/assets/stylesheets/fiona7.css.scss +12 -0
- data/app/assets/stylesheets/fiona7_ui.css.scss +18 -0
- data/app/controllers/fiona7/api_controller.rb +20 -0
- data/app/controllers/fiona7/sessions_controller.rb +2 -10
- data/app/controllers/fiona7_login_page_controller.rb +0 -3
- data/app/controllers/scrivito/obj_class_controller.rb +58 -0
- data/app/controllers/scrivito/objs_controller.rb +2 -38
- data/app/helpers/fiona7_override_helper.rb +25 -0
- data/app/views/fiona7/release/preview.html.erb +1 -1
- data/app/views/fiona7_login_page/index.html.erb +0 -6
- data/app/views/scrivito/ui/index.html.erb +2 -1
- data/app/views/scrivito/webservice/_workspace.json.jbuilder +8 -0
- data/config/locales/errors.yml +18 -0
- data/config/locales/workflow.yml +24 -0
- data/config/precedence_routes.rb +7 -14
- data/infopark_fiona7.gemspec +6 -4
- data/lib/fiona7/assert.rb +2 -2
- data/lib/fiona7/attribute_readers/factory.rb +4 -0
- data/lib/fiona7/attribute_type_mapper.rb +4 -1
- data/lib/fiona7/attribute_writers/binary_as_binary.rb +2 -2
- data/lib/fiona7/attribute_writers/binary_as_linklist.rb +2 -2
- data/lib/fiona7/attribute_writers/factory.rb +4 -0
- data/lib/fiona7/builder/indirect_blob_builder.rb +2 -2
- data/lib/fiona7/builder/lazy_blob_copier.rb +1 -1
- data/lib/fiona7/builder/obj_builder.rb +45 -12
- data/lib/fiona7/controllers/rest_api/error_handler.rb +49 -0
- data/lib/fiona7/controllers/rest_api/obj_controller.rb +34 -20
- data/lib/fiona7/controllers/rest_api/session_controller.rb +13 -0
- data/lib/fiona7/engine.rb +7 -10
- data/lib/fiona7/facet_builder.rb +5 -1
- data/lib/fiona7/naive_search_engine.rb +9 -0
- data/lib/fiona7/routers/rest_api.rb +17 -0
- data/lib/fiona7/scrivito_patches/attribute_content.rb +28 -0
- data/lib/fiona7/scrivito_patches/cms_routing.rb +14 -31
- data/lib/fiona7/scrivito_patches/page_config.rb +1 -0
- data/lib/fiona7/scrivito_user.rb +3 -2
- data/lib/fiona7/type_register.rb +4 -0
- data/lib/fiona7/verity_search_engine.rb +6 -17
- data/lib/fiona7/version.rb +1 -1
- data/lib/fiona7/workspace.rb +2 -0
- metadata +28 -14
- data/app/assets/javascripts/scrivito_patches/models/ajax.js +0 -99
- 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
|
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
|
-
|
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
|
'/'
|
@@ -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.
|
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>
|
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
|
+
|