Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Block Editor: Add block lock setting #39566

Merged
merged 5 commits into from
Mar 24, 2022
Merged

Block Editor: Add block lock setting #39566

merged 5 commits into from
Mar 24, 2022

Conversation

Mamaduka
Copy link
Member

@Mamaduka Mamaduka commented Mar 18, 2022

What?

Part of #29864.

PR introduces new __experimentalCanLockBlocks block editor setting.

Why?

Currently, a new Block Locking UI is available for every user. The new settings will allow developers/site admins to enable/disable UI based on specific conditions (seen in the example below).

How?

The setting value can be set on the server-side using the block_editor_settings_all filter; it's then used to hide the Options menu item and disable the "Lock" button in the block toolbar.

add_filter(
	'block_editor_settings_all',
	static function( $settings, $context ) {
		// Allow for the Editor role and above.
		$settings['__experimentalCanLockBlocks'] = current_user_can( 'delete_others_posts' );

		// Only enable for specific user(s).
		$user = wp_get_current_user();
		if ( in_array( $user->user_email, array( '[email protected]' ), true ) ) {
			$settings['__experimentalCanLockBlocks'] = false;
		}

		// Disable for posts/pages.
		if ( $context->post && $context->post->post_type === 'page' ) {
			$settings['__experimentalCanLockBlocks'] = false;
		}

		return $settings;
	},
	10,
	2
);

Questions

  • Do we want to disable "Code editor" if a user cannot edit the block lock state?
  • The lock icon is greyed out when disabled; should I leave it this way?

Testing Instructions

  1. Open a Post or Page
  2. Insert a block
  3. Lock it.
  4. Use any of the conditional settings from example.
  5. Confirm that Block Locking UI is disabled.

Screenshots or screencast

CleanShot 2022-03-18 at 12 21 36

@Mamaduka Mamaduka requested a review from ellatrix as a code owner March 18, 2022 06:09
@Mamaduka Mamaduka self-assigned this Mar 18, 2022
@Mamaduka Mamaduka added [Feature] Blocks Overall functionality of blocks [Package] Block editor /packages/block-editor [Type] Feature New feature to highlight in changelogs. labels Mar 18, 2022
@Mamaduka
Copy link
Member Author

@senadir, I plan to add a block support flag in separate PR.

