Skip to content

Commit 2be5142

Browse files
User can see language in split view without permission (#3639)
* added permission logic * Automatic frontend build * updated the logic of editable languages * Automatic frontend build --------- Co-authored-by: ValeriaMaltseva <11871778+ValeriaMaltseva@users.noreply.github.com>
1 parent 66213be commit 2be5142

749 files changed

Lines changed: 30497 additions & 7 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

assets/js/src/core/components/form/localisation/localized-fields/form-item/types/form-control-with-element-context.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { useElementContext } from '@Pimcore/modules/element/hooks/use-element-co
2424
import { useLanguageSelection } from '@Pimcore/components/language-selection'
2525
import { useElementDraft } from '@Pimcore/modules/element/hooks/use-element-draft'
2626
import { useUser } from '@Pimcore/modules/auth/hooks/use-user'
27+
import { useLocalizedFields } from '../../provider/localized-fields-provider/use-localized-fields'
2728

2829
export interface KeyedFormItemControlProps {
2930
children: React.ReactNode
@@ -41,15 +42,21 @@ export const FormControlWithElementContext = ({ children, ...props }: KeyedFormI
4142
const element = useElementContext()
4243
const elementDraft = useElementDraft(element.id, element.elementType)
4344
const languageSelection = useLanguageSelection()
45+
const localizedContext = useLocalizedFields()
46+
const activeLanguage = localizedContext?.locales[0] ?? languageSelection.currentLanguage
4447

4548
if ('permissions' in elementDraft) {
4649
const permissions: Record<string, any> = elementDraft.permissions as Record<string, any>
4750
let editableLanguages: string[] = permissions?.localizedEdit?.split(',') ?? []
48-
if ((editableLanguages.length === 1 && editableLanguages[0] === 'default') || (editableLanguages.length === 0)) {
51+
52+
const isEmptyEditableLanguages = editableLanguages.length === 0
53+
54+
// empty array or 'default' means all languages are editable
55+
if ((editableLanguages.length === 1 && editableLanguages[0] === 'default') || isEmptyEditableLanguages) {
4956
editableLanguages = Array.isArray(user.contentLanguages) ? user.contentLanguages as string[] : []
5057
}
5158

52-
isDisabled = !editableLanguages.includes(languageSelection.currentLanguage)
59+
isDisabled = !isEmptyEditableLanguages && !editableLanguages.includes(activeLanguage)
5360
}
5461

5562
if (!isValidElement(Child)) {
@@ -64,5 +71,5 @@ export const FormControlWithElementContext = ({ children, ...props }: KeyedFormI
6471
{ ...props }
6572
disabled={ Child.props.disabled === true || (props.disabled !== true ? isDisabled : false) }
6673
/>
67-
), [Child, props])
74+
), [Child, isDisabled, props])
6875
}

assets/js/src/core/modules/data-object/editor/toolbar/language-comparison-view/language-comparison-content.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { useStyles } from './language-comparison-modal.styles'
2626

2727
interface ILanguageComparisonColumnProps {
2828
locales: string[]
29+
editableLanguages: string[]
2930
layoutData: ILocalizedFieldDescriptor[]
3031
isAllowedToEdit: boolean
3132
}
@@ -52,7 +53,7 @@ const groupIntoSections = (items: ILocalizedFieldDescriptor[]): ILocalizedSectio
5253
return sections
5354
}
5455

