64 Commits

Author SHA1 Message Date
70b36d9f55 added configured pwa module 2021-03-30 17:06:12 +02:00
5fb69e008d responsive: blabla ok, pricing first page ok 2021-03-30 16:43:56 +02:00
d72e102cc5 responsive: base ok 2021-03-30 15:42:40 +02:00
2f1636dfd4 more respnsive: header hamburger done, started base 2021-03-29 22:28:24 +02:00
d170979b42 full header-right responsive hamburger menu ok for logged-in users 2021-03-29 11:57:26 +02:00
5df8c9829a full header-right responsive hamburger menu ok for unlogged-in users 2021-03-29 11:43:37 +02:00
1733ad128a started full header-right responsive hamburger menu 2021-03-26 16:48:47 +01:00
f6130faa7c responsive: home pricing 2021-03-25 21:37:03 +01:00
63fdc0061f responcive: home quite ok 2021-03-25 19:38:15 +01:00
89286d2610 responcive: flag collection in content left 2021-03-19 21:52:36 +01:00
4d1299387a responcive: better header 2021-03-19 21:38:28 +01:00
8cb32b1b48 replaced :hover by @media(hover: hover) 2021-03-19 16:42:09 +01:00
c9edaaf3c4 converted responsive to @include col-mediaquery-max(3) 2021-03-19 16:21:18 +01:00
5188b01272 responsive: fixed the grid for small screens 2021-03-19 16:08:46 +01:00
b4ebb1cf3f forgot the web font files in dist/static/ 2021-03-19 16:08:14 +01:00
e7a773dc0f import mdi in main.scss instead of drupal theme library 2021-03-19 16:06:06 +01:00
5ffacc45ed started responsive UI: header 2021-03-18 23:13:50 +01:00
1862f2922e translation config files 2021-03-18 22:05:37 +01:00
50f76ff0cd added samples to flagcollection and linked material in thematique 2021-03-18 21:58:59 +01:00
406d215a04 images styles generation notice fix 2021-03-17 19:24:09 +01:00
d553146450 images styles generation notice fix 2021-03-17 19:21:01 +01:00
8964b94b9f images styles generation custom module 2021-03-17 18:56:01 +01:00
9bae6d15ff twiked user page tabs 2021-03-11 23:14:16 +01:00
ce1beb7278 removed persistent_login module 2021-03-11 21:52:36 +01:00
ec6ab0dc7b translated delete folder dialog, added closed event 2021-03-11 19:53:56 +01:00
88445b4397 better flagcolls list display 2021-03-11 19:14:20 +01:00
df71378e5f added folder deletion confirmation 2021-03-11 19:00:09 +01:00
e0f8b123f9 added note picto to medium Card responding to note creation on modalCard 2021-03-10 14:54:58 +01:00
fbf509a005 another display for modalcard accordeon, displaying note icon on mediumcard and refresh it updated in modale 2021-03-10 11:54:08 +01:00
4894f88c6d updated mdi package, note icon is changing ifthere is a note 2021-03-09 22:52:29 +01:00
98002d0296 def settings for user_email_verification 2021-03-09 22:07:31 +01:00
637b1d9bf0 replaced user_registrationpassword by user_email_verification 2021-03-09 21:26:35 +01:00
b992c1c667 updated socials links 2021-03-09 21:00:07 +01:00
5ec39a5f0a fixed registerform loading bug 2021-03-09 17:03:38 +01:00
8af88af806 added user_registrationpassword 2021-03-09 16:46:59 +01:00
bc48c9e876 cleaned materio_gqp, fixed gql linked_materials bad language 2021-03-09 16:35:48 +01:00
86670565ba autologout settings 2021-03-09 15:25:08 +01:00
c5c3da9a46 added social media links 2021-03-09 15:24:49 +01:00
e29bed914c modalcard accordeon improved 2021-03-09 14:53:22 +01:00
a1bff5d4b8 click on themacard image open thema, not lightbox 2021-03-09 14:29:28 +01:00
f89c29a8b9 blabla: click on whole article card open it 2021-03-09 11:35:00 +01:00
1ec8a371b5 fix #1008, create folder from card and auto flag it 2021-03-08 22:04:50 +01:00
d1e54b72b3 updating header menu while loggin (show base link) 2021-03-08 21:11:14 +01:00
b7459cf014 improved translation links update 2021-03-08 18:45:19 +01:00
488447fbe1 fixed prev next links in article page for new route using id 2021-03-08 15:01:09 +01:00
d4957ad19a restored redis from 1.5 2021-03-08 14:47:35 +01:00
88f7b8c285 getpathtranslation invalid path temporary workarround 2021-03-08 14:43:43 +01:00
7e460b9764 getpathtranslation invalid path temporary workarround 2021-03-08 14:41:22 +01:00
30b2c9267b downgraded redis from 1.5 to 1.4 2021-03-08 14:14:23 +01:00
ee908b4603 fixed language switcher update on vue route change 2021-03-06 22:02:48 +01:00
8dadb8d3a5 replaced path+route_load navigation by id nav for articles and thematiques 2021-03-06 16:46:19 +01:00
651315c319 restrict base search and default base to current language 2021-03-05 21:32:59 +01:00
820bfcf85a patched core for configimporter->checkop delete on null 2021-03-05 12:09:02 +01:00
596525328c added visuel display on thematique page 2021-03-05 11:44:54 +01:00
ee81e5fe18 removed user devel perms 2021-03-05 11:40:50 +01:00
c7ce594ee4 patched unique_content_field_validation 2021-03-04 11:32:39 +01:00
e0bb0d378a added unique_content_field_validation 2021-03-04 11:08:27 +01:00
5383719450 added lang param to graphql thematique load 2021-03-04 10:52:46 +01:00
284037ad69 ran composer update 2021-03-04 10:44:31 +01:00
b6c6851837 forgot the graphql patch file 2021-03-03 17:58:35 +01:00
6485e3e27b fixed thematiques display 2021-03-03 17:55:32 +01:00
72ea56e313 patched contrib graphql fixed Invalid translation language 2021-03-03 17:54:54 +01:00
c767654dc6 enabled thematique translation, article title translation, misc 2021-03-03 16:57:04 +01:00
11f6848d59 reinstalled composer as lock and json wher not sync 2021-03-03 16:47:06 +01:00
152 changed files with 51544 additions and 23926 deletions

1
.gitignore vendored
View File