@@ -157,6 +158,7 @@ export const SETTINGS_DEFAULTS = {
__experimentalBlockPatternCategories: [],
__experimentalSpotlightEntityBlocks: [],
__experimentalGenerateAnchors: false,
__experimentalCanLockBlocks: true,
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want to ship this new setting as experimental?

@github-actions
Copy link

github-actions bot commented Mar 18, 2022

Size Change: +57 B (0%)

Total Size: 1.21 MB

Filename Size Change
build/block-editor/index.min.js 146 kB +49 B (0%)
build/editor/index.min.js 38.4 kB +8 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/admin-manifest/index.min.js 1.24 kB
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
build/block-directory/index.min.js 6.49 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/style-rtl.css 15.1 kB
build/block-editor/style.css 15.1 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/avatar/editor-rtl.css 59 B
build/block-library/blocks/avatar/editor.css 59 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 445 B
build/block-library/blocks/button/editor.css 445 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 103 B
build/block-library/blocks/code/style.css 103 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-query-loop/editor-rtl.css 95 B
build/block-library/blocks/comments-query-loop/editor.css 95 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.56 kB
build/block-library/blocks/cover/style.css 1.56 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 353 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 961 B
build/block-library/blocks/gallery/editor.css 964 B
build/block-library/blocks/gallery/style-rtl.css 1.51 kB
build/block-library/blocks/gallery/style.css 1.51 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 529 B
build/block-library/blocks/image/style.css 535 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 447 B
build/block-library/blocks/latest-posts/style.css 446 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 493 B
build/block-library/blocks/media-text/style.css 490 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 708 B
build/block-library/blocks/navigation-link/editor.css 706 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 375 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/style-rtl.css 1.89 kB
build/block-library/blocks/navigation/style.css 1.88 kB
build/block-library/blocks/navigation/view.min.js 2.85 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 521 B
build/block-library/blocks/post-comments/style.css 521 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 323 B
build/block-library/blocks/post-template/style.css 323 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 370 B
build/block-library/blocks/pullquote/style.css 370 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 201 B
build/block-library/blocks/quote/style.css 201 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 140 B
build/block-library/blocks/separator/editor.css 140 B
build/block-library/blocks/separator/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 759 B
build/block-library/blocks/site-logo/editor.css 759 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 235 B
build/block-library/blocks/template-part/editor.css 235 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 934 B
build/block-library/common.css 932 B
build/block-library/editor-rtl.css 10 kB
build/block-library/editor.css 10 kB
build/block-library/index.min.js 171 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 11.2 kB
build/block-library/style.css 11.2 kB
build/block-library/theme-rtl.css 689 B
build/block-library/theme.css 694 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 46.8 kB
build/components/index.min.js 218 kB
build/components/style-rtl.css 15.6 kB
build/components/style.css 15.6 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 14.3 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.39 kB
build/customize-widgets/style.css 1.39 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 8.19 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.53 kB
build/edit-navigation/index.min.js 16.1 kB
build/edit-navigation/style-rtl.css 4.04 kB
build/edit-navigation/style.css 4.05 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 29.8 kB
build/edit-post/style-rtl.css 7.07 kB
build/edit-post/style.css 7.07 kB
build/edit-site/index.min.js 45 kB
build/edit-site/style-rtl.css 7.58 kB
build/edit-site/style.css 7.56 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.4 kB
build/edit-widgets/style.css 4.39 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 4.29 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.12 kB
build/nux/style-rtl.css 751 B
build/nux/style.css 749 B
build/plugins/index.min.js 1.98 kB
build/preferences/index.min.js 1.2 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 611 B
build/react-i18n/index.min.js 704 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.69 kB
build/reusable-blocks/index.min.js 2.24 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.99 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

@Mamaduka Mamaduka mentioned this pull request Mar 18, 2022
1 task
@jasmussen
Copy link
Contributor

Nice one. I may be doing something wrong (I'm lazy and pasting the filters in functions.php on my active theme), but I can't get it to quite lock these things. So I'm commenting on your questions.

Do we want to disable "Code editor" if a user cannot edit the block lock state?

There's some nuance to this question which makes it non trivial. My instinct would be that disabling the code editor just because a single block is locked, would not feel intuitive.

But there might be a good separate conversation to have, to allow themes to disable the code editor altogether.

It's the mix state: locked and unlocked blocks, that's tricky.

The lock icon is greyed out when disabled; should I leave it this way?

I like to think that the icon serves an informative purpose, even when it isn't clickable, and therefore deserves full contrast (i.e. not graying).

@Mamaduka
Copy link
Member Author

Mamaduka commented Mar 18, 2022

Nice one. I may be doing something wrong (I'm lazy and pasting the filters in functions.php on my active theme), but I can't get it to quite lock these things. So I'm commenting on your questions.

Try "Pages" my snippet disables new locking UI there 😄

But there might be a good separate conversation to have, to allow themes to disable the code editor altogether.

Sure, this can be addressed in follow-up PR(s).

I will remove opacity for the icon.

Thanks for the feedback, Joen.

@critterverse
Copy link
Contributor

Nice! The full contrast lock works really well:

locked_sm

I'm not sure we need the focus outline on the icon when the menu is inaccessible 🤔 Maybe it could be similar to the "Save draft" button in the top bar where there's a visible focus indicator when the button is active but not when the button is inactive:

save-draft

@mtias
Copy link
Member

mtias commented Mar 18, 2022

Nice! I think we should not render the lock icon if the user cannot interact with it. It'd keep things leaner and on parity with the current experience.

@Mamaduka
Copy link
Member Author

Mamaduka commented Mar 21, 2022

Thanks for the feedback, everyone.

I've updated the rendering logic for the toolbar icon.

@Mamaduka Mamaduka added the Needs Dev Note Requires a developer note for a major WordPress release cycle label Mar 21, 2022
@Mamaduka
Copy link
Member Author

It would be nice if we could ship this and #39568 alongside the UI in the 12.9 release.

Copy link
Contributor

@senadir senadir left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested this and it looks good to me!

@Mamaduka
Copy link
Member Author

Thanks for the review, @senadir.

I'm going to merge this, and we can continue iteration in #39568.

@Mamaduka Mamaduka merged commit fa0d12e into trunk Mar 24, 2022
@Mamaduka Mamaduka deleted the add/block-lock-settings branch March 24, 2022 08:47
@github-actions github-actions bot added this to the Gutenberg 13.0 milestone Mar 24, 2022
draganescu pushed a commit that referenced this pull request Mar 30, 2022
    * Register settings

    * Use setting

    * Use aria-disabled

    * No opacity

    * Don't render toolbar icon if user can't interact

Author:    George Mamadashvili <[email protected]>
Date:      Thu Mar 24 12:47:37 2022 +0400
@Mamaduka Mamaduka removed the Needs Dev Note Requires a developer note for a major WordPress release cycle label Sep 19, 2022
@gsailland
Copy link

gsailland commented Mar 28, 2023

Hi. I don't know if I am posting in the correct place.
I am trying to disable site layout editing for some users roles;
For exemple to prevent translators to modify layout but let them change text.
I can't find
//(online/console/trials&errors/stackoverflow/https://github.com/WordPress/gutenberg/)
any way to

  1. (on gutenberg load ) lock all blocks
    https://developer.wordpress.org/block-editor/reference-guides/packages/packages-dom-ready/#default
    https://developer.wordpress.org/block-editor/reference-guides/block-api/block-templates/#locking

  2. (on gutenberg save ) save original lock state

The documentation is just so not clear! (As me too)

What I am trying:
let blocks=[] wp.domReady(function(){ let blocks=wp.data.select('core/editor').getBlocks() // this is empty array [] console.log(blocks) }) const lockBlocks = createHigherOrderComponent( ( Block ) => { return ( props ) => { /* const { isBlockSelected, getBlockMode, isSelectionEnabled, getTemplateLock, __unstableGetBlockWithoutInnerBlocks, canRemoveBlock, canMoveBlock, } = select( blockEditorStore ); */ //const { name } = props; //const { size } = props.attributes; //console.log(Block,props) //props.canMove=props.canRemove=false //props.isLocked=true /* props.setAttributes({ lock:{ move:true, remove:true, //isLocked:true, } }) */ return el(Block , { ...props//, //canMove:false, //canRemove:false, //isLocked:true, }) }; }, 'addAdvancedControls'); addFilter( 'editor.BlockListBlock', 'URBEL/lock-blocks', lockBlocks );

Can somebody help me listing+disabling all blocks editing?
I am lost

@Mamaduka
Copy link
Member Author

Hi, @GregoireSailland

The block-locking reference in this PR only affects block movement and removing features. You can't control block settings visibility using this feature.

Have you tried the content-only block editing/locking feature that shipped in WordPress 6.1?

Resources:

@gsailland
Copy link

gsailland commented Mar 29, 2023

@Mamaduka
Thank you for your reply.
This is not What i am looking for, not in the current state of this functionality.
When using
function myplugin_register_template() { $post_type_object = get_post_type_object( 'page' ); $post_type_object->template= ... $post_type_object->template_lock = 'contentOnly'; } add_action( 'init', 'myplugin_register_template',PHP_INT_MAX );
this is not locking the template for already created pages with layouts that differ from the $post_type_object->template

I ended up doing this:
https://github.com/GregoireSailland/user-role-block-editor-layout/blob/main/assets/scripts.js

_ I need now to not preserve lock state when saving... (restore like before locking all)

@gsailland
Copy link

gsailland commented Mar 30, 2023

@Mamaduka Sorry to bother you :)
I found the way to Lock blocks programmatically:


const lockBlocks = createHigherOrderComponent( ( Block ) => {
    return ( props ) => {
        if(!(props.attributes.lock && props.attributes.lock.move==true && props.attributes.lock.remove==true)){
            console.warn('locking')
            props.attributes.old_lock=props.attributes?.lock||null
            //props.attributes.templateLock=true //is there something like that to do?
            props.attributes.lock={
				move:true,
				remove:true,
                                //isLocked:true, //maybe instead of "old_lock"
            }
		
        }
    }
    return el(Block,{...props})
    };
}, 'lockBlocks');
addFilter('editor.BlockListBlock','URBEL/lock-blocks',lockBlocks);

But when blocks are saved, they keep the lock state
I can't find a filter or any way to restore the block lock sate on save
I would like to restore the state with props.attributes.old_lock
Thanks in advance
I already tried 'blocks.getSaveContent.extraProps' and 'blocks.getSaveElement' filters without success

@Mamaduka
Copy link
Member Author

@GregoireSailland,

Do you mind creating a new issue? Since our current discussion isn't related to this PR.

P.S. I'm out of the office for a week, but I will be happy to have a look at this issue when I'm back.

@gsailland
Copy link

Thanks.
I didn't thought this was an issue and your pull request was the most relevant to my problem I could find.
I am not used to post and use github pull requests/issues/discussions
Thanks in advance for your future help !

@Mamaduka
Copy link
Member Author

The discussions might be better suited for these typo of questions - https://github.com/WordPress/gutenberg/discussions/new/choose.

@gsailland
Copy link

gsailland commented Mar 30, 2023

Thanks if anyone interested I opened a discution related here:
"Trying to lock post blocks on load and restore lock state on save"
#49481

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Blocks Overall functionality of blocks [Package] Block editor /packages/block-editor [Type] Feature New feature to highlight in changelogs.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants