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.
- 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
|
+
|