From 2e6199df033ca8b39ed89221f9b62c820ac88b0a Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Tue, 26 Mar 2019 10:23:01 +0100 Subject: [PATCH] Refactor the MediaUpload components to check upload permissions by checking the upload handler existence (#14548) --- lib/packages-dependencies.php | 1 - package-lock.json | 83 +++++-------------- packages/block-editor/package.json | 1 - .../src/components/media-placeholder/index.js | 37 +++------ .../src/components/media-upload/check.js | 9 +- .../editor/src/components/provider/index.js | 12 ++- 6 files changed, 43 insertions(+), 100 deletions(-) diff --git a/lib/packages-dependencies.php b/lib/packages-dependencies.php index 3a59c5de5f282..fe839ee056704 100644 --- a/lib/packages-dependencies.php +++ b/lib/packages-dependencies.php @@ -52,7 +52,6 @@ 'wp-blocks', 'wp-compose', 'wp-components', - 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', diff --git a/package-lock.json b/package-lock.json index e2c01ebedbc7d..8fafc8cf6c850 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2612,7 +2612,6 @@ "@wordpress/blocks": "file:packages/blocks", "@wordpress/components": "file:packages/components", "@wordpress/compose": "file:packages/compose", - "@wordpress/core-data": "file:packages/core-data", "@wordpress/data": "file:packages/data", "@wordpress/dom": "file:packages/dom", "@wordpress/element": "file:packages/element", @@ -4903,8 +4902,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -4925,14 +4923,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4947,20 +4943,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -5077,8 +5070,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -5090,7 +5082,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5105,7 +5096,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5113,14 +5103,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5139,7 +5127,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -5220,8 +5207,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -5233,7 +5219,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -5319,8 +5304,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -5356,7 +5340,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5376,7 +5359,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -5420,14 +5402,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -9071,8 +9051,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -9093,14 +9072,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9115,20 +9092,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -9245,8 +9219,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -9258,7 +9231,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -9273,7 +9245,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -9281,14 +9252,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -9307,7 +9276,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -9388,8 +9356,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -9401,7 +9368,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -9487,8 +9453,7 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -9524,7 +9489,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -9544,7 +9508,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -9588,14 +9551,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, diff --git a/packages/block-editor/package.json b/packages/block-editor/package.json index 592a06e240e8e..fc1b68ce23788 100644 --- a/packages/block-editor/package.json +++ b/packages/block-editor/package.json @@ -28,7 +28,6 @@ "@wordpress/blocks": "file:../blocks", "@wordpress/components": "file:../components", "@wordpress/compose": "file:../compose", - "@wordpress/core-data": "file:../core-data", "@wordpress/data": "file:../data", "@wordpress/dom": "file:../dom", "@wordpress/element": "file:../element", diff --git a/packages/block-editor/src/components/media-placeholder/index.js b/packages/block-editor/src/components/media-placeholder/index.js index 42fa7e7d8fbe7..7b6837588cd99 100644 --- a/packages/block-editor/src/components/media-placeholder/index.js +++ b/packages/block-editor/src/components/media-placeholder/index.js @@ -2,7 +2,6 @@ * External dependencies */ import { - defaultTo, every, get, isArray, @@ -152,18 +151,18 @@ export class MediaPlaceholder extends Component { const { allowedTypes = [], className, - hasUploadPermissions, icon, isAppender, labels = {}, notices, onSelectURL, + mediaUpload, } = this.props; let instructions = labels.instructions; let title = labels.title; - if ( ! hasUploadPermissions && ! onSelectURL ) { + if ( ! mediaUpload && ! onSelectURL ) { instructions = __( 'To edit this block, you need permission to upload media.' ); } @@ -173,27 +172,15 @@ export class MediaPlaceholder extends Component { const isImage = isOneType && 'image' === allowedTypes[ 0 ]; const isVideo = isOneType && 'video' === allowedTypes[ 0 ]; - if ( instructions === undefined ) { - if ( hasUploadPermissions ) { - instructions = __( 'Drag a media file, upload a new one or select a file from your library.' ); - - if ( isAudio ) { - instructions = __( 'Drag an audio, upload a new one or select a file from your library.' ); - } else if ( isImage ) { - instructions = __( 'Drag an image, upload a new one or select a file from your library.' ); - } else if ( isVideo ) { - instructions = __( 'Drag a video, upload a new one or select a file from your library.' ); - } - } else if ( ! hasUploadPermissions && onSelectURL ) { - instructions = __( 'Given your current role, you can only link a media file, you cannot upload.' ); - - if ( isAudio ) { - instructions = __( 'Given your current role, you can only link an audio, you cannot upload.' ); - } else if ( isImage ) { - instructions = __( 'Given your current role, you can only link an image, you cannot upload.' ); - } else if ( isVideo ) { - instructions = __( 'Given your current role, you can only link a video, you cannot upload.' ); - } + if ( instructions === undefined && mediaUpload ) { + instructions = __( 'Drag a media file, upload a new one or select a file from your library.' ); + + if ( isAudio ) { + instructions = __( 'Drag an audio, upload a new one or select a file from your library.' ); + } else if ( isImage ) { + instructions = __( 'Drag an image, upload a new one or select a file from your library.' ); + } else if ( isVideo ) { + instructions = __( 'Drag a video, upload a new one or select a file from your library.' ); } } @@ -400,11 +387,9 @@ export class MediaPlaceholder extends Component { } const applyWithSelect = withSelect( ( select ) => { - const { canUser } = select( 'core' ); const { getSettings } = select( 'core/block-editor' ); return { - hasUploadPermissions: defaultTo( canUser( 'create', 'media' ), true ), mediaUpload: getSettings().__experimentalMediaUpload, }; } ); diff --git a/packages/block-editor/src/components/media-upload/check.js b/packages/block-editor/src/components/media-upload/check.js index 5dde4c69fa827..3d94e3b3dd905 100644 --- a/packages/block-editor/src/components/media-upload/check.js +++ b/packages/block-editor/src/components/media-upload/check.js @@ -1,8 +1,3 @@ -/** - * External dependencies - */ -import { defaultTo } from 'lodash'; - /** * WordPress dependencies */ @@ -13,9 +8,9 @@ export function MediaUploadCheck( { hasUploadPermissions, fallback = null, child } export default withSelect( ( select ) => { - const { canUser } = select( 'core' ); + const { getSettings } = select( 'core/block-editor' ); return { - hasUploadPermissions: defaultTo( canUser( 'create', 'media' ), true ), + hasUploadPermissions: !! getSettings().__experimentalMediaUpload, }; } )( MediaUploadCheck ); diff --git a/packages/editor/src/components/provider/index.js b/packages/editor/src/components/provider/index.js index 399516dde7bd1..ca1cbe0262686 100644 --- a/packages/editor/src/components/provider/index.js +++ b/packages/editor/src/components/provider/index.js @@ -1,7 +1,7 @@ /** * External dependencies */ -import { map, pick } from 'lodash'; +import { map, pick, defaultTo } from 'lodash'; import memize from 'memize'; /** @@ -71,7 +71,7 @@ class EditorProvider extends Component { } } - getBlockEditorSettings( settings, meta, onMetaChange, reusableBlocks ) { + getBlockEditorSettings( settings, meta, onMetaChange, reusableBlocks, hasUploadPermissions ) { return { ...pick( settings, [ 'alignWide', @@ -97,7 +97,7 @@ class EditorProvider extends Component { onChange: onMetaChange, }, __experimentalReusableBlocks: reusableBlocks, - __experimentalMediaUpload: mediaUpload, + __experimentalMediaUpload: hasUploadPermissions ? mediaUpload : undefined, __experimentalFetchLinkSuggestions: fetchLinkSuggestions, }; } @@ -137,6 +137,7 @@ class EditorProvider extends Component { onMetaChange, reusableBlocks, resetEditorBlocksWithoutUndoLevel, + hasUploadPermissions, } = this.props; if ( ! isReady ) { @@ -144,7 +145,7 @@ class EditorProvider extends Component { } const editorSettings = this.getBlockEditorSettings( - settings, meta, onMetaChange, reusableBlocks + settings, meta, onMetaChange, reusableBlocks, hasUploadPermissions ); return ( @@ -169,11 +170,14 @@ export default compose( [ getEditedPostAttribute, __experimentalGetReusableBlocks, } = select( 'core/editor' ); + const { canUser } = select( 'core' ); + return { isReady: isEditorReady(), blocks: getEditorBlocks(), meta: getEditedPostAttribute( 'meta' ), reusableBlocks: __experimentalGetReusableBlocks(), + hasUploadPermissions: defaultTo( canUser( 'create', 'media' ), true ), }; } ), withDispatch( ( dispatch ) => {