WordPress.org

Make WordPress Core

Ticket #42184: 42184.disable.diff

File 42184.disable.diff, 6.3 KB (added by westonruter, 2 years ago)

Disable theme install and delete when FTP credentials required

  • src/wp-admin/js/customize-controls.js

    diff --git src/wp-admin/js/customize-controls.js src/wp-admin/js/customize-controls.js
    index 782973a9cb..73c2b8a8bc 100644
     
    29862986                 * @returns {void}
    29872987                 */
    29882988                attachEvents: function() {
    2989                         var panel = this, toggleDisabledNotification;
     2989                        var panel = this;
    29902990
    29912991                        // Attach regular panel events.
    29922992                        api.Panel.prototype.attachEvents.apply( panel );
    29932993
    2994                         toggleDisabledNotification = function() {
     2994                        // Temporary since supplying SFTP credentials does not work yet. See #42184
     2995                        if ( api.settings.theme._filesystemCredentialsNeeded ) {
     2996                                panel.notifications.add( new api.Notification( 'theme_install_unavailable', {
     2997                                        message: api.l10n.themeInstallUnavailable,
     2998                                        type: 'info',
     2999                                        dismissible: true
     3000                                } ) );
     3001                        }
     3002
     3003                        function toggleDisabledNotifications() {
    29953004                                if ( 'publish' === api.state( 'selectedChangesetStatus' ).get() ) {
    29963005                                        panel.notifications.remove( 'theme_switch_unavailable' );
    29973006                                } else {
     
    30003009                                                type: 'warning'
    30013010                                        } ) );
    30023011                                }
    3003                         };
    3004                         toggleDisabledNotification();
    3005                         api.state( 'selectedChangesetStatus' ).bind( toggleDisabledNotification );
     3012                        }
     3013                        toggleDisabledNotifications();
     3014                        api.state( 'selectedChangesetStatus' ).bind( toggleDisabledNotifications );
    30063015
    30073016                        // Collapse panel to customize the current theme.
    30083017                        panel.contentContainer.on( 'click', '.customize-theme', function() {
     
    30963105                        var panel = this, preview, onInstallSuccess, slug = $( event.target ).data( 'slug' ), deferred = $.Deferred(), request;
    30973106                        preview = $( event.target ).hasClass( 'preview' );
    30983107
     3108                        // Temporary since supplying SFTP credentials does not work yet. See #42184.
     3109                        if ( api.settings.theme._filesystemCredentialsNeeded ) {
     3110                                deferred.reject({
     3111                                        errorCode: 'theme_install_unavailable'
     3112                                });
     3113                                return deferred.promise();
     3114                        }
     3115
    30993116                        // Prevent loading a non-active theme preview when there is a drafted/scheduled changeset.
    31003117                        if ( 'publish' !== api.state( 'selectedChangesetStatus' ).get() && slug !== api.settings.theme.stylesheet ) {
    31013118                                deferred.reject({
     
    32963313
    32973314                        event.preventDefault();
    32983315
     3316                        // Temporary since supplying SFTP credentials does not work yet. See #42184.
     3317                        if ( api.settings.theme._filesystemCredentialsNeeded ) {
     3318                                return;
     3319                        }
     3320
    32993321                        // Confirmation dialog for deleting a theme.
    33003322                        if ( ! window.confirm( api.settings.l10n.confirmDeleteTheme ) ) {
    33013323                                return;
     
    49835005                 * @since 4.2.0
    49845006                 */
    49855007                ready: function() {
    4986                         var control = this, disableSwitchButtons, updateButtons;
     5008                        var control = this;
    49875009
    4988                         disableSwitchButtons = function() {
     5010                        function disableSwitchButtons() {
    49895011                                return 'publish' !== api.state( 'selectedChangesetStatus' ).get() && control.params.theme.id !== api.settings.theme.stylesheet;
    4990                         };
    4991                         updateButtons = function() {
    4992                                 control.container.find( 'button' ).toggleClass( 'disabled', disableSwitchButtons() );
    4993                         };
     5012                        }
    49945013
    4995                         api.state( 'selectedChangesetStatus' ).bind( updateButtons );
     5014                        // Temporary special function since supplying SFTP credentials does not work yet. See #42184.
     5015                        function disableInstallButtons() {
     5016                                return disableSwitchButtons() || true === api.settings.theme._filesystemCredentialsNeeded;
     5017                        }
     5018                        function updateButtons( container ) {
     5019                                var _container = container || control.container;
     5020                                _container.find( 'button.preview' ).toggleClass( 'disabled', disableSwitchButtons() );
     5021                                _container.find( 'button.theme-install' ).toggleClass( 'disabled', disableInstallButtons() );
     5022                        }
     5023
     5024                        api.state( 'selectedChangesetStatus' ).bind( function() {
     5025                                updateButtons();
     5026                        });
    49965027                        updateButtons();
    49975028
    49985029                        control.container.on( 'touchmove', '.theme', function() {
     
    50195050                                event.preventDefault(); // Keep this AFTER the key filter above
    50205051                                section = api.section( control.section() );
    50215052                                section.showDetails( control.params.theme, function() {
    5022                                         section.overlay.find( '.theme-actions button' ).toggleClass( 'disabled', disableSwitchButtons() );
     5053                                        updateButtons( section.overlay.find( '.theme-actions' ) );
     5054
     5055                                        // Temporary special function since supplying SFTP credentials does not work yet. See #42184.
     5056                                        if ( api.settings.theme._filesystemCredentialsNeeded ) {
     5057                                                section.overlay.find( '.theme-actions .delete-theme' ).remove();
     5058                                        }
    50235059                                } );
    50245060                        });
    50255061
  • src/wp-includes/class-wp-customize-manager.php

    diff --git src/wp-includes/class-wp-customize-manager.php src/wp-includes/class-wp-customize-manager.php
    index 9127650a13..86b79115eb 100644
    final class WP_Customize_Manager { 
    46184618                        ),
    46194619                );
    46204620
     4621                // Temporarily disable installation in Customizer. See #42184.
     4622                $filesystem_method = get_filesystem_method();
     4623                ob_start();
     4624                $filesystem_credentials_are_stored = request_filesystem_credentials( self_admin_url() );
     4625                ob_end_clean();
     4626                if ( $filesystem_method != 'direct' && ! $filesystem_credentials_are_stored ) {
     4627                        $settings['theme']['_filesystemCredentialsNeeded'] = true;
     4628                }
     4629
    46214630                // Prepare Customize Section objects to pass to JavaScript.
    46224631                foreach ( $this->sections() as $id => $section ) {
    46234632                        if ( $section->check_capabilities() ) {
  • src/wp-includes/script-loader.php

    diff --git src/wp-includes/script-loader.php src/wp-includes/script-loader.php
    index 96ecd1dacd..c46b78daaf 100644
    function wp_default_scripts( &$scripts ) { 
    593593                ),
    594594                'scheduleDescription' => __( 'Schedule your customization changes to publish ("go live") at a future date.' ),
    595595                'themePreviewUnavailable' => __( 'Sorry, you can’t preview new themes when you have changes scheduled or saved as a draft. Please publish your changes, or wait until they publish to preview new themes.' ),
     596                'themeInstallUnavailable' => sprintf(
     597                        /* translators: %s is URL to Add Themes admin screen */
     598                        __( 'You won&#8217;t be able to install new themes from here yet since your install requires SFTP credentials. For now, please <a href="%s">Add Themes</a> in the admin.' ),
     599                        esc_url( admin_url( 'theme-install.php' ) )
     600                ),
    596601        ) );
    597602        $scripts->add( 'customize-selective-refresh', "/wp-includes/js/customize-selective-refresh$suffix.js", array( 'jquery', 'wp-util', 'customize-preview' ), false, 1 );
    598603