55-
export const LanguageComparisonContent = ({ layoutData, locales, isAllowedToEdit }: ILanguageComparisonColumnProps): React.JSX.Element => {
56+
export const LanguageComparisonContent = ({ layoutData, locales, editableLanguages, isAllowedToEdit }: ILanguageComparisonColumnProps): React.JSX.Element => {
5657
const { styles } = useStyles()
5758

5859
const renderSectionTitle = ({ breadcrumbTitle, hideSectionTitle }: { breadcrumbTitle: string, hideSectionTitle: boolean }): React.JSX.Element | null => {
@@ -85,6 +86,9 @@ export const LanguageComparisonContent = ({ layoutData, locales, isAllowedToEdit
8586
const shouldWrapLocalizedProvider = item.localeInFormPath !== true
8687
const fieldKey = `${item.formPath.join('.')}-${fieldIndex}-${locale}`
8788

89+
// empty array means all languages are editable
90+
const isEmptyEditableLanguages = editableLanguages.length === 0
91+
8892
const fieldNode = (
8993
<CombinedFieldNameProvider
9094
combinedFieldNameParent={ combinedFieldNameParent }
@@ -93,7 +97,7 @@ export const LanguageComparisonContent = ({ layoutData, locales, isAllowedToEdit
9397
<Form.Group name={ resolvedGroupPath }>
9498
<ObjectComponent
9599
{ ...item.fieldData }
96-
noteditable={ !isAllowedToEdit }
100+
noteditable={ !isAllowedToEdit || (!isEmptyEditableLanguages && !editableLanguages.includes(locale)) }
97101
/>
98102
</Form.Group>
99103
</CombinedFieldNameProvider>

assets/js/src/core/modules/data-object/editor/toolbar/language-comparison-view/language-comparison-modal.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ export const LanguageComparisonModal = ({ open, onClose }: LanguageComparisonMod
6969
const [changedValues, setChangedValues] = useState<Record<string, any>>({})
7070

7171
const isAllowedToEdit = checkElementPermission(dataObject?.permissions, 'save')
72+
const viewableLanguages: string[] = useMemo(() => dataObject?.permissions?.localizedView?.split(',') ?? [], [dataObject?.permissions])
73+
const editableLanguages: string[] = useMemo(() => dataObject?.permissions?.localizedEdit?.split(',') ?? [], [dataObject?.permissions])
7274

7375
const initialValues: Partial<any> = useMemo(() => {
7476
return editForm.getFieldsValue(true)
@@ -86,11 +88,11 @@ export const LanguageComparisonModal = ({ open, onClose }: LanguageComparisonMod
8688

8789
useEffect(() => {
8890
if (open) {
89-
const languagesByPriority = [currentLanguage, ...contentLanguages.filter(language => language !== currentLanguage)]
91+
const languagesByPriority = [currentLanguage, ...contentLanguages.filter(language => viewableLanguages.includes(language) && language !== currentLanguage)]
9092

9193
setSelectedLocales([languagesByPriority[0] ?? currentLanguage, languagesByPriority[1] ?? null])
9294
}
93-
}, [open, currentLanguage, contentLanguages])
95+
}, [open, currentLanguage, contentLanguages, viewableLanguages])
9496

9597
useEffect(() => {
9698
if (isNil(layoutData) || !open) {
@@ -211,6 +213,7 @@ export const LanguageComparisonModal = ({ open, onClose }: LanguageComparisonMod
211213
preserve
212214
>
213215
<LanguageComparisonContent
216+
editableLanguages={ editableLanguages }
214217
isAllowedToEdit={ isAllowedToEdit }
215218
layoutData={ localizedFields }
216219
locales={ selectedLocales }

public/build/18ccfdbc-0520-49b3-9f34-9e1fd5400fa4/documentEditorIframe.html

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/18ccfdbc-0520-49b3-9f34-9e1fd5400fa4/entrypoints.json

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/18ccfdbc-0520-49b3-9f34-9e1fd5400fa4/exposeRemote.js

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/18ccfdbc-0520-49b3-9f34-9e1fd5400fa4/main.html

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/18ccfdbc-0520-49b3-9f34-9e1fd5400fa4/manifest.json

Lines changed: 33 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/18ccfdbc-0520-49b3-9f34-9e1fd5400fa4/mf-manifest.json

Lines changed: 43 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/18ccfdbc-0520-49b3-9f34-9e1fd5400fa4/mf-stats.json

Lines changed: 51 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)