@ -28,6 +28,7 @@
node_modules/
*.patch
~/patches/*.patch
/.csslintrc
/.eslintrc.json
/.ht.router.php

View File

@ -59,6 +59,16 @@ module.exports = {
test: /\.(graphql|gql)$/,
exclude: /node_modules/,
loader: 'graphql-tag/loader'
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
use: {
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
}
// {
// test: /\.graphql?$/,
@ -92,15 +102,6 @@ module.exports = {
// name: utils.assetsPath('media/[name].[hash:7].[ext]')
// }
// }
// }, {
// test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
// use: {
// loader: 'url-loader',
// options: {
// limit: 10000,
// name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
// }
// }
// }
// {
// test: /\.css$/,

View File

@ -12,26 +12,28 @@ module.exports = merge(baseConfig, {
{
test: /\.css$/,
use: [
// process.env.NODE_ENV !== 'production'
// ? 'vue-style-loader'
// : MiniCssExtractPlugin.loader,
MiniCssExtractPlugin.loader,
// 'vue-style-loader',
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '',
},
},
'css-loader'
]
}, {
test: /\.scss$/,
use: [
// process.env.NODE_ENV !== 'production'
// ? 'vue-style-loader'
// : MiniCssExtractPlugin.loader,
MiniCssExtractPlugin.loader,
// 'vue-style-loader',
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '',
},
},
'css-loader',
'sass-loader'
]
}, {
test: /\.(png|jpg|gif)$/,
test: /\.(png|jpg|gif|svg)$/,
use: [
{
loader: 'url-loader',

View File

@ -13,18 +13,28 @@ module.exports = merge(baseConfig, {
{
test: /\.css?$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '',
},
},
'css-loader'
]
}, {
test: /\.scss?$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '',
},
},
'css-loader',
'sass-loader'
]
}, {
test: /\.(png|jpg|gif)$/,
test: /\.(png|jpg|gif|svg)$/,
use: [
{
loader: 'url-loader',

View File

@ -66,7 +66,9 @@
"drupal/payment_commerce": "2.x-dev@dev",
"drupal/permissions_filter": "^1.1",
"drupal/printable": "^2.0",
"drupal/pwa": "^1.5",
"drupal/recurring_period": "^1.0",
"drupal/redis": "^1.5",
"drupal/restui": "^1.16",
"drupal/search_api": "^1.19",
"drupal/search_api_autocomplete": "^1.2",
@ -74,6 +76,7 @@
"drupal/search_api_solr": "^4.1",
"drupal/select_translation": "^1.x-dev",
"drupal/simplenews": "^1.x-dev",
"drupal/social_media_links": "^2.8",
"drupal/string_translation_ui": "^1.2",
"drupal/strings_i18n_json_export": "1.x-dev@dev",
"drupal/subrequests": "^2.0",
@ -82,7 +85,9 @@
"drupal/translate_side_by_side": "^1.x-dev",
"drupal/translation_views": "^1.x-dev",
"drupal/ultimate_cron": "^2.x-dev",
"drupal/unique_content_field_validation": "^1.0",
"drupal/url_to_video_filter": "^2.0",
"drupal/user_email_verification": "1.x-dev@dev",
"drupal/views_conditional": "^1.x-dev",
"drupal/views_ef_fieldset": "^1.5",
"drush/drush": "^9",
@ -154,7 +159,9 @@
"patches": {
"drupal/core": {
"migrate_drupal getsetting on null" : "https://www.drupal.org/files/issues/2019-02-13/migrate_drupal-getsetting_on_null.patch",
"language negociation exeption https://www.drupal.org/project/drupal/issues/3134349" : "https://www.drupal.org/files/issues/2020-06-02/3134349-9.patch"
"language negociation exeption https://www.drupal.org/project/drupal/issues/3134349" : "https://www.drupal.org/files/issues/2020-06-02/3134349-9.patch",
"Cannot save translated nodes after upgrading to 8.8 due to invalid path https://www.drupal.org/project/drupal/issues/3101344":"https://www.drupal.org/files/issues/2021-03-01/3101344-drupal-core-fix-permissions-checking-while-node-translating-64.patch",
"ConfigImporter->checkOp() https://www.drupal.org/project/drupal/issues/3198715": "https://www.drupal.org/files/issues/2021-02-16/error-running-config-import-delete-on-null-3198715-3.patch"
},
"drupal/email_registration": {
"allow email login through REST https://www.drupal.org/project/email_registration/issues/2856542": "https://www.drupal.org/files/issues/allow_authentication-2856542-3.patch"
@ -175,6 +182,12 @@
"drupal/flag_lists": {
"make the related_flag id unique https://www.drupal.org/project/flag_lists/issues/3200737": "https://www.drupal.org/files/issues/2021-02-27/hasactions%2Buniqflagid.patch",
"check for flag before delete https://www.drupal.org/project/flag_lists/issues/3200997":"https://www.drupal.org/files/issues/2021-03-01/delete-missing-flag_0.patch"
},
"drupal/graphql": {
"Invalid translation language https://github.com/drupal-graphql/graphql/issues/1175": "./patches/graphql-fix-invalid-translation-language.patch"
},
"drupal/unique_content_field_validation": {
"Do not validate against empty fields https://www.drupal.org/project/unique_content_field_validation/issues/3201576": "https://www.drupal.org/files/issues/2021-03-04/unique_validation-empty_field.patch"
}
},
"drupal-scaffold": {

1104
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -5,4 +5,6 @@ error_handlers:
rebuild_theme: false
debug_mail_file_format: '%to-%subject-%datetime.mail.txt'
debug_mail_directory: 'temporary://devel-mails'
devel_dumper: default
devel_dumper: kint
debug_logfile: 'temporary://drupal_debug.txt'
debug_pre: false

View File

@ -1,3 +1,3 @@
enabled: false
timeout: null
url: ''
timeout: 60
url: /

View File

@ -1,3 +1,3 @@
enabled: false
timeout: null
url: ''
timeout: 60
url: /

View File

@ -9,7 +9,7 @@ inactivity_message: ''
enforce_admin: false
jstimer_format: '%hours%:%mins%:%secs%'
jstimer_js_load_option: false
use_alt_logout_method: false
use_alt_logout_method: true
use_watchdog: true
langcode: fr
_core:

View File

@ -11,7 +11,7 @@ dependencies:
id: header
theme: materiotheme
region: header_right
weight: -1
weight: -2
provider: null
plugin: 'menu_block:header'
settings:

View File

@ -9,12 +9,12 @@ dependencies:
id: languageswitcher
theme: materiotheme
region: header_right
weight: 0
weight: -1
provider: null
plugin: 'language_block:language_interface'
settings:
id: 'language_block:language_interface'
label: Language
label: Langue
provider: language
label_display: visible
visibility: { }

View File

@ -0,0 +1,140 @@
uuid: f3053235-8080-4c5a-b6df-800f3c16eaac
langcode: fr
status: true
dependencies:
module:
- context
- social_media_links
theme:
- materiotheme
id: socialmedialinks
theme: materiotheme
region: header_right
weight: -5
provider: null
plugin: social_media_links_block
settings:
id: social_media_links_block
label: 'Social Media Links'
provider: social_media_links
label_display: '0'
platforms:
website:
value: ''
description: ''
weight: '-10'
instagram:
value: materio_fr
description: ''
weight: '-9'
xing:
value: ''
description: ''
weight: '-8'
contact:
value: ''
description: ''
weight: '-7'
rss:
value: ''
description: ''
weight: '-6'
bitbucket:
value: ''
description: ''
weight: '-5'
vkontakte:
value: ''
description: ''
weight: '-4'
slideshare:
value: ''
description: ''
weight: '-3'
github:
value: ''
description: ''
weight: '-2'
behance:
value: ''
description: ''
weight: '-1'
vimeo:
value: materio
description: ''
weight: '0'
linkedin:
value: ''
description: ''
weight: '1'
youtube_channel:
value: UChKuhMq9rSfLqUmPc9dEgXw
description: ''
weight: '2'
googleplus:
value: ''
description: ''
weight: '3'
facebook:
value: ''
description: ''
weight: '4'
drupal:
value: ''
description: ''
weight: '5'
flickr:
value: ''
description: ''
weight: '6'
gitlab:
value: ''
description: ''
weight: '7'
tumblr:
value: ''
description: ''
weight: '8'
youtube:
value: ''
description: ''
weight: '9'
pinterest:
value: ''
description: ''
weight: '10'
email:
value: ''
description: ''
weight: '11'
twitter:
value: ''
description: ''
weight: '12'
whatsapp:
value: ''
description: ''
weight: '13'
appearance:
orientation: h
show_name: 0
suggestion: ''
link_attributes:
target: _blank
rel: nofollow
iconset:
style: 'fontawesome:fw'
installed_iconsets:
fontawesome:
examples: ''
visibility:
view_inclusion:
id: view_inclusion
negate: null
view_inclusion: { }
context_mapping: { }
request_path_exclusion:
id: request_path_exclusion
pages: ''
negate: null
context_mapping: { }

View File

@ -10,7 +10,7 @@ dependencies:
id: userblock
theme: materiotheme
region: header_right
weight: -2
weight: -3
provider: null
plugin: user_block
settings:

View File

@ -9,12 +9,12 @@ dependencies:
id: userlogin
theme: materiotheme
region: header_right
weight: -3
weight: -4
provider: null
plugin: user_login_block
settings:
id: user_login_block
label: 'Member Access'
label: 'Accès membre'
provider: user
label_display: visible
visibility: { }

View File

@ -0,0 +1,20 @@
uuid: 4c4d32da-e167-4429-a6a8-e64919f1fd4d
langcode: fr
status: true
dependencies:
module:
- commerce_promotion
id: commerce_promotion.commerce_promotion.description
field_name: description
entity_type: commerce_promotion
bundle: commerce_promotion
label: Description
description: 'Additional information about the promotion to show to the customer'
required: false
translatable: false
default_value:
-
value: ''
default_value_callback: ''
settings: { }
field_type: string_long

View File

@ -0,0 +1,18 @@
uuid: 12d95ee0-8fd9-4dd7-8646-4bd9b9e7f3ec
langcode: fr
status: true
dependencies:
module:
- commerce_promotion
id: commerce_promotion.commerce_promotion.display_name
field_name: display_name
entity_type: commerce_promotion
bundle: commerce_promotion
label: 'Nom de l''affichage'
description: 'If provided, shown on the order instead of "Discount".'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: string

View File

@ -0,0 +1,18 @@
uuid: 4ff81977-7ace-494e-8561-8780f3621fac
langcode: fr
status: true
dependencies:
module:
- commerce_promotion
id: commerce_promotion.commerce_promotion.name
field_name: name
entity_type: commerce_promotion
bundle: commerce_promotion
label: Nom
description: 'The promotion name.'
required: true
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: string

View File

@ -0,0 +1,20 @@
uuid: ac9a43ee-8971-4ee3-9c49-77b678bad732
langcode: fr
status: true
dependencies:
config:
- commerce_store.commerce_store_type.online
id: commerce_store.online.uid
field_name: uid
entity_type: commerce_store
bundle: online
label: Propriétaire
description: 'The store owner.'
required: false
translatable: false
default_value: { }
default_value_callback: 'Drupal\commerce_store\Entity\Store::getDefaultEntityOwner'
settings:
handler: default
handler_settings: { }
field_type: entity_reference

View File

@ -0,0 +1,20 @@
uuid: 707b2946-6937-4a85-8b0f-396f57489133
langcode: fr
status: true
dependencies:
module:
- flag_lists
id: flag_list_item.flag_list_item.user_id
field_name: user_id
entity_type: flag_list_item
bundle: flag_list_item
label: 'Écrit par'
description: 'The user ID of author of the Flag list item entity.'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
handler: default
handler_settings: { }
field_type: entity_reference

View File

@ -0,0 +1,20 @@
uuid: 836a8431-ec09-4de1-9cd4-817f7f3a3300
langcode: fr
status: true
dependencies:
config:
- flag_lists.flagging_collection_type.flagging_collection_type_1
id: flagging_collection.flagging_collection_type_1.relatedflag
field_name: relatedflag
entity_type: flagging_collection
bundle: flagging_collection_type_1
label: 'Related flag'
description: 'The related flag used for for this list'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
handler: default
handler_settings: { }
field_type: entity_reference

View File

@ -0,0 +1,20 @@
uuid: 3609dd9c-85eb-4dc4-b4da-e48836e465a5
langcode: fr
status: true
dependencies:
config:
- flag_lists.flagging_collection_type.flagging_collection_type_1
id: flagging_collection.flagging_collection_type_1.templateflag
field_name: templateflag
entity_type: flagging_collection
bundle: flagging_collection_type_1
label: 'Base flag'
description: 'The flag list used as base'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
handler: default
handler_settings: { }
field_type: entity_reference

View File

@ -0,0 +1,20 @@
uuid: aa598ce7-ab62-4640-9873-67b0fe7c8053
langcode: fr
status: true
dependencies:
config:
- flag_lists.flagging_collection_type.flagging_collection_type_1
id: flagging_collection.flagging_collection_type_1.user_id
field_name: user_id
entity_type: flagging_collection
bundle: flagging_collection_type_1
label: 'Écrit par'
description: 'The user ID of author of the Flagging collection entity.'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
handler: default
handler_settings: { }
field_type: entity_reference

View File

@ -11,7 +11,7 @@ bundle: article
label: Title
description: ''
required: true
translatable: false
translatable: true
default_value: { }
default_value_callback: ''
settings: { }

View File

@ -0,0 +1,18 @@
uuid: 3b80477e-49b4-4a1d-9165-d85ad36cda6e
langcode: fr
status: true
dependencies:
config:
- node.type.note
id: node.note.changed
field_name: changed
entity_type: node
bundle: note
label: Modifié
description: 'Le moment auquel le nœud a été modifié pour la dernière fois.'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: changed

View File

@ -0,0 +1,18 @@
uuid: f4eed5e6-7ec6-4991-92be-092087488907
langcode: fr
status: true
dependencies:
config:
- node.type.note
id: node.note.created
field_name: created
entity_type: node
bundle: note
label: 'Écrit le'
description: 'L''heure à laquelle le nœud a été créé.'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: created

View File

@ -0,0 +1,20 @@
uuid: e5a701d1-82a0-4c3b-8a5f-70e6fe74f236
langcode: fr
status: true
dependencies:
config:
- node.type.note
id: node.note.menu_link
field_name: menu_link
entity_type: node
bundle: note
label: 'Lien du menu'
description: 'Lien de menu calculé pour le nœud (disponible uniquement pendant l''enregistrement du nœud).'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
handler: default
handler_settings: { }
field_type: entity_reference

View File

@ -0,0 +1,20 @@
uuid: 70429bd7-83c2-4142-9afd-7038d65737e4
langcode: fr
status: true
dependencies:
config:
- node.type.note
module:
- path
id: node.note.path
field_name: path
entity_type: node
bundle: note
label: 'Alias d''URL'
description: ''
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: path

View File

@ -11,7 +11,7 @@ bundle: note
label: 'Promu en page d''accueil'
description: ''
required: false
translatable: true
translatable: false
default_value:
-
value: 0

View File

@ -0,0 +1,22 @@
uuid: e0ae92d3-b724-419e-a7ba-d1c4fbe4fdb3
langcode: fr
status: true
dependencies:
config:
- node.type.note
id: node.note.status
field_name: status
entity_type: node
bundle: note
label: Publié
description: ''
required: false
translatable: false
default_value:
-
value: 1
default_value_callback: ''
settings:
on_label: Activé
off_label: Désactivé
field_type: boolean

View File

@ -0,0 +1,22 @@
uuid: 19fa2240-8974-4c93-91d6-76391f11fb43
langcode: fr
status: true
dependencies:
config:
- node.type.note
id: node.note.sticky
field_name: sticky
entity_type: node
bundle: note
label: 'Epinglé en haut des listes'
description: ''
required: false
translatable: false
default_value:
-
value: 0
default_value_callback: ''
settings:
on_label: Activé
off_label: Désactivé
field_type: boolean

View File

@ -0,0 +1,18 @@
uuid: ed044201-dbd5-4b0f-a092-65eb12e699fc
langcode: fr
status: true
dependencies:
config:
- node.type.note
id: node.note.title
field_name: title
entity_type: node
bundle: note
label: Titre
description: ''
required: true
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: string

View File

@ -0,0 +1,20 @@
uuid: c4e1fa5b-1fcc-4a06-bc89-df7f3c5b6257
langcode: fr
status: true
dependencies:
config:
- node.type.note
id: node.note.uid
field_name: uid
entity_type: node
bundle: note
label: 'Écrit par'
description: 'Le nom d''utilisateur de l''auteur du contenu.'
required: false
translatable: false
default_value: { }
default_value_callback: 'Drupal\node\Entity\Node::getDefaultEntityOwner'
settings:
handler: default
handler_settings: { }
field_type: entity_reference

View File

@ -11,7 +11,7 @@ bundle: thematique
label: Title
description: ''
required: true
translatable: false
translatable: true
default_value: { }
default_value_callback: ''
settings: { }

View File

@ -23,7 +23,6 @@ third_party_settings:
children:
- group_content
- group_media
- group_internal
- group_taxonomy
- group_links
parent_name: ''
@ -93,29 +92,29 @@ third_party_settings:
formatter: closed
required_fields: true
label: Links
group_internal:
group_sidebar:
children:
- field_memo
- uid
- status
- langcode
- created
- flag
- promote
- sticky
- path
- url_redirects
- field_memo
parent_name: group_htabs
weight: 21
format_type: tab
parent_name: ''
weight: 20
format_type: details_sidebar
region: hidden
format_settings:
description: ''
open: true
weight: 0
required_fields: true
id: ''
classes: ''
description: ''
formatter: closed
required_fields: true
label: Internal
label: internal
id: node.thematique.default
targetEntityType: node
bundle: thematique
@ -198,10 +197,10 @@ content:
third_party_settings: { }
langcode:
type: language_select
weight: 22
weight: 0
region: content
settings:
include_locked: true
include_locked: false
third_party_settings: { }
path:
type: path
@ -238,6 +237,11 @@ content:
size: 60
placeholder: ''
third_party_settings: { }
translation:
weight: 10
region: content
settings: { }
third_party_settings: { }
uid:
type: entity_reference_autocomplete
weight: 20

View File

@ -92,6 +92,7 @@ module:
image_delta_formatter: 0
image_effects: 0
imagemagick: 0
images_styles_gen: 0
inline_entity_form: 0
interval: 0
jquery_ui: 0
@ -143,11 +144,11 @@ module:
pathologic: 0
pdf_api: 0
permissions_filter: 0
persistent_login: 0
plugin: 0
printable: 0
printable_pdf: 0
profile: 0
pwa: 0
recurring_period: 0
redirect: 0
redis: 0
@ -163,6 +164,7 @@ module:
simplenews: 0
smart_trim: 0
smtp: 0
social_media_links: 0
sophron: 0
state_machine: 0
string_translation_ui: 0
@ -182,9 +184,11 @@ module:
translation_views: 0
typed_data: 0
ultimate_cron: 0
unique_content_field_validation: 0
update: 0
url_to_video_filter: 0
user: 0
user_email_verification: 0
video_embed_field: 0
video_embed_wysiwyg: 0
views_bulk_edit: 0

View File

@ -1,3 +1,51 @@
definitions: { }
definitions:
editors_menus__materials:
weight: -50
menu_name: editors
parent: editors_menus.contents
enabled: true
expanded: false
editors_menus__articles:
weight: -48
menu_name: editors
parent: editors_menus.contents
expanded: false
enabled: true
editors_menus__thesaurus:
weight: -47
menu_name: editors
parent: editors_menus.contents
expanded: false
enabled: true
editors_menus__tags:
weight: -46
menu_name: editors
parent: editors_menus.contents
expanded: false
enabled: true
editors_menus__assisted_research:
weight: -45
menu_name: editors
parent: editors_menus.contents
expanded: false
enabled: true
editors_menus__companies:
weight: -44
menu_name: editors
parent: editors_menus.contents
expanded: false
enabled: true
editors_menus__showrooms:
weight: -43
menu_name: editors
parent: editors_menus.contents
expanded: false
enabled: true
editors_menus__newsletters:
weight: -42
menu_name: editors
parent: editors_menus.contents
expanded: false
enabled: true
_core:
default_config_hash: jdY7AU0tU-QsjmiOw3W8vwpYMb-By--_MSFgbqKUTYM

View File

@ -10,10 +10,18 @@ extlink_include: ''
extlink_class: ext
extlink_label: '(link is external)'
extlink_img_class: false
extlink_css_exclude: ''
extlink_css_exclude: .social-media-links--platforms
extlink_css_explicit: ''
extlink_mailto_class: mailto
extlink_mailto_label: '(link sends email)'
_core:
default_config_hash: rHbHZIIF9TP3H2Vs37uCHz4Gm4phULg0rQ_OKihxJfM
extlink_exclude_admin_routes: false
extlink_use_external_js_file: false
extlink_noreferrer: false
extlink_use_font_awesome: false
extlink_icon_placement: '0'
extlink_font_awesome_classes:
links: 'fa fa-external-link'
mailto: 'fa fa-envelope-o'
whitelisted_domains: { }

View File

@ -6,6 +6,14 @@ dependencies:
- field.storage.node.field_linked_articles
- node.type.article
- node.type.materiau
module:
- unique_content_field_validation
third_party_settings:
unique_content_field_validation:
unique: false
unique_text: ''
unique_multivalue: true
unique_multivalue_text: '%value appears more than once in %label'
id: node.materiau.field_linked_articles
field_name: field_linked_articles
entity_type: node

View File

@ -5,6 +5,14 @@ dependencies:
config:
- field.storage.node.field_linked_materials
- node.type.materiau
module:
- unique_content_field_validation
third_party_settings:
unique_content_field_validation:
unique: false
unique_text: ''
unique_multivalue: true
unique_multivalue_text: '%value appears more than once in %label'
id: node.materiau.field_linked_materials
field_name: field_linked_materials
entity_type: node

View File

@ -14,7 +14,7 @@ bundle: thematique
label: Body
description: ''
required: false
translatable: false
translatable: true
default_value: { }
default_value_callback: ''
settings:

View File

@ -6,6 +6,14 @@ dependencies:
- field.storage.node.field_linked_articles
- node.type.article
- node.type.thematique
module:
- unique_content_field_validation
third_party_settings:
unique_content_field_validation:
unique: false
unique_text: ''
unique_multivalue: true
unique_multivalue_text: '%value appears more than once in %label'
id: node.thematique.field_linked_articles
field_name: field_linked_articles
entity_type: node
@ -13,7 +21,7 @@ bundle: thematique
label: 'Linked Articles'
description: ''
required: false
translatable: true
translatable: false
default_value: { }
default_value_callback: ''
settings:

View File

@ -6,6 +6,14 @@ dependencies:
- field.storage.node.field_linked_materials
- node.type.materiau
- node.type.thematique
module:
- unique_content_field_validation
third_party_settings:
unique_content_field_validation:
unique: false
unique_text: ''
unique_multivalue: true
unique_multivalue_text: '%value appears more than once in %label'
id: node.thematique.field_linked_materials
field_name: field_linked_materials
entity_type: node

View File

@ -12,7 +12,7 @@ bundle: thematique
label: Memo
description: ''
required: false
translatable: true
translatable: false
default_value: { }
default_value_callback: ''
settings: { }

View File

@ -6,14 +6,7 @@ dependencies:
- field.storage.node.field_visuel
- node.type.thematique
module:
- content_translation
- image
third_party_settings:
content_translation:
translation_sync:
alt: alt
title: title
file: '0'
id: node.thematique.field_visuel
field_name: field_visuel
entity_type: node
@ -21,7 +14,7 @@ bundle: thematique
label: Visuel
description: ''
required: false
translatable: true
translatable: false
default_value: { }
default_value_callback: ''
settings:

View File

@ -3,7 +3,11 @@ langcode: en
status: true
dependencies:
module:
- field_permissions
- node
third_party_settings:
field_permissions:
permission_type: public
id: node.field_linked_materials
field_name: field_linked_materials
entity_type: node

View File

@ -4,6 +4,12 @@ status: true
dependencies:
module:
- commerce_promotion
- content_translation
third_party_settings:
content_translation:
enabled: false
bundle_settings:
untranslatable_fields_hide: '0'
id: commerce_promotion.commerce_promotion
target_entity_type_id: commerce_promotion
target_bundle: commerce_promotion

View File

@ -0,0 +1,17 @@
uuid: 151dd62d-d9cb-4d11-b2d8-ad179a9d22e2
langcode: fr
status: true
dependencies:
module:
- content_translation
- flag_lists
third_party_settings:
content_translation:
enabled: false
bundle_settings:
untranslatable_fields_hide: '0'
id: flag_list_item.flag_list_item
target_entity_type_id: flag_list_item
target_bundle: flag_list_item
default_langcode: site_default
language_alterable: false

View File

@ -0,0 +1,18 @@
uuid: f4fc9d57-b60e-4b9f-9656-40d6eefa00a9
langcode: fr
status: true
dependencies:
config:
- flag_lists.flagging_collection_type.flagging_collection_type_1
module:
- content_translation
third_party_settings:
content_translation:
enabled: false
bundle_settings:
untranslatable_fields_hide: '0'
id: flagging_collection.flagging_collection_type_1
target_entity_type_id: flagging_collection
target_bundle: flagging_collection_type_1
default_langcode: site_default
language_alterable: false

View File

@ -4,6 +4,13 @@ status: true
dependencies:
config:
- node.type.note
module:
- content_translation
third_party_settings:
content_translation:
enabled: false
bundle_settings:
untranslatable_fields_hide: '0'
id: node.note
target_entity_type_id: node
target_bundle: note

View File

@ -8,11 +8,11 @@ dependencies:
- content_translation
third_party_settings:
content_translation:
enabled: false
enabled: true
bundle_settings:
untranslatable_fields_hide: '0'
id: node.thematique
target_entity_type_id: node
target_bundle: thematique
default_langcode: site_default
language_alterable: false
language_alterable: true

View File

@ -0,0 +1,11 @@
uuid: 49f2849f-c35b-47df-9413-1186158a7662
langcode: fr
status: true
dependencies:
config:
- workflow.workflow.migration
id: workflow_scheduled_transition.migration
target_entity_type_id: workflow_scheduled_transition
target_bundle: migration
default_langcode: site_default
language_alterable: false

View File

@ -0,0 +1,11 @@
uuid: bd6c1288-c092-42bb-beff-ea48ad36446f
langcode: fr
status: true
dependencies:
config:
- workflow.workflow.workflow
id: workflow_scheduled_transition.workflow
target_entity_type_id: workflow_scheduled_transition
target_bundle: workflow
default_langcode: site_default
language_alterable: false

View File

@ -3,8 +3,10 @@ default_config:
page_breaker:
pages:
prefix_label: Page
first: «
previous:
next:
last: »
page_current_title: 'Page courante'
page_title: 'Aller à la page @number'
first_title: 'Aller à la première page'
@ -19,12 +21,16 @@ default_config:
last_reader: 'Dernière page'
items:
prefix_label: Élément
first: «
previous:
next:
last: »
page_reader: Élément
first_reader: 'Premier élément'
item_ranges:
prefix_label: Éléments
first: «
previous:
next:
last: »
page_reader: Éléments

View File

@ -1,8 +1,10 @@
default_config:
tags:
pages:
first: «
previous:
next:
last: »
first_title: 'Aller à la première page'
previous_title: 'Aller à la page précédente'
next_title: 'Aller à la page suivante'
@ -12,9 +14,13 @@ default_config:
next_reader: 'Page suivante'
last_reader: 'Dernière page'
items:
first: «
previous:
next:
last: »
first_reader: 'Premier élément'
item_ranges:
first: «
previous:
next:
last: »

View File

@ -2,8 +2,10 @@ default_config:
tags:
pages:
prefix_label: Page
first: «
previous:
next:
last: »
page_current_title: 'Page courante'
first_title: 'Aller à la première page'
previous_title: 'Aller à la page précédente'
@ -16,6 +18,8 @@ default_config:
last_reader: 'Dernière page'
items:
prefix_label: Élément
first: «
previous:
next:
last: »
first_reader: 'Premier élément'

View File

@ -3,8 +3,10 @@ default_config:
page_breaker:
pages:
prefix_label: Page
first: «
previous:
next:
last: »
page_current_title: 'Page courante'
page_title: 'Aller à la page @number'
first_title: 'Aller à la première page'
@ -19,12 +21,16 @@ default_config:
last_reader: 'Dernière page'
items:
prefix_label: Élément
first: «
previous:
next:
last: »
page_reader: Élément
first_reader: 'Premier élément'
item_ranges:
prefix_label: Éléments
first: «
previous:
next:
last: »
page_reader: Éléments

View File

@ -2,8 +2,10 @@ default_config:
tags:
pages:
prefix_label: Page
first: «
previous:
next:
last: »
page_current_title: 'Page courante'
page_title: 'Aller à la page @number'
first_title: 'Aller à la première page'
@ -18,12 +20,16 @@ default_config:
last_reader: 'Dernière page'
items:
prefix_label: Élément
first: «
previous:
next:
last: »
page_reader: Élément
first_reader: 'Premier élément'
item_ranges:
prefix_label: Éléments
first: «
previous:
next:
last: »
page_reader: Éléments

View File

@ -2,8 +2,10 @@ default_config:
tags:
pages:
prefix_label: Page
first: «
previous:
next:
last: »
page_current_title: 'Page courante'
first_title: 'Aller à la première page'
previous_title: 'Aller à la page précédente'
@ -16,10 +18,14 @@ default_config:
last_reader: 'Dernière page'
items:
prefix_label: Élément
first: «
previous:
next:
last: »
first_reader: 'Premier élément'
item_ranges:
prefix_label: Éléments
first: «
previous:
next:
last: »

View File

@ -1,2 +0,0 @@
login_form:
field_label: 'Se souvenir de moi'

View File

@ -0,0 +1,3 @@
description: 'L''inspiration par la matière'
lang: fr
urls_to_cache: "/fr/pricing\r\n/fr/blabla\r\n/fr/base\r\n/fr/showrooms"

View File

@ -26,7 +26,7 @@ display:
label: 'Identifiant (ID)'
separator: ', '
label:
label: Étiquette
label: Libellé
type:
label: 'Type de licence'
separator: ', '

View File

@ -1,8 +1,10 @@
label: 'Eléments de la commande'
display:
default:
display_title: Maître
display_options:
arguments:
order_id:
exception:
title: Tout
exposed_form:
options:
submit_button: Appliquer
@ -23,7 +25,5 @@ display:
total_price__number:
label: 'Prix total'
separator: ', '
arguments:
order_id:
exception:
title: Tout
display_title: Maître
label: 'Eléments de la commande'

View File

@ -25,6 +25,7 @@ display:
commerce_order_bulk_form:
action_title: 'Pour cette sélection'
order_number:
label: '#'
separator: ', '
placed:
label: Date

View File

@ -13,5 +13,5 @@ type: thematique
description: ''
help: ''
new_revision: true
preview_mode: 1
preview_mode: 0
display_submitted: false

View File

@ -1,7 +0,0 @@
lifetime: 30
max_tokens: 0
login_form:
field_label: 'Remember me'
cookie_prefix: PL
_core:
default_config_hash: ce6WctcNYnaEo3BmHQc_Fmukw7AkPJ137tH5GwPW93w

View File

@ -0,0 +1,20 @@
site_name: materiO
short_name: materiO
description: 'The material library your projects deserve'
start_url: /
lang: en
theme_color: '#ffffff'
background_color: '#ffffff'
display: fullscreen
default_image: '0'
urls_to_cache: "/en/pricing\r\n/en/blabla\r\n/en/base\r\n/en/showrooms"
urls_to_exclude: "admin/.*\r\nuser/.*"
offline_page: /offline
cache_version: '1'
cross_origin: false
skip_waiting: false
_core:
default_config_hash: cP1TZQyv1WdET3iepl2QoyOPK7VeO0xHm0lU_FU1Wmc
image: /sites/default/files/pwa/PWA-icon.png
image_small: /sites/default/files/pwa/PWA-icon.pngcopy.png
image_very_small: /sites/default/files/pwa/PWA-icon.pngcopy2.png

View File

@ -15,6 +15,7 @@ dependencies:
- field.storage.node.field_famille
- field.storage.node.field_manufacturer
- field.storage.node.field_reference
- field.storage.node.field_short_description
- field.storage.node.field_tags
- field.storage.taxonomy_term.field_synonyms
- field.storage.node.field_thesaurus
@ -104,6 +105,14 @@ field_settings:
dependencies:
config:
- field.storage.node.field_reference
field_short_description:
label: 'Short description'
datasource_id: 'entity:node'
property_path: field_short_description
type: string
dependencies:
config:
- field.storage.node.field_short_description
name:
label: 'Manufacturer » Terme de taxonomie » Nom'
datasource_id: 'entity:node'
@ -234,6 +243,14 @@ field_settings:
dependencies:
module:
- node
type:
label: 'Type de contenu'
datasource_id: 'entity:node'
property_path: type
type: string
dependencies:
module:
- node
uid:
label: uid
datasource_id: 'entity:node'
@ -304,6 +321,7 @@ processor_settings:
- country_code_1
- field_famille
- field_reference
- field_short_description
- name
- name_1
- processed
@ -312,6 +330,7 @@ processor_settings:
- thesaurus_name
- thesaurus_synonyms
- title
- type
- uuid
title: true
alt: true

View File

@ -1,17 +0,0 @@
uuid: ba4b3ab4-c822-45ad-9abf-ff2bebe8effb
langcode: en
status: true
dependencies:
module:
- persistent_login
title: 'Default cron handler'
id: persistent_login_cron
weight: 0
module: persistent_login
callback: persistent_login_cron
scheduler:
id: simple
launcher:
id: serial
logger:
id: database

View File

@ -0,0 +1,29 @@
uuid: 08eadfe9-dd95-48db-bf97-7219b2f90604
langcode: en
status: true
dependencies:
module:
- user_email_verification
title: 'Default cron handler'
id: user_email_verification_cron
weight: 0
module: user_email_verification
callback: user_email_verification_cron
scheduler:
id: simple
configuration:
rules:
- '* * * * *'
launcher:
id: serial
configuration:
timeouts:
lock_timeout: 3600
launcher:
thread: 0
logger:
id: database
configuration:
method: '3'
expire: 1209600
retain: 1000

View File

@ -17,7 +17,7 @@ register_pending_approval_admin:
body: "[user:display-name] has applied for an account.\r\n\r\n[user:edit-url]"
subject: 'Account details for [user:display-name] at [site:name] (pending admin approval)'
status_activated:
body: "[user:display-name],\r\n\r\nYour account at [site:name] has been activated.\r\n\r\nYou may now log in by clicking this link or copying and pasting it into your browser:\r\n\r\n[user:one-time-login-url]\r\n\r\nThis link can only be used once to log in and will lead you to a page where you can set your password.\r\n\r\nAfter setting your password, you will be able to log in at [site:login-url] in the future using:\r\n\r\nusername: [user:account-name]\r\npassword: Your password\r\n\r\n-- [site:name] team"
body: "[user:display-name],\r\n\r\nYour account at [site:name] has been activated.\r\n\r\nYou may now verify your email by clicking this link or copying and pasting it into your browser:\r\n\r\n[user:verify-email]\r\n\r\n-- TO REMOVE --\r\n\r\nYou may now log in by clicking this link or copying and pasting it into your browser:\r\n\r\n[user:one-time-login-url]\r\n\r\nThis link can only be used once to log in and will lead you to a page where you can set your password.\r\n\r\nAfter setting your password, you will be able to log in at [site:login-url] in the future using:\r\n\r\nusername: [user:account-name]\r\npassword: Your password\r\n\r\n-- [site:name] team"
subject: 'Account details for [user:display-name] at [site:name] (approved)'
status_blocked:
body: "[user:display-name],\r\n\r\nYour account on [site:name] has been blocked.\r\n\r\n-- [site:name] team"

View File

@ -20,6 +20,7 @@ permissions:
- 'access site in maintenance mode'
- 'access synonyms entity autocomplete'
- 'access toolbar'
- 'access user profiles'
- 'add flag lists'
- 'administer commerce_order'
- 'administer newsletters'
@ -87,6 +88,7 @@ permissions:
- 'edit own enregistrement content'
- 'edit own flag lists'
- 'edit own note content'
- 'edit own thematique content'
- 'edit terms in assisted_research'
- 'edit terms in collectionneurs'
- 'edit terms in company'
@ -129,6 +131,7 @@ permissions:
- 'schedule corpus_documents workflow_transition'
- 'schedule generique workflow_transition'
- 'send newsletter'
- 'translate article node'
- 'translate company taxonomy_term'
- 'translate enregistrement node'
- 'translate entrees taxonomy_term'
@ -142,6 +145,7 @@ permissions:
- 'translate showroom taxonomy_term'
- 'translate static node'
- 'translate tags taxonomy_term'
- 'translate thematique node'
- 'translate thesaurus taxonomy_term'
- 'unflag dossier other items'
- 'update any commerce_license'

View File

@ -11,8 +11,8 @@ is_admin: false
permissions:
- 'access checkout'
- 'access content'
- 'access devel information'
- 'access kint'
- 'access pwa'
- 'access synonyms entity autocomplete'
- 'access webprofiler'
- 'create corpus_documents workflow_transition'

View File

@ -11,10 +11,8 @@ is_admin: false
permissions:
- 'access checkout'
- 'access content'
- 'access devel information'
- 'access kint'
- 'access synonyms entity autocomplete'
- 'access user profiles'
- 'access webprofiler'
- 'add composition entities'
- 'add fil entities'

View File

@ -0,0 +1,15 @@
skip_roles:
translator: translator
admin_showroom: admin_showroom
admin: admin
root: root
validate_interval: 604800
num_reminders: 2
mail_subject: '[site:name]: Email verification'
mail_body: 'Verify your Email by following the link: [user:verify-email]'
extended_enable: true
extended_validate_interval: 1209600
extended_mail_subject: '[site:name]: Account blocked, please verify Email address'
extended_mail_body: 'Your account is blocked. Your Email may still be verified by following the link: [user:verify-email-extended]'
_core:
default_config_hash: jMF3rV51ujHssuZyYCHEBAat_VlUArx0IGmGOZzOV8Y

View File

@ -2316,7 +2316,7 @@ display:
description: ''
expanded: false
parent: editors_menus.contents
weight: 0
weight: -2
context: '0'
menu_name: editors
display_description: ''
@ -6138,9 +6138,9 @@ display:
type: tab
title: Thématiques
description: ''
expanded: false
expanded: true
parent: editors_menus.contents
weight: 0
weight: -1
context: '0'
menu_name: editors
display_description: ''

69
package-lock.json generated
View File

@ -7074,6 +7074,70 @@
"flat-cache": "^2.0.1"
}
},
"file-loader": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
"integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
"dev": true,
"requires": {
"loader-utils": "^2.0.0",
"schema-utils": "^3.0.0"
},
"dependencies": {
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true
},
"emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
"dev": true
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"schema-utils": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.6",
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
}
}
}
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
@ -11956,6 +12020,11 @@
"resolved": "https://registry.npmjs.org/vue-youtube-embed/-/vue-youtube-embed-2.2.2.tgz",
"integrity": "sha512-l/EJuFMRK43AN73N+qxJnN0LB3uPl2xAghmr3dCvODWGCRWGjmGfrHaOtD93fu9J4co+CZLv1KP3akAsldC1aw=="
},
"vue2-touch-events": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/vue2-touch-events/-/vue2-touch-events-3.2.1.tgz",
"integrity": "sha512-6aQz9tofO1yLSudW7ltISC5lTFKEu0rcBuYNLrega1AApYUosPuRZ8iinzJQ4k5nUncDIVB2JPcz9qJDoSyQVw=="
},
"vuex": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.0.tgz",

View File

@ -28,6 +28,7 @@
"vue-router": "^3.4.9",
"vue-vimeo-player": "^0.1.0",
"vue-youtube-embed": "^2.2.2",
"vue2-touch-events": "^3.2.1",
"vuex": "^3.6.0"
},
"devDependencies": {
@ -54,6 +55,7 @@
"eslint-plugin-vue": "^7.1.0",
"eslint-plugin-vue-a11y": "0.0.31",
"eslint-webpack-plugin": "^2.4.0",
"file-loader": "^6.2.0",
"graphql": "^15.4.0",
"graphql-tag": "^2.11.0",
"lodash": "^4.17.20",

View File

@ -0,0 +1,171 @@
commit fc8cbeca3774ea4dce6c8768b1051144de5f1681
Author: bach <bachir@figureslibres.io>
Date: Wed Mar 3 17:34:33 2021 +0100
fixe Invalid translation language
diff --git a/src/Plugin/GraphQL/DataProducer/Entity/EntityLoad.php b/src/Plugin/GraphQL/DataProducer/Entity/EntityLoad.php
index f83be91..124cd53 100644
--- a/src/Plugin/GraphQL/DataProducer/Entity/EntityLoad.php
+++ b/src/Plugin/GraphQL/DataProducer/Entity/EntityLoad.php
@@ -165,9 +165,11 @@ class EntityLoad extends DataProducerPluginBase implements ContainerFactoryPlugi
}
// Get the correct translation.
- if (isset($language) && $language !== $entity->language()->getId() && $entity instanceof TranslatableInterface) {
- $entity = $entity->getTranslation($language);
- $entity->addCacheContexts(["static:language:{$language}"]);
+ if (isset($language) && $language !== $entity->language()->getId() && $entity instanceof TranslatableInterface && $entity->isTranslatable()) {
+ if($entity->hasTranslation($language)){
+ $entity = $entity->getTranslation($language);
+ $entity->addCacheContexts(["static:language:{$language}"]);
+ }
}
// Check if the passed user (or current user if none is passed) has access
diff --git a/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadByUuid.php b/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadByUuid.php
index 10e2d40..e98b514 100644
--- a/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadByUuid.php
+++ b/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadByUuid.php
@@ -164,9 +164,11 @@ class EntityLoadByUuid extends DataProducerPluginBase implements ContainerFactor
}
// Get the correct translation.
- if (isset($language) && $language != $entity->language()->getId() && $entity instanceof TranslatableInterface) {
- $entity = $entity->getTranslation($language);
- $entity->addCacheContexts(["static:language:{$language}"]);
+ if (isset($language) && $language != $entity->language()->getId() && $entity instanceof TranslatableInterface && $entity->isTranslatable()) {
+ if($entity->hasTranslation($language)){
+ $entity = $entity->getTranslation($language);
+ $entity->addCacheContexts(["static:language:{$language}"]);
+ }
}
// Check if the passed user (or current user if none is passed) has access
diff --git a/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadMultiple.php b/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadMultiple.php
index 4653aa0..526929b 100644
--- a/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadMultiple.php
+++ b/src/Plugin/GraphQL/DataProducer/Entity/EntityLoadMultiple.php
@@ -168,9 +168,11 @@ class EntityLoadMultiple extends DataProducerPluginBase implements ContainerFact
continue;
}
- if (isset($language) && $language !== $entities[$id]->language()->getId() && $entities[$id] instanceof TranslatableInterface) {
- $entities[$id] = $entities[$id]->getTranslation($language);
- $entities[$id]->addCacheContexts(["static:language:{$language}"]);
+ if (isset($language) && $language !== $entities[$id]->language()->getId() && $entities[$id] instanceof TranslatableInterface && $entities[$id]->isTranslatable()) {
+ if($entities[$id]->hasTranslation($language)){
+ $entities[$id] = $entities[$id]->getTranslation($language);
+ $entities[$id]->addCacheContexts(["static:language:{$language}"]);
+ }
}
if ($access) {
diff --git a/src/Plugin/GraphQL/DataProducer/Entity/EntityTranslation.php b/src/Plugin/GraphQL/DataProducer/Entity/EntityTranslation.php
index 633bdc2..3773a9b 100644
--- a/src/Plugin/GraphQL/DataProducer/Entity/EntityTranslation.php
+++ b/src/Plugin/GraphQL/DataProducer/Entity/EntityTranslation.php
@@ -101,7 +101,7 @@ class EntityTranslation extends DataProducerPluginBase implements ContainerFacto
* @return \Drupal\Core\Entity\EntityInterface|null
*/
public function resolve(EntityInterface $entity, $language, ?bool $access, ?AccountInterface $accessUser, ?string $accessOperation) {
- if ($entity instanceof TranslatableInterface && $entity->isTranslatable()) {
+ if ($entity instanceof TranslatableInterface && $entity->isTranslatable() && $entity->hasTranslation($language)) {
$entity = $entity->getTranslation($language);
$entity->addCacheContexts(["static:language:{$language}"]);
// Check if the passed user (or current user if none is passed) has access
diff --git a/src/Plugin/GraphQL/DataProducer/Field/EntityReference.php b/src/Plugin/GraphQL/DataProducer/Field/EntityReference.php
index 2d0a974..1346cd9 100644
--- a/src/Plugin/GraphQL/DataProducer/Field/EntityReference.php
+++ b/src/Plugin/GraphQL/DataProducer/Field/EntityReference.php
@@ -168,9 +168,11 @@ class EntityReference extends DataProducerPluginBase implements ContainerFactory
}
// Get the correct translation.
- if (isset($language) && $language != $entity->language()->getId() && $entity instanceof TranslatableInterface) {
- $entity = $entity->getTranslation($language);
- $entity->addCacheContexts(["static:language:{$language}"]);
+ if (isset($language) && $language != $entity->language()->getId() && $entity instanceof TranslatableInterface && $entity->isTranslatable()) {
+ if($entity->hasTranslation($language)){
+ $entity = $entity->getTranslation($language);
+ $entity->addCacheContexts(["static:language:{$language}"]);
+ }
}
// Check if the passed user (or current user if none is passed) has
diff --git a/src/Plugin/GraphQL/DataProducer/Field/EntityReferenceLayoutRevisions.php b/src/Plugin/GraphQL/DataProducer/Field/EntityReferenceLayoutRevisions.php
index ddcc2ab..8650a52 100644
--- a/src/Plugin/GraphQL/DataProducer/Field/EntityReferenceLayoutRevisions.php
+++ b/src/Plugin/GraphQL/DataProducer/Field/EntityReferenceLayoutRevisions.php
@@ -174,9 +174,11 @@ class EntityReferenceLayoutRevisions extends DataProducerPluginBase implements C
}
// Get the correct translation.
- if (isset($language) && $language != $entity->language()->getId() && $entity instanceof TranslatableInterface) {
- $entity = $entity->getTranslation($language);
- $entity->addCacheContexts(["static:language:{$language}"]);
+ if (isset($language) && $language != $entity->language()->getId() && $entity instanceof TranslatableInterface && $entity->isTranslatable()) {
+ if($entity->hasTranslation($language)){
+ $entity = $entity->getTranslation($language);
+ $entity->addCacheContexts(["static:language:{$language}"]);
+ }
}
// Check if the passed user (or current user if none is passed) has
diff --git a/src/Plugin/GraphQL/DataProducer/Field/EntityReferenceRevisions.php b/src/Plugin/GraphQL/DataProducer/Field/EntityReferenceRevisions.php
index 31a1d15..8c950e8 100644
--- a/src/Plugin/GraphQL/DataProducer/Field/EntityReferenceRevisions.php
+++ b/src/Plugin/GraphQL/DataProducer/Field/EntityReferenceRevisions.php
@@ -174,9 +174,11 @@ class EntityReferenceRevisions extends DataProducerPluginBase implements Contain
}
// Get the correct translation.
- if (isset($language) && $language != $entity->language()->getId() && $entity instanceof TranslatableInterface) {
- $entity = $entity->getTranslation($language);
- $entity->addCacheContexts(["static:language:{$language}"]);
+ if (isset($language) && $language != $entity->language()->getId() && $entity instanceof TranslatableInterface && $entity->isTranslatable()) {
+ if($entity->hasTranslation($language)){
+ $entity = $entity->getTranslation($language);
+ $entity->addCacheContexts(["static:language:{$language}"]);
+ }
}
// Check if the passed user (or current user if none is passed) has
diff --git a/src/Plugin/GraphQL/DataProducer/Routing/RouteEntity.php b/src/Plugin/GraphQL/DataProducer/Routing/RouteEntity.php
index a0c9be6..48678bc 100644
--- a/src/Plugin/GraphQL/DataProducer/Routing/RouteEntity.php
+++ b/src/Plugin/GraphQL/DataProducer/Routing/RouteEntity.php
@@ -125,9 +125,11 @@ class RouteEntity extends DataProducerPluginBase implements ContainerFactoryPlug
}
// Get the correct translation.
- if (isset($language) && $language != $entity->language()->getId() && $entity instanceof TranslatableInterface) {
- $entity = $entity->getTranslation($language);
- $entity->addCacheContexts(["static:language:{$language}"]);
+ if (isset($language) && $language != $entity->language()->getId() && $entity instanceof TranslatableInterface && $entity->isTranslatable()) {
+ if($entity->hasTranslation($language)){
+ $entity = $entity->getTranslation($language);
+ $entity->addCacheContexts(["static:language:{$language}"]);
+ }
}
$access = $entity->access('view', NULL, TRUE);
diff --git a/src/Plugin/GraphQL/DataProducer/Taxonomy/TaxonomyLoadTree.php b/src/Plugin/GraphQL/DataProducer/Taxonomy/TaxonomyLoadTree.php
index 1bcd624..a23a256 100644
--- a/src/Plugin/GraphQL/DataProducer/Taxonomy/TaxonomyLoadTree.php
+++ b/src/Plugin/GraphQL/DataProducer/Taxonomy/TaxonomyLoadTree.php
@@ -174,9 +174,11 @@ class TaxonomyLoadTree extends DataProducerPluginBase implements ContainerFactor
foreach ($entities as $id => $entity) {
$context->addCacheableDependency($entities[$id]);
- if (isset($language) && $language !== $entities[$id]->language()->getId() && $entities[$id] instanceof TranslatableInterface) {
- $entities[$id] = $entities[$id]->getTranslation($language);
- $entities[$id]->addCacheContexts(["static:language:{$language}"]);
+ if (isset($language) && $language !== $entities[$id]->language()->getId() && $entities[$id] instanceof TranslatableInterface && $entities[$id]->isTranslatable()) {
+ if($entities[$id]->hasTranslation($language)){
+ $entities[$id] = $entities[$id]->getTranslation($language);
+ $entities[$id]->addCacheContexts(["static:language:{$language}"]);
+ }
}
if ($access) {

View File

@ -0,0 +1,8 @@
name: 'images_styles_cron_gen'
type: module
description: 'helpers for progressive decoupling'
core: 8.x
package: 'custom'
# https://www.flocondetoile.fr/blog/generate-programmatically-image-styles-drupal-8
# https://www.flocondetoile.fr/blog/using-drupal-8-cron-api-generate-image-styles
# https://www.sitepoint.com/drupal-8-queue-api-powerful-manual-and-cron-queueing/

View File

@ -0,0 +1,95 @@
<?php
use Drupal\image\Entity\ImageStyle;
use Drupal\Core\Entity\EntityInterface;
use Drupal\file\FileInterface;
// /**
// * Implements hook_entity_insert().
// * Generate all image styles once an Image is uploaded.
// */
// function images_styles_gen_entity_insert(EntityInterface $entity) {
// /** @var \Drupal\file\Entity\File $entity */
// if ($entity instanceof FileInterface) {
// $image = \Drupal::service('image.factory')->get($entity->getFileUri());
// /** @var \Drupal\Core\Image\Image $image */
// if ($image->isValid()) {
// $styles = ImageStyle::loadMultiple();
// $image_uri = $entity->getFileUri();
// /** @var \Drupal\image\Entity\ImageStyle $style */
// foreach ($styles as $style) {
// $destination = $style->buildUri($image_uri);
// $style->createDerivative($image_uri, $destination);
// }
// }
// }
// }
/**
* Implements hook_entity_insert().
* Queue generation of all image styles once an Image is uploaded.
*/
// function images_styles_gen_entity_insert(EntityInterface $entity) {
// // TODO: IS THIS EVEN WORKING ????
// /** @var \Drupal\file\Entity\File $entity */
// if ($entity instanceof FileInterface) {
// $image = \Drupal::service('image.factory')->get($entity->getFileUri());
// /** @var \Drupal\Core\Image\Image $image */
// if ($image->isValid()) {
// $queue = \Drupal::queue('img_styles_gen');
// $item = new \stdClass();
// $item->fid = $entity->id();
// $queue->createItem($item);
// // $data = ['entity' => $entity];
// // $queue->createItem($data);
// }
// }
// }
// function images_styles_gen_cron_DISABLED(){
// $file_storage = \Drupal::entityTypeManager()->getStorage('file');
// $query = $file_storage->getQuery()
// ->condition('filemime', 'image/%', 'LIKE')
// ->accessCheck(TRUE);
// $results = $query->execute();
//
// // $styles_storage = \Drupal::entityTypeManager()->getStorage('image_style');
// // $styles = $styles_storage->loadMultiple();
//
// /** @var QueueFactory $queue_factory */
// $queue_factory = \Drupal::service('queue');
// /** @var QueueInterface $queue */
// $queue = $queue_factory->get('img_styles_gen');
//
// foreach ($results as $fid) {
// $item = new \stdClass();
// $item->fid = $fid;
// $queue->createItem($item);
//
// // $queue->createItem(["fid" => $fid]);
//
//
// // /** @var \Drupal\file\FileInterface|null $file*/
// // $file_entity = \Drupal::entityTypeManager()->getStorage('file')->load($fid);
// // $image = \Drupal::service('image.factory')->get($file_entity->getFileUri());
// //
// // if ($image->isValid()) {
// // $image_uri = $file_entity->getFileUri();
// // /** @var \Drupal\image\Entity\ImageStyle $style */
// // foreach ($styles as $style) {
// // $destination = $style->buildUri($image_uri);
// // // if destination exists skip
// // if (file_exists($destination)) continue; // skip existing files
// //
// // $data = [
// // 'style' => $style,
// // 'image_uri' => $image_uri,
// // 'destination' => $destination
// // ];
// // $queue->createItem($data);
// // \Drupal::logger('images_styles_gen')->notice("created queue from $image_uri to $destination");
// // }
//
// // }
// }
// }

View File

@ -0,0 +1,7 @@
images_styles_gen.form:
path: '/admin/config/media/imgstylesgen'
defaults:
_form: '\Drupal\images_styles_gen\Form\ImgStylesGenQueueForm'
_title: 'Images Styles Generator'
requirements:
_permission: 'administer site configuration'

View File

@ -0,0 +1,39 @@
<?php
namespace Drupal\images_styles_gen;
// use Drupal\node\Entity\Node;
class CreateImagesStyles {
public static function createStyles($item, &$context){
if (!array_key_exists('progress', $context['sandbox'])) {
$context['sandbox']['progress'] = 0;
}
$context['sandbox']['progress']++;
$context['sandbox']['current_file'] = $item->uri;
// $message = 'Creating Styles ...';
$results = array();
$results[] = $item->style->createDerivative($item->uri, $item->destination);
$context['message'] = $item->uri . ' processed.';
$context['results'][] = $item->destination;
}
public static function createStylesFinishedCallback($success, $results, $operations) {
// The 'success' parameter means no fatal PHP errors were detected. All
// other error management should be handled using 'results'.
if ($success) {
$message = \Drupal::translation()->formatPlural(
count($results),
'One image processed.', '@count image processed.'
);
}
else {
$message = t('Finished with an error.');
}
drupal_set_message($message);
}
}

View File

@ -0,0 +1,274 @@
<?php
/**
* @file
* Contains \Drupal\npq\Form\NodePublisherQueueForm.
*/
namespace Drupal\images_styles_gen\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Queue\QueueFactory;
use Drupal\Core\Queue\QueueInterface;
use Drupal\Core\Queue\QueueWorkerInterface;
use Drupal\Core\Queue\QueueWorkerManagerInterface;
use Drupal\Core\Queue\SuspendQueueException;
use Symfony\Component\DependencyInjection\ContainerInterface;
class ImgStylesGenQueueForm extends FormBase {
/**
* @var QueueFactory
*/
protected $queueFactory;
/**
* @var QueueWorkerManagerInterface
*/
protected $queueManager;
/**
* {@inheritdoc}
*/
public function __construct(QueueFactory $queue, QueueWorkerManagerInterface $queue_manager) {
$this->queueFactory = $queue;
$this->queueManager = $queue_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('queue'),
$container->get('plugin.manager.queue_worker')
);
}
/**
* {@inheritdoc}.
*/
public function getFormId() {
return 'images_styles_gen_form';
}
/**
* {@inheritdoc}.
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$styles_storage = \Drupal::entityTypeManager()->getStorage('image_style');
$content_type_id = $form_state->getValue('node_type');
$style_id = $form_state->getValue('style');
$batch_size = (int)$form_state->getValue('batch_size');
$num_rows = 0;
if ( $content_type_id && $style_id ) {
$database = \Drupal::database();
$query = $database->select('file_managed', 'fm');
$query->join('file_usage', 'fu', 'fm.fid = fu.fid');
$query->join('node', 'n', 'fu.id = n.nid');
$query
->condition('fm.filemime', 'image/%', 'LIKE')
->condition('fu.type', 'node')
->condition('n.type', $content_type_id)
->fields('fm', ['fid', 'uri'])
->fields('fu', ['id']);
$results = $query->execute();
/** @var \Drupal\image\Entity\ImageStyle $style */
$style = $styles_storage->load($style_id);
foreach ($results as $file) {
$destination = $style->buildUri($file->uri);
if (file_exists($destination)) continue; // if destination exists skip
$num_rows++;
}
}
// select from content type we'll generate derivatives
$contentTypes = \Drupal::service('entity.manager')->
getStorage('node_type')->loadMultiple();
$contentTypesList = [0 => "please choose a content type"];
foreach ($contentTypes as $contentType) {
$contentTypesList[$contentType->id()] = $contentType->label();
}
$form['node_type'] = array(
"#type" => "select",
"#title" => "Content type",
'#options' => $contentTypesList,
'#ajax' => [
'callback' => '::countAjaxCallback', // don't forget :: when calling a class method.
//'callback' => [$this, 'myAjaxCallback'], //alternative notation
'disable-refocus' => FALSE, // Or TRUE to prevent re-focusing on the triggering element.
'event' => 'change',
'wrapper' => 'edit-help-wrapper', // This element is updated with this AJAX callback.
'progress' => [
'type' => 'throbber',
'message' => $this->t('counting entries...'),
],
]
);
// select for which style will generate derivatives
$styles = $styles_storage->loadMultiple(); //, 'card_full', 'linkedmaterial_card'
$stylesList = [0 => "please choose a style"];
foreach ($styles as $style) {
$stylesList[$style->id()] = $style->label();
}
$form['style'] = array(
"#type" => "select",
"#title" => "Images Styles",
'#options' => $stylesList,
'#ajax' => [
'callback' => '::countAjaxCallback', // don't forget :: when calling a class method.
//'callback' => [$this, 'myAjaxCallback'], //alternative notation
'disable-refocus' => FALSE, // Or TRUE to prevent re-focusing on the triggering element.
'event' => 'change',
'wrapper' => 'edit-help-wrapper', // This element is updated with this AJAX callback.
'progress' => [
'type' => 'throbber',
'message' => $this->t('counting entries...'),
],
]
);
$form['batch_size'] = array(
'#type' => 'select',
'#title' => 'Batch size',
'#options' => array(
10 => '10',
100 => '100',
500 => '500',
1000 => '1000',
50000 => '5000',
10000 => '10000',
0 => 'no limit'
),
'#ajax' => [
'callback' => '::countAjaxCallback', // don't forget :: when calling a class method.
//'callback' => [$this, 'myAjaxCallback'], //alternative notation
'disable-refocus' => FALSE, // Or TRUE to prevent re-focusing on the triggering element.
'event' => 'change',
'wrapper' => 'edit-help-wrapper', // This element is updated with this AJAX callback.
'progress' => [
'type' => 'throbber',
'message' => $this->t('counting entries...'),
],
]
);
$form['help-wrapper'] = array(
'#type' => 'container'
);
$form['help-wrapper']['help'] = array(
'#type' => 'markup',
// '#prefix' => '<div>',
'#markup' => $this->t('Please choose a content type and a style.'),
// '#suffix' => '</div>',
'#attributes' => array(
'id' => 'help'
)
);
if ($num_rows) {
if($batch_size == 0){
$batch_size = $num_rows;
}
$form['help-wrapper']['help']['#markup'] = $this->t('Submitting this form will process @batch_size of @number images.', array('@batch_size' => $batch_size, '@number' => $num_rows));
// $form['actions']['submit']['#disabled'] = FALSE;
// unset($form['actions']['submit']['#attributes']['disabled']);
}
$form['help-wrapper']['num_rows'] = array(
'#type' => 'hidden',
'#value' => $num_rows,
);
// Actions
$form['actions']['#type'] = 'actions';
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => $this->t('Create image derivatives'),
'#button_type' => 'primary',
// '#disabled' => true,
'#states' => [
//show this submit only if the num rows is not empty
'visible' => [
//don't mistake :input for the type of field. You'll always use
//:input here, no matter whether your source is a select, radio or checkbox element.
':input[name="num_rows"]' => ['!value' => 0],
],
],
);
return $form;
}
// Get the value from example select field and fill
// the textbox with the selected text.
public function countAjaxCallback(array &$form, FormStateInterface $form_state) {
$form['help-wrapper']['#id'] = 'edit-help-wrapper';
return $form['help-wrapper'];
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$content_type_id = $form_state->getValue('node_type');
$style_id = $form_state->getValue('style');
$batch_size = (int)$form_state->getValue('batch_size');
$database = \Drupal::database();
$query = $database->select('file_managed', 'fm');
$query->join('file_usage', 'fu', 'fm.fid = fu.fid');
$query->join('node', 'n', 'fu.id = n.nid');
$query
->condition('fm.filemime', 'image/%', 'LIKE')
->condition('fu.type', 'node')
->condition('n.type', $content_type_id)
->fields('fm', ['fid', 'uri'])
->fields('fu', ['id']);
$results = $query->execute();
$styles_storage = \Drupal::entityTypeManager()->getStorage('image_style');
/** @var \Drupal\image\Entity\ImageStyle $style */
$style = $styles_storage->load($style_id);
$operations = [];
foreach ($results as $file) {
$destination = $style->buildUri($file->uri);
if (file_exists($destination)) continue; // skip existing files
$batch_item = new \stdClass();
$batch_item->style = $style;
$batch_item->uri = $file->uri;
$batch_item->destination = $destination;
$operations[] = ['\Drupal\images_styles_gen\CreateImagesStyles::createStyles', [$batch_item]];
if($batch_size && count($operations) >= $batch_size){
break;
}
}
$batch = array(
'title' => t('Creating images derivatives ...'),
'operations' => $operations,
'finished' => '\Drupal\images_styles_gen\CreateImagesStyles::createStylesFinishedCallback',
);
batch_set($batch);
}
}

View File

@ -0,0 +1,15 @@
materio_decoupled.path_translation_links:
path: 'materio_decoupled/path_translation_links'
defaults:
_controller: '\Drupal\materio_decoupled\Controller\MaterioDecoupledLanguageLinks::getPathTranslationLinks'
_title: 'Path translation links'
requirements:
_permission: 'access content'
materio_decoupled.header_menu_block:
path: 'materio_decoupled/ajax/getheadermenu'
defaults:
_controller: '\Drupal\materio_decoupled\Controller\AjaxHeaderMenuBlock::getBlock'
_title: 'Header Menu'
requirements:
_permission: 'access content'

View File

@ -0,0 +1,54 @@
<?php
namespace Drupal\materio_decoupled\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Request;
use Drupal\block\Entity\Block;
use Symfony\Component\HttpFoundation\JsonResponse;
// use Drupal\Core\Cache\CacheableJsonResponse;
// use Drupal\Core\Cache\CacheableMetadata;
// use Drupal\core\render\RenderContext;
/**
* Defines a route controller.
*/
class AjaxHeaderMenuBlock extends ControllerBase {
private function getBlockDefinition(){
// $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
// \Drupal::logger('materio_user')->notice($language);
$this->bid = "header";
$this->block = Block::load($this->bid);
$this->block_builded = \Drupal::entityManager()->getViewBuilder('block')->view($this->block);
}
/**
* Handler for getBlock request.
*/
public function getBlock(Request $request) {
$this->getBlockDefinition();
$rendered = \Drupal::service('renderer')->renderRoot($this->block_builded);
$data = [
'rendered' => $rendered,
// '#cache' => [
// 'max-age' => \Drupal\Core\Cache\Cache::PERMANENT,
// 'tags' => [
// 'materio_sapi-search_form-cache',
// ]
// ]
];
$response = new JsonResponse();
$response->setData($data);
// $response = new CacheableJsonResponse($data);
// $response->addCacheableDependency(CacheableMetadata::createFromRenderArray($data));
return $response;
}
}

View File

@ -0,0 +1,81 @@
<?php
namespace Drupal\materio_decoupled\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Url;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
/**
* Class AjaxHomeController.
*/
class MaterioDecoupledLanguageLinks extends ControllerBase {
/*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $languageManager;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('language_manager')
);
}
/**
* Constructs a new MaterioDecoupledLanguageLinks object.
*
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
* The language manager.
*/
public function __construct(LanguageManagerInterface $language_manager) {
$this->languageManager = $language_manager;
}
/**
* getPathTranslationLinks
*
* @return string
* Return translations links given a path.
*/
public function getPathTranslationLinks(Request $request) {
$post_data = json_decode( $request->getContent(),TRUE);
$path = $post_data['path'];
$data = [];
// build the links
$url_object = \Drupal::service('path.validator')->getUrlIfValid($path);
$languages = $this->languageManager->getNativeLanguages();
if (!$url_object) {
// if path does not exists
$data["error"] = "path {$path} is not valid";
$route_name = "<front>";
$route_parameters = null;
}else{
$route_name = $url_object->getRouteName();
$route_parameters = $url_object->getrouteParameters();
}
foreach ($languages as $key => $language) {
$url = Url::fromRoute($route_name, $route_parameters, ["language"=>$language]);
$links[$key] = [
"title" => $language->get('label'),
"url" => $url->toString(),
"sys_path" => $url->getInternalPath()
];
}
$data["links"] = $links;
return new JsonResponse($data);
}
}

View File

@ -1,19 +1,39 @@
scalar Violation
interface NodeInterface {
id: Int!
path: String!
}
type Materiau implements NodeInterface {
id: Int!
uuid: String!
title: String!
path: String!
author: String
body: String
bundle: String!
}
interface SearchResultInterface {
id: Int!
uuid: String!
title: String!
path: String!
author: String
bundle: String!
#
short_description: String
body: String
linked_materials: [Materiau]
}
type Materiau implements NodeInterface & SearchResultInterface{
id: Int!
uuid: String!
title: String!
path: String!
author: String
bundle: String!
#
short_description: String
body: String
linked_materials: [Materiau]
#
linked_articles: [Article]
images: [Image]
videos: [VideoLink]
@ -23,11 +43,29 @@ type Materiau implements NodeInterface {
attachments: [Filefield]
distributor: [Company]
manufacturer: [Company]
# famille: String
# index: Int
reference: String
samples: [Sample]
note: Note
note_id: Int
# famille: String
# index: Int
}
type Thematique implements NodeInterface & SearchResultInterface {
id: Int!
uuid: String!
title: String!
path: String!
author: String
bundle: String!
#
short_description: String
body: String
linked_materials: [Materiau]
#
images: [Image]
tags: [Tag]
memo: String
}
type Article implements NodeInterface {
@ -36,6 +74,8 @@ type Article implements NodeInterface {
title: String!
path: String!
author: String
bundle: String!
#
body: String
linked_materials: [Materiau]
images: [Image]
@ -48,37 +88,24 @@ type Article implements NodeInterface {
memo: String
}
type Thematique implements NodeInterface {
id: Int!
uuid: String!
title: String!
path: String!
author: String
body: String
linked_materials: [Materiau]
images: [Image]
tags: [Tag]
memo: String
}
type Note {
id: Int!
contenu: String
target: Int
}
type SearchResult {
id: Int!
uuid: String!
title: String!
bundle: String!
path: String!
short_description: String
images: [Image]
visuels: [Image]
reference: String
samples: [Sample]
}
# type SearchResult {
# id: Int!
# uuid: String!
# title: String!
# bundle: String!
# path: String!
# short_description: String
# images: [Image]
# visuels: [Image]
# reference: String
# samples: [Sample]
# }
type Product {
id: Int!

View File

@ -11,7 +11,11 @@ extend type Query {
}
extend type Query {
searchresults(ids: [Int], lang: String): [SearchResult]
searchresults(ids: [Int], lang: String): [SearchResultInterface]
}
extend type Query {
searchresult(id: Int!, lang: String): SearchResultInterface
}
extend type Query {

View File

@ -1,40 +0,0 @@
<?php
namespace Drupal\materio_graphql\GraphQL\Response;
use Drupal\Core\Entity\EntityInterface;
use Drupal\graphql\GraphQL\Response\Response;
/**
* Type of response used when an materiau is returned.
*/
class MateriauResponse extends Response {
/**
* The materiau to be served.
*
* @var \Drupal\Core\Entity\EntityInterface|null
*/
protected $materiau;
/**
* Sets the content.
*
* @param \Drupal\Core\Entity\EntityInterface|null $materiau
* The materiau to be served.
*/
public function setMateriau(?EntityInterface $materiau): void {
$this->materiau = $materiau;
}
/**
* Gets the materiau to be served.
*
* @return \Drupal\Core\Entity\EntityInterface|null
* The materiau to be served.
*/
public function materiau(): ?EntityInterface {
return $this->materiau;
}
}

View File

@ -1,98 +0,0 @@
<?php
namespace Drupal\materio_graphql\Plugin\GraphQL\DataProducer;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\graphql\Plugin\GraphQL\DataProducer\DataProducerPluginBase;
use Drupal\materio_graphql\GraphQL\Response\MateriauResponse;
use Drupal\node\Entity\Node;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Creates a new materiau entity.
*
* @DataProducer(
* id = "create_materiau",
* name = @Translation("Create Materiau"),
* description = @Translation("Creates a new materiau."),
* produces = @ContextDefinition("any",
* label = @Translation("Materiau")
* ),
* consumes = {
* "data" = @ContextDefinition("any",
* label = @Translation("Materiau data")
* )
* }
* )
*/
class CreateMateriau extends DataProducerPluginBase implements ContainerFactoryPluginInterface {
/**
* The current user.
*
* @var \Drupal\Core\Session\AccountInterface
*/
protected $currentUser;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$container->get('current_user')
);
}
/**
* CreateMateriau constructor.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param array $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Session\AccountInterface $current_user
* The current user.
*/
public function __construct(array $configuration, string $plugin_id, array $plugin_definition, AccountInterface $current_user) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->currentUser = $current_user;
}
/**
* Creates an materiau.
*
* @param array $data
* The submitted values for the materiau.
*
* @return \Drupal\graphql_composable\GraphQL\Response\MateriauResponse
* The newly created materiau.
*
* @throws \Exception
*/
public function resolve(array $data) {
$response = new MateriauResponse();
if ($this->currentUser->hasPermission("create materiau content")) {
$values = [
'type' => 'materiau',
'title' => $data['title'],
'body' => $data['description'],
];
$node = Node::create($values);
$node->save();
$response->setMateriau($node);
}
else {
$response->addViolation(
$this->t('You do not have permissions to create materiaus.')
);
}
return $response;
}
}

View File

@ -10,7 +10,7 @@ use GraphQL\Error\Error;
/**
* @Schema(
* id = "materio",
* name = "Materio schema",
* name = "Materio",
* extensions = "materio",
* )
*/

View File

@ -99,11 +99,23 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
$registry->addFieldResolver('Query', 'route',
$builder->compose(
$builder->callBack(function($parent, $args){
$t="t";
return $parent;
}),
$builder->produce('route_load')
->map('path', $builder->fromArgument('path')),
$builder->callBack(function($parent, $args){
$t="t";
return $parent;
}),
$builder->produce('route_entity')
->map('url', $builder->fromParent())
->map('language', $builder->fromArgument('lang'))
->map('language', $builder->fromArgument('lang')),
$builder->callBack(function($parent, $args){
$t="t";
return $parent;
})
));
}
@ -141,6 +153,12 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
->map('entity', $builder->fromParent())
);
$registry->addFieldResolver('Materiau', 'bundle',
$builder->compose(
$builder->produce('entity_bundle')
->map('entity', $builder->fromParent())
));
$registry->addFieldResolver('Materiau', 'path',
$builder->compose(
$builder->produce('entity_url')
@ -182,18 +200,66 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
// https://blog.chrismitchellonline.com/posts/custom_graphql_data/
$registry->addFieldResolver('Materiau', 'linked_materials',
// $builder->compose(
// $builder->produce('entity_reference')
// ->map('entity', $builder->fromParent())
// ->map('field', $builder->fromValue('field_linked_materials')))
$builder->compose(
$builder->produce('entity_reference')
->map('entity', $builder->fromParent())
->map('field', $builder->fromValue('field_linked_materials'))
));
$builder->callback(function($parent, $args){
$linkedmaterials = $parent->get('field_linked_materials')->getValue();
$nids = [];
foreach ($linkedmaterials as $key => $value) {
$nids[] = $value['target_id'];
}
$lang = $parent->language()->getId();
$test="test";
return [
"ids" => $nids,
"language" => $lang
];
}),
$builder->produce('entity_load_multiple')
->map('type', $builder->fromValue('node'))
->map('bundles', $builder->fromValue(['materiau']))
->map('ids', $builder->callback(function($parent, $args){
return $parent['ids'];
}))
->map('language', $builder->callback(function($parent, $args){
return $parent['language'];
}))
)
);
$registry->addFieldResolver('Materiau', 'linked_articles',
// $builder->compose(
// $builder->produce('entity_reference')
// ->map('entity', $builder->fromParent())
// ->map('field', $builder->fromValue('field_linked_articles')))
$builder->compose(
$builder->produce('entity_reference')
->map('entity', $builder->fromParent())
->map('field', $builder->fromValue('field_linked_articles'))
));
$builder->callback(function($parent, $args){
$linkedmaterials = $parent->get('field_linked_articles')->getValue();
$nids = [];
foreach ($linkedmaterials as $key => $value) {
$nids[] = $value['target_id'];
}
$lang = $parent->language()->getId();
$test="test";
return [
"ids" => $nids,
"language" => $lang
];
}),
$builder->produce('entity_load_multiple')
->map('type', $builder->fromValue('node'))
->map('bundles', $builder->fromValue(['materiau']))
->map('ids', $builder->callback(function($parent, $args){
return $parent['ids'];
}))
->map('language', $builder->callback(function($parent, $args){
return $parent['language'];
}))
)
);
$registry->addFieldResolver('Materiau', 'memo',
$builder->produce('property_path')
@ -299,6 +365,33 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
->map('id', $builder->fromParent())
)
);
$registry->addFieldResolver('Materiau', 'note_id',
$builder->compose(
$builder->callback(function($parent, $args){
// get the current user id
$user = \Drupal::currentUser()->id();
// get the current material id
$target = $parent->id();
// query the note for these user AND material (if any)
// if null, UI will create it with rest api
$entity_storage = \Drupal::entityTypeManager()->getStorage('node');
$query = $entity_storage->getQuery()
->condition('type', 'note')
->condition('uid', $user)
->condition('field_target', $target)
->accessCheck(TRUE);
$results = $query->execute();
// $test="test";
return array_shift($results);
}),
$builder->produce('entity_load')
->map('type', $builder->fromValue('node'))
->map('bundle', $builder->fromValue('note'))
->map('id', $builder->fromParent()),
$builder->produce('entity_id')
->map('entity', $builder->fromParent())
)
);
}
// _ _ _
@ -319,6 +412,12 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
->map('path', $builder->fromValue('field_contenu.value'))
);
$registry->addFieldResolver('Note', 'bundle',
$builder->compose(
$builder->produce('entity_bundle')
->map('entity', $builder->fromParent())
));
$registry->addFieldResolver('Note', 'target',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
@ -332,6 +431,14 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
// \__ \/ -_) _` | '_/ _| ' \| / -_|_-< || | | _|
// |___/\___\__,_|_| \__|_||_|_|_\___/__/\_,_|_|\__|
protected function addSearchResult(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
// Tell GraphQL how to resolve types of a common interface.
$registry->addTypeResolver('SearchResultInterface', function ($value) {
switch ($value->bundle()) {
case 'materiau': return 'Materiau';
case 'thematique': return 'Thematique';
}
throw new Error('Could not resolve content type.');
});
$registry->addFieldResolver('Query', 'searchresults',
$builder->produce('entity_load_multiple')
@ -340,68 +447,12 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
->map('language', $builder->fromArgument('lang'))
);
$registry->addFieldResolver('SearchResult', 'id',
$builder->produce('entity_id')
->map('entity', $builder->fromParent())
$registry->addFieldResolver('Query', 'searchresult',
$builder->produce('entity_load')
->map('type', $builder->fromValue('node'))
->map('id', $builder->fromArgument('id'))
->map('language', $builder->fromArgument('lang'))
);
$registry->addFieldResolver('SearchResult', 'bundle',
$builder->produce('entity_bundle')
->map('entity', $builder->fromParent())
);
$registry->addFieldResolver('SearchResult', 'uuid',
$builder->produce('entity_uuid')
->map('entity', $builder->fromParent())
);
$registry->addFieldResolver('SearchResult', 'path',
$builder->compose(
$builder->produce('entity_url')
->map('entity', $builder->fromParent()),
$builder->produce('url_path')
->map('url', $builder->fromParent())
)
);
$registry->addFieldResolver('SearchResult', 'title',
$builder->compose(
$builder->produce('entity_label')
->map('entity', $builder->fromParent())
));
$registry->addFieldResolver('SearchResult', 'short_description',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('field_short_description.value'))
);
$registry->addFieldResolver('SearchResult', 'images',
$builder->produce('entity_reference')
->map('entity', $builder->fromParent())
->map('field', $builder->fromValue('field_materiau_images'))
);
$registry->addFieldResolver('SearchResult', 'visuels',
$builder->produce('entity_reference')
->map('entity', $builder->fromParent())
->map('field', $builder->fromValue('field_visuel'))
);
$registry->addFieldResolver('SearchResult', 'reference',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('field_reference.value'))
);
$registry->addFieldResolver('SearchResult', 'samples',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('field_samples'))
);
}
// ___ _
@ -454,6 +505,13 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
)
);
$registry->addFieldResolver('Article', 'bundle',
$builder->compose(
$builder->produce('entity_bundle')
->map('entity', $builder->fromParent())
));
$registry->addFieldResolver('Article', 'title',
$builder->compose(
$builder->produce('entity_label')
@ -575,12 +633,14 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
// |_| |_||_\___|_|_|_\__,_|\__|_\__, |\_,_\___|
// |_|
protected function addThematique(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
$registry->addFieldResolver('Query', 'Thematique',
$registry->addFieldResolver('Query', 'thematique',
$builder->produce('entity_load')
->map('type', $builder->fromValue('node'))
->map('bundles', $builder->fromValue(['thematique']))
// ->map('bundles', $builder->fromValue(['thematique']))
->map('id', $builder->fromArgument('id'))
);
->map('language', $builder->fromArgument('lang'))
);
$registry->addFieldResolver('Thematique', 'id',
$builder->produce('entity_id')
@ -601,6 +661,12 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
)
);
$registry->addFieldResolver('Thematique', 'bundle',
$builder->compose(
$builder->produce('entity_bundle')
->map('entity', $builder->fromParent())
));
$registry->addFieldResolver('Thematique', 'title',
$builder->compose(
$builder->produce('entity_label')
@ -615,6 +681,13 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
->map('entity', $builder->fromParent())
));
$registry->addFieldResolver('Thematique', 'short_description',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('field_short_description.value'))
);
$registry->addFieldResolver('Thematique', 'body',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
@ -631,9 +704,33 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
// https://github.com/drupal-graphql/graphql/blob/8.x-4.x/doc/SUMMARY.md
// https://blog.chrismitchellonline.com/posts/custom_graphql_data/
$registry->addFieldResolver('Thematique', 'linked_materials',
$builder->produce('entity_reference')
->map('entity', $builder->fromParent())
->map('field', $builder->fromValue('field_linked_materials'))
// $builder->produce('entity_reference')
// ->map('entity', $builder->fromParent())
// ->map('field', $builder->fromValue('field_linked_materials'))
$builder->compose(
$builder->callback(function($parent, $args){
$linkedmaterials = $parent->get('field_linked_materials')->getValue();
$nids = [];
foreach ($linkedmaterials as $key => $value) {
$nids[] = $value['target_id'];
}
$lang = $parent->language()->getId();
$test="test";
return [
"ids" => $nids,
"language" => $lang
];
}),
$builder->produce('entity_load_multiple')
->map('type', $builder->fromValue('node'))
->map('bundles', $builder->fromValue(['materiau']))
->map('ids', $builder->callback(function($parent, $args){
return $parent['ids'];
}))
->map('language', $builder->callback(function($parent, $args){
return $parent['language'];
}))
)
);
$registry->addFieldResolver('Thematique', 'images',

View File

@ -1,42 +0,0 @@
<?php
declare(strict_types = 1);
namespace Drupal\materio_graphql\Wrappers\Response;
use Drupal\Core\Entity\EntityInterface;
use Drupal\graphql\GraphQL\Response\Response;
/**
* Type of response used when an materiau is returned.
*/
class MateriauResponse extends Response {
/**
* The materiau to be served.
*
* @var \Drupal\Core\Entity\EntityInterface|null
*/
protected $materiau;
/**
* Sets the content.
*
* @param \Drupal\Core\Entity\EntityInterface|null $materiau
* The materiau to be served.
*/
public function setMateriau(?EntityInterface $materiau): void {
$this->materiau = $materiau;
}
/**
* Gets the materiau to be served.
*
* @return \Drupal\Core\Entity\EntityInterface|null
* The materiau to be served.
*/
public function materiau(): ?EntityInterface {
return $this->materiau;
}
}

View File

@ -87,7 +87,8 @@ class Base extends ControllerBase {
}
// Restrict the search to specific languages.
// $this->query->setLanguages(['de', 'it']);
$lang = \Drupal::languageManager()->getCurrentLanguage()->getId();
$this->query->setLanguages([$lang]);
// Do paging.
$this->query->range($this->offset, $this->limit);
@ -105,10 +106,12 @@ class Base extends ControllerBase {
}
private function defaultQuery(){
$lang = \Drupal::languageManager()->getCurrentLanguage()->getId();
$entity_storage = \Drupal::entityTypeManager()->getStorage('node');
$this->query = $entity_storage->getQuery()
->condition('type', 'materiau')
->condition('type', ['materiau', 'thematique'], 'IN')
->condition('status', '1')
->condition('langcode', $lang)
->range($this->offset, $this->limit)
->accessCheck(TRUE)
->sort('changed', 'DESC');
@ -116,7 +119,8 @@ class Base extends ControllerBase {
$this->results = $this->query->execute();
$this->count_query = $entity_storage->getQuery()
->condition('type', 'materiau')
->condition('type', ['materiau', 'thematique'], 'IN')
->condition('langcode', $lang)
->accessCheck(TRUE)
->condition('status', '1')
->count();
@ -191,18 +195,17 @@ class Base extends ControllerBase {
$nids = [];
// Using entityTypeManager
// Get a node storage object.
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
// $node_storage = \Drupal::entityTypeManager()->getStorage('node');
foreach ($this->results as $result) {
$lang = \Drupal::languageManager()->getCurrentLanguage()->getId();
// $lang = \Drupal::languageManager()->getCurrentLanguage()->getId();
// Load a single node.
$node = $node_storage->load($result);
// $node = $node_storage->load($result);
// check if has translation
if ($node->hasTranslation($lang)) {
// $uuids[] = $result->getField('uuid')->getValues()[0];
// i used to filter like bellow because of a graphql probleme
// if ($node->hasTranslation($lang)) {
$nids[] = $result;
}
// }
}
// $resp['uuids'] = $uuids;

View File

@ -149,3 +149,52 @@ function materio_user_entity_type_build(array &$entity_types) {
// https://drupal.stackexchange.com/a/230547
$entity_types['user']->setFormClass('modal', 'Drupal\user\RegisterForm');
}
/*
* hook_menu_local_tasks_alter
*/
function materio_user_menu_local_tasks_alter(&$data, $route_name){
$t="t";
// remove some tabs on user pages
// if (in_array($route_name, ['entity.user.canonical', 'entity.user.edit_form']) ) {
if (preg_match('/^entity\.user\./', $route_name)
|| in_array($route_name, [
'simplenews.newsletter_subscriptions_user',
'commerce_order.address_book.overview',
'entity.commerce_payment_method.collection',
'view.commerce_user_orders.order_page',
'view.commerce_user_subscriptions.page_1'
])) {
unset($data['tabs'][0]['profile.user_page:member']);
$data['tabs'][0]['entity.user.edit_form']['#weight'] = -20;
$data['tabs'][0]['simplenews.newsletter_subscriptions_user']['#weight'] = -9;
}
// foreach ($data['tabs'] as $key => $tab) {
// if ($key == 'profile.user_page:member') {
// unset($data['tabs'][$key]);
// }
// if ($key == 'entity.user.edit_form') {
// $data['tabs'][$key]['#weight'] = -200;
// }
//
// }
}
/*
* hook_local_tasks_alter
*/
// function materio_user_local_tasks_alter(&$local_tasks){
// $t="t";
// }
function materio_user_form_alter(array &$form, FormStateInterface $forme_state, $form_id){
if ($form_id == 'simplenews_subscriber_account_form') {
$user = \Drupal::currentUser();
$roles = $user->getRoles();
$t="t";
if (in_array('adherent', $roles)) {
unset($form['subscriptions']['widget']['#options']['companies']);
unset($form['subscriptions']['widget']['#options']['test']);
}
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More