diff --git a/README.md b/README.md index 2d10c4ea5f..5a9615ab06 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,6 @@ On Plone 5, Volto is currently tested with the following packages pinned to spec - plone.rest 2.0.0 - plone.volto 4.0.3 - ## Volto in Production Volto is actively developed since 2017 and used in production since 2018 on the following websites: diff --git a/api/buildout.cfg b/api/buildout.cfg index 0a9d2af71c..6b63ef467e 100644 --- a/api/buildout.cfg +++ b/api/buildout.cfg @@ -16,8 +16,9 @@ show-picked-versions = true [sources] plone.volto = git https://github.com/plone/plone.volto.git branch=main -plone.rest = git git@github.com:plone/plone.rest.git branch=master +plone.rest = git git@github.com:plone/plone.rest.git branch=main plone.restapi = git https://github.com/plone/plone.restapi.git pushurl=git@github.com:plone/plone.restapi.git branch=main +plone.app.linkintegrity = git https://github.com/plone/plone.app.linkintegrity.git pushurl=git@github.com:plone/plone.app.linkintegrity.git branch=master [instance] recipe = plone.recipe.zope2instance diff --git a/cypress/tests/core/content/content.js b/cypress/tests/core/content/content.js index da5e9a4091..29e910deac 100644 --- a/cypress/tests/core/content/content.js +++ b/cypress/tests/core/content/content.js @@ -86,7 +86,7 @@ describe('Add Content Tests', () => { cy.findByLabelText('/my-page').children('td').eq(1).click(); cy.get('.top-menu-menu .delete').click(); - cy.get('.modal.active').contains('View broken links list'); + cy.get('.modal.active').contains('View links and references to this item'); cy.get('.actions').contains('Delete').click(); }); diff --git a/locales/ca/LC_MESSAGES/volto.po b/locales/ca/LC_MESSAGES/volto.po index 7e3dcf33e0..f3d3edb93a 100644 --- a/locales/ca/LC_MESSAGES/volto.po +++ b/locales/ca/LC_MESSAGES/volto.po @@ -1019,6 +1019,11 @@ msgstr "" msgid "Deleted" msgstr "" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3688,11 +3693,6 @@ msgstr "Aquesta és una còpia de treball de {title}" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4101,16 +4101,16 @@ msgstr "URL del vídeo" msgid "View" msgstr "veure" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "Veure els canvis" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/de/LC_MESSAGES/volto.po b/locales/de/LC_MESSAGES/volto.po index 501400c73c..84ba8d9887 100644 --- a/locales/de/LC_MESSAGES/volto.po +++ b/locales/de/LC_MESSAGES/volto.po @@ -1016,6 +1016,11 @@ msgstr "" msgid "Deleted" msgstr "Gelöscht" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3685,11 +3690,6 @@ msgstr "Das ist eine Arbeitskopie von {title}" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4098,16 +4098,16 @@ msgstr "Video URL" msgid "View" msgstr "Anzeigen" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "Änderungen anzeigen" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/en/LC_MESSAGES/volto.po b/locales/en/LC_MESSAGES/volto.po index 50dce32990..7e4344a1fb 100644 --- a/locales/en/LC_MESSAGES/volto.po +++ b/locales/en/LC_MESSAGES/volto.po @@ -1010,6 +1010,11 @@ msgstr "" msgid "Deleted" msgstr "" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3679,11 +3684,6 @@ msgstr "" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4092,16 +4092,16 @@ msgstr "" msgid "View" msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/es/LC_MESSAGES/volto.po b/locales/es/LC_MESSAGES/volto.po index 595636eec5..5b17e0dbd6 100644 --- a/locales/es/LC_MESSAGES/volto.po +++ b/locales/es/LC_MESSAGES/volto.po @@ -1021,6 +1021,11 @@ msgstr "¿Eliminar este elemento?" msgid "Deleted" msgstr "Eliminado" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3690,11 +3695,6 @@ msgstr "Es una copia de trabajo de {title}" msgid "This item is also a folder." msgstr "Este elemento también es una carpeta." -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "Este elemento está referenciado por otros elementos. Al eliminarlo, {brokenReferences} {variation} se romperá." - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4103,16 +4103,16 @@ msgstr "URL del vídeo" msgid "View" msgstr "Ver" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "Ver la lista de enlaces rotos" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "Mostrar los cambios" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/eu/LC_MESSAGES/volto.po b/locales/eu/LC_MESSAGES/volto.po index f7e40a10b4..4c2ea10da7 100644 --- a/locales/eu/LC_MESSAGES/volto.po +++ b/locales/eu/LC_MESSAGES/volto.po @@ -1017,6 +1017,11 @@ msgstr "" msgid "Deleted" msgstr "Ezabatuta" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3686,11 +3691,6 @@ msgstr "Hau {title} elementuaren lan-bertsioa da" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4099,16 +4099,16 @@ msgstr "Bideoaren URLa" msgid "View" msgstr "Ikusi" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "Aldaketak ikusi" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/fi/LC_MESSAGES/volto.po b/locales/fi/LC_MESSAGES/volto.po index 71412b10c2..ddb227b866 100644 --- a/locales/fi/LC_MESSAGES/volto.po +++ b/locales/fi/LC_MESSAGES/volto.po @@ -1021,6 +1021,11 @@ msgstr "" msgid "Deleted" msgstr "Poistettu" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3690,11 +3695,6 @@ msgstr "" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4103,16 +4103,16 @@ msgstr "Videon URL" msgid "View" msgstr "Näytä" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "Näytä muutokset" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/fr/LC_MESSAGES/volto.po b/locales/fr/LC_MESSAGES/volto.po index 49959616bd..4cba5dc88b 100644 --- a/locales/fr/LC_MESSAGES/volto.po +++ b/locales/fr/LC_MESSAGES/volto.po @@ -1027,6 +1027,11 @@ msgstr "" msgid "Deleted" msgstr "Supprimé" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3696,11 +3701,6 @@ msgstr "Il sagit d'une copie de travail de {title}" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4109,16 +4109,16 @@ msgstr "URL de la vidéo" msgid "View" msgstr "Vue" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "Voir les changements" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/it/LC_MESSAGES/volto.po b/locales/it/LC_MESSAGES/volto.po index e62c2bad73..0f6e7c02f7 100644 --- a/locales/it/LC_MESSAGES/volto.po +++ b/locales/it/LC_MESSAGES/volto.po @@ -1010,6 +1010,11 @@ msgstr "" msgid "Deleted" msgstr "Cancellato" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3679,11 +3684,6 @@ msgstr "Questa è una copia di lavoro di {title}" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4092,16 +4092,16 @@ msgstr "URL del video" msgid "View" msgstr "Visualizza" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "Mostra le modifiche" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/ja/LC_MESSAGES/volto.po b/locales/ja/LC_MESSAGES/volto.po index 287a210940..cf3718cbc9 100644 --- a/locales/ja/LC_MESSAGES/volto.po +++ b/locales/ja/LC_MESSAGES/volto.po @@ -1018,6 +1018,11 @@ msgstr "" msgid "Deleted" msgstr "" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3687,11 +3692,6 @@ msgstr "" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4100,16 +4100,16 @@ msgstr "ビデオURL" msgid "View" msgstr "表示" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "表示" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/nl/LC_MESSAGES/volto.po b/locales/nl/LC_MESSAGES/volto.po index c35ced2486..8e7650a3a4 100644 --- a/locales/nl/LC_MESSAGES/volto.po +++ b/locales/nl/LC_MESSAGES/volto.po @@ -1029,6 +1029,11 @@ msgstr "" msgid "Deleted" msgstr "" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3698,11 +3703,6 @@ msgstr "" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4111,16 +4111,16 @@ msgstr "" msgid "View" msgstr "Bekijken" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "Bekijk wijzigingen" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/pt/LC_MESSAGES/volto.po b/locales/pt/LC_MESSAGES/volto.po index 53828a292f..11823cee15 100644 --- a/locales/pt/LC_MESSAGES/volto.po +++ b/locales/pt/LC_MESSAGES/volto.po @@ -1018,6 +1018,11 @@ msgstr "" msgid "Deleted" msgstr "" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3687,11 +3692,6 @@ msgstr "" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4100,16 +4100,16 @@ msgstr "" msgid "View" msgstr "Ver" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "Ver modificações" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/pt_BR/LC_MESSAGES/volto.po b/locales/pt_BR/LC_MESSAGES/volto.po index 1f84d64b30..c2ffa3f7a8 100644 --- a/locales/pt_BR/LC_MESSAGES/volto.po +++ b/locales/pt_BR/LC_MESSAGES/volto.po @@ -1020,6 +1020,11 @@ msgstr "" msgid "Deleted" msgstr "Removida" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3689,11 +3694,6 @@ msgstr "Esta é uma cópia de trabalho de {title}" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4102,16 +4102,16 @@ msgstr "URL do vídeo" msgid "View" msgstr "Visão" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "Ver mudanças" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/ro/LC_MESSAGES/volto.po b/locales/ro/LC_MESSAGES/volto.po index ae607d5d64..fdf65c0d5f 100644 --- a/locales/ro/LC_MESSAGES/volto.po +++ b/locales/ro/LC_MESSAGES/volto.po @@ -1010,6 +1010,11 @@ msgstr "" msgid "Deleted" msgstr "" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3679,11 +3684,6 @@ msgstr "Aceasta este o copie de lucru a {title}" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4092,16 +4092,16 @@ msgstr "URL-ul video" msgid "View" msgstr "Vizualizare" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "Vizualizare modificări" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/volto.pot b/locales/volto.pot index b243ad1a4c..de8180098c 100644 --- a/locales/volto.pot +++ b/locales/volto.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Plone\n" -"POT-Creation-Date: 2023-10-02T11:59:20.013Z\n" +"POT-Creation-Date: 2023-10-09T09:36:27.737Z\n" "Last-Translator: Plone i18n <plone-i18n@lists.sourceforge.net>\n" "Language-Team: Plone i18n <plone-i18n@lists.sourceforge.net>\n" "MIME-Version: 1.0\n" @@ -1012,6 +1012,11 @@ msgstr "" msgid "Deleted" msgstr "" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3685,11 +3690,6 @@ msgid "This item is also a folder. By deleting it you will delete {containedItemsToDelete} {variation} inside the folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4098,16 +4098,16 @@ msgstr "" msgid "View" msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/locales/zh_CN/LC_MESSAGES/volto.po b/locales/zh_CN/LC_MESSAGES/volto.po index 50a87152f1..91748b7e32 100644 --- a/locales/zh_CN/LC_MESSAGES/volto.po +++ b/locales/zh_CN/LC_MESSAGES/volto.po @@ -1016,6 +1016,11 @@ msgstr "" msgid "Deleted" msgstr "已删除" +#: components/manage/Contents/Contents +# defaultMessage: Deleting this item breaks {brokenReferences} {variation}. +msgid "Deleting this item breaks {brokenReferences} {variation}." +msgstr "" + #: components/manage/Widgets/QuerystringWidget # defaultMessage: Depth msgid "Depth" @@ -3685,11 +3690,6 @@ msgstr "这是{title}的一个工作副本" msgid "This item is also a folder." msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken. -msgid "This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." -msgstr "" - #: components/manage/LockingToastsFactory/LockingToastsFactory # defaultMessage: This item was locked by {creator} on {date} msgid "This item was locked by {creator} on {date}" @@ -4098,16 +4098,16 @@ msgstr "视频URL" msgid "View" msgstr "" -#: components/manage/Contents/Contents -# defaultMessage: View broken links list -msgid "View broken links list" -msgstr "" - #: components/manage/History/History # defaultMessage: View changes msgid "View changes" msgstr "" +#: components/manage/Contents/Contents +# defaultMessage: View links and references to this item +msgid "View links and references to this item" +msgstr "" + #: components/manage/History/History # defaultMessage: View this revision msgid "View this revision" diff --git a/news/5234.feature b/news/5234.feature new file mode 100644 index 0000000000..22c4976878 --- /dev/null +++ b/news/5234.feature @@ -0,0 +1,2 @@ +List plone.app.linkintegrity breaches with links to the pages in the delete confirmation modal. +@jaroel \ No newline at end of file diff --git a/src/components/manage/Contents/Contents.jsx b/src/components/manage/Contents/Contents.jsx index e4ce494288..d5276e0e5c 100644 --- a/src/components/manage/Contents/Contents.jsx +++ b/src/components/manage/Contents/Contents.jsx @@ -411,7 +411,8 @@ class Contents extends Component { showWorkflow: false, itemsToDelete: [], containedItemsToDelete: [], - brokenReferences: [], + brokenReferences: 0, + breaches: [], showAllItemsToDelete: true, items: this.props.items, filter: '', @@ -450,20 +451,37 @@ class Contents extends Component { const linkintegrityInfo = await this.props.linkIntegrityCheck( map(this.state.itemsToDelete, (item) => this.getFieldById(item, 'UID')), ); - let containedItems = 0; - let brokenReferencesCount = 0; + const containedItems = linkintegrityInfo + .map((result) => result.items_total ?? 0) + .reduce((acc, value) => acc + value, 0); + const breaches = linkintegrityInfo.flatMap((result) => + result.breaches.map((source) => ({ + source: source, + target: result, + })), + ); + const source_by_uid = breaches.reduce( + (acc, value) => acc.set(value.source.uid, value.source), + new Map(), + ); + const by_source = breaches.reduce((acc, value) => { + if (acc.get(value.source.uid) === undefined) { + acc.set(value.source.uid, new Set()); + } + acc.get(value.source.uid).add(value.target); + return acc; + }, new Map()); - linkintegrityInfo.forEach((item) => { - containedItems += item.items_total ?? 0; - brokenReferencesCount += item.breaches.length; - }); this.setState({ containedItemsToDelete: containedItems, - brokenReferences: brokenReferencesCount, - brokenLinksList: - linkintegrityInfo.length === 1 - ? linkintegrityInfo[0]['@id'] + '/links-to-item' - : null, + brokenReferences: by_source.size, + linksAndReferencesViewLink: linkintegrityInfo.length + ? linkintegrityInfo[0]['@id'] + '/links-to-item' + : null, + breaches: Array.from(by_source, (entry) => ({ + source: source_by_uid.get(entry[0]), + targets: Array.from(entry[1]), + })), showAllItemsToDelete: this.state.itemsToDelete.length < this.deleteItemsToShowThreshold, }); @@ -1188,7 +1206,11 @@ class Contents extends Component { <article id="content"> <Confirm open={this.state.showDelete} - confirmButton="Delete" + confirmButton={ + this.state.brokenReferences === 0 + ? 'Delete' + : 'Delete item and break links' + } header={ this.state.itemsToDelete.length === 1 ? this.props.intl.formatMessage( @@ -1200,114 +1222,14 @@ class Contents extends Component { } content={ <div className="content"> - <p> - {this.state.itemsToDelete.length > 1 ? ( - this.state.containedItemsToDelete > 0 ? ( - <> - <FormattedMessage - id="Some items are also a folder. - By deleting them you will delete {containedItemsToDelete} {variation} inside the folders." - defaultMessage="Some items are also a folder. - By deleting them you will delete {containedItemsToDelete} {variation} inside the folders." - values={{ - containedItemsToDelete: ( - <span> - {this.state.containedItemsToDelete} - </span> - ), - variation: ( - <span> - {this.state.containedItemsToDelete === - 1 ? ( - <FormattedMessage - id="item" - defaultMessage="item" - /> - ) : ( - <FormattedMessage - id="items" - defaultMessage="items" - /> - )} - </span> - ), - }} - /> - {this.state.brokenReferences > 0 && ( - <> - <br /> - <FormattedMessage - id="Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken." - defaultMessage="Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken." - values={{ - brokenReferences: ( - <span> - {this.state.brokenReferences} - </span> - ), - variation: ( - <span> - {this.state.brokenReferences === - 1 ? ( - <FormattedMessage - id="reference" - defaultMessage="reference" - /> - ) : ( - <FormattedMessage - id="references" - defaultMessage="references" - /> - )} - </span> - ), - }} - /> - </> - )} - </> - ) : ( - <> - {this.state.brokenReferences > 0 && ( - <> - <FormattedMessage - id="Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken." - defaultMessage="Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken." - values={{ - brokenReferences: ( - <span> - {this.state.brokenReferences} - </span> - ), - variation: ( - <span> - {this.state.brokenReferences === - 1 ? ( - <FormattedMessage - id="reference" - defaultMessage="reference" - /> - ) : ( - <FormattedMessage - id="references" - defaultMessage="references" - /> - )} - </span> - ), - }} - /> - </> - )} - </> - ) - ) : this.state.containedItemsToDelete > 0 ? ( + {this.state.itemsToDelete.length > 1 ? ( + this.state.containedItemsToDelete > 0 ? ( <> <FormattedMessage - id="This item is also a folder. - By deleting it you will delete {containedItemsToDelete} {variation} inside the folder." - defaultMessage="This item is also a folder. - By deleting it you will delete {containedItemsToDelete} {variation} inside the folder." + id="Some items are also a folder. + By deleting them you will delete {containedItemsToDelete} {variation} inside the folders." + defaultMessage="Some items are also a folder. + By deleting them you will delete {containedItemsToDelete} {variation} inside the folders." values={{ containedItemsToDelete: ( <span> @@ -1336,8 +1258,41 @@ class Contents extends Component { <> <br /> <FormattedMessage - id="This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." - defaultMessage="This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." + id="Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken." + defaultMessage="Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken." + values={{ + brokenReferences: ( + <span> + {this.state.brokenReferences} + </span> + ), + variation: ( + <span> + {this.state.brokenReferences === 1 ? ( + <FormattedMessage + id="reference" + defaultMessage="reference" + /> + ) : ( + <FormattedMessage + id="references" + defaultMessage="references" + /> + )} + </span> + ), + }} + /> + </> + )} + </> + ) : ( + <> + {this.state.brokenReferences > 0 && ( + <> + <FormattedMessage + id="Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken." + defaultMessage="Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken." values={{ brokenReferences: ( <span> @@ -1361,62 +1316,183 @@ class Contents extends Component { ), }} /> - <div className="broken-links-list-link-wrapper"> + </> + )} + </> + ) + ) : this.state.containedItemsToDelete > 0 ? ( + <> + <FormattedMessage + id="This item is also a folder. + By deleting it you will delete {containedItemsToDelete} {variation} inside the folder." + defaultMessage="This item is also a folder. + By deleting it you will delete {containedItemsToDelete} {variation} inside the folder." + values={{ + containedItemsToDelete: ( + <span> + {this.state.containedItemsToDelete} + </span> + ), + variation: ( + <span> + {this.state.containedItemsToDelete === 1 ? ( + <FormattedMessage + id="item" + defaultMessage="item" + /> + ) : ( + <FormattedMessage + id="items" + defaultMessage="items" + /> + )} + </span> + ), + }} + /> + {this.state.brokenReferences > 0 && ( + <> + <br /> + <FormattedMessage + id="Deleting this item breaks {brokenReferences} {variation}." + defaultMessage="Deleting this item breaks {brokenReferences} {variation}." + values={{ + brokenReferences: ( + <span>{this.state.brokenReferences}</span> + ), + variation: ( + <span> + {this.state.brokenReferences === 1 ? ( + <FormattedMessage + id="reference" + defaultMessage="reference" + /> + ) : ( + <FormattedMessage + id="references" + defaultMessage="references" + /> + )} + </span> + ), + }} + /> + <div className="broken-links-list"> + <FormattedMessage id="These items will have broken links" /> + <ul> + {this.state.breaches.map((breach) => ( + <li key={breach.source['@id']}> + <Link + to={flattenToAppURL( + breach.source['@id'], + )} + title="Navigate to this item" + > + {breach.source.title} + </Link>{' '} + refers to{' '} + {breach.targets + .map((target) => ( + <Link + to={flattenToAppURL( + target['@id'], + )} + title="Navigate to this item" + > + {target.title} + </Link> + )) + .reduce((result, item) => ( + <> + {result}, {item} + </> + ))} + </li> + ))} + </ul> + {this.state.linksAndReferencesViewLink && ( <Link to={flattenToAppURL( - this.state.brokenLinksList, + this.state.linksAndReferencesViewLink, )} > <FormattedMessage - id="View broken links list" - defaultMessage="View broken links list" + id="View links and references to this item" + defaultMessage="View links and references to this item" /> </Link> - </div> - </> - )} - </> - ) : this.state.brokenReferences > 0 ? ( - <> - <FormattedMessage - id="This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." - defaultMessage="This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken." - values={{ - brokenReferences: ( - <span>{this.state.brokenReferences}</span> - ), - variation: ( - <span> - {this.state.brokenReferences === 1 ? ( - <FormattedMessage - id="reference" - defaultMessage="reference" - /> - ) : ( - <FormattedMessage - id="references" - defaultMessage="references" - /> - )} - </span> - ), - }} - /> - <div className="broken-links-list-link-wrapper"> + )} + </div> + </> + )} + </> + ) : this.state.brokenReferences > 0 ? ( + <> + <FormattedMessage + id="Deleting this item breaks {brokenReferences} {variation}." + defaultMessage="Deleting this item breaks {brokenReferences} {variation}." + values={{ + brokenReferences: ( + <span>{this.state.brokenReferences}</span> + ), + variation: ( + <span> + {this.state.brokenReferences === 1 ? ( + <FormattedMessage + id="reference" + defaultMessage="reference" + /> + ) : ( + <FormattedMessage id="references" /> + )} + </span> + ), + }} + /> + <div className="broken-links-list"> + <FormattedMessage id="These items will have broken links" /> + <ul> + {this.state.breaches.map((breach) => ( + <li key={breach.source['@id']}> + <Link + to={flattenToAppURL(breach.source['@id'])} + title="Navigate to this item" + > + {breach.source.title} + </Link>{' '} + refers to{' '} + {breach.targets + .map((target) => ( + <Link + to={flattenToAppURL(target['@id'])} + title="Navigate to this item" + > + {target.title} + </Link> + )) + .reduce((result, item) => ( + <> + {result}, {item} + </> + ))} + </li> + ))} + </ul> + {this.state.linksAndReferencesViewLink && ( <Link to={flattenToAppURL( - this.state.brokenLinksList, + this.state.linksAndReferencesViewLink, )} > <FormattedMessage - id="View broken links list" - defaultMessage="View broken links list" + id="View links and references to this item" + defaultMessage="View links and references to this item" /> </Link> - </div> - </> - ) : null} - </p> + )} + </div> + </> + ) : null} </div> } onCancel={this.onDeleteCancel} @@ -2219,7 +2295,7 @@ export default compose( asyncConnect([ { key: 'actions', - // Dispatch async/await to make the operation syncronous, otherwise it returns + // Dispatch async/await to make the operation synchronous, otherwise it returns // before the promise is resolved promise: async ({ location, store: { dispatch } }) => await dispatch(listActions(getBaseUrl(location.pathname))), diff --git a/theme/themes/pastanaga/extras/contents.less b/theme/themes/pastanaga/extras/contents.less index e2b4f84d5c..5fe512465b 100644 --- a/theme/themes/pastanaga/extras/contents.less +++ b/theme/themes/pastanaga/extras/contents.less @@ -193,7 +193,7 @@ word-break: break-all; } - .broken-links-list-link-wrapper { + .broken-links-list { margin-top: 30px; } }