Make WordPress Core

Ticket #30594: 30594.diff

File 30594.diff, 7.3 KB (added by igmoweb, 11 years ago)

New functions + Unit tests

  • src/wp-admin/network/themes.php

     
    2929$referer = remove_query_arg( $temp_args, wp_get_referer() );
    3030
    3131if ( $action ) {
    32         $allowed_themes = get_site_option( 'allowedthemes' );
    3332        switch ( $action ) {
    3433                case 'enable':
    3534                        check_admin_referer('enable-theme_' . $_GET['theme']);
    36                         $allowed_themes[ $_GET['theme'] ] = true;
    37                         update_site_option( 'allowedthemes', $allowed_themes );
     35                        wp_network_enable_theme( $_GET['theme'] );
    3836                        if ( false === strpos( $referer, '/network/themes.php' ) )
    3937                                wp_redirect( network_admin_url( 'themes.php?enabled=1' ) );
    4038                        else
    … …  
    4240                        exit;
    4341                case 'disable':
    4442                        check_admin_referer('disable-theme_' . $_GET['theme']);
    45                         unset( $allowed_themes[ $_GET['theme'] ] );
    46                         update_site_option( 'allowedthemes', $allowed_themes );
     43                        wp_network_disable_theme( $_GET['theme'] );
    4744                        wp_safe_redirect( add_query_arg( 'disabled', '1', $referer ) );
    4845                        exit;
    4946                case 'enable-selected':
    … …  
    5350                                wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) );
    5451                                exit;
    5552                        }
    56                         foreach ( (array) $themes as $theme )
    57                                 $allowed_themes[ $theme ] = true;
    58                         update_site_option( 'allowedthemes', $allowed_themes );
     53                        wp_network_enable_theme( (array) $themes );
    5954                        wp_safe_redirect( add_query_arg( 'enabled', count( $themes ), $referer ) );
    6055                        exit;
    6156                case 'disable-selected':
    … …  
    6560                                wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) );
    6661                                exit;
    6762                        }
    68                         foreach ( (array) $themes as $theme )
    69                                 unset( $allowed_themes[ $theme ] );
    70                         update_site_option( 'allowedthemes', $allowed_themes );
     63                        wp_network_disable_theme( (array) $themes );
    7164                        wp_safe_redirect( add_query_arg( 'disabled', count( $themes ), $referer ) );
    7265                        exit;
    7366                case 'update-selected' :
  • src/wp-includes/class-wp-theme.php

     
    12831283        }
    12841284
    12851285        /**
     1286         * Enable a theme for a whole network
     1287         *
     1288         * @param mixed $stylesheet Stylesheet name or array of stylesheets
     1289         * @access public
     1290         */
     1291        public static function network_enable_theme( $stylesheets ) {
     1292            if ( ! is_array( $stylesheets ) )
     1293                    $stylesheets = array( $stylesheets );
     1294
     1295            $allowed_themes = get_site_option( 'allowedthemes' );
     1296
     1297            foreach ( $stylesheets as $stylesheet )
     1298                $allowed_themes[ $stylesheet ] = true;
     1299
     1300            update_site_option( 'allowedthemes', $allowed_themes );
     1301    }
     1302
     1303        /**
     1304         * Disable a theme for a whole network
     1305         *
     1306         * @param mixed $stylesheet Stylesheet name or array of stylesheets
     1307         * @access public
     1308         */
     1309        public static function network_disable_theme( $stylesheets ) {
     1310        if ( ! is_array( $stylesheets ) )
     1311            $stylesheets = array( $stylesheets );
     1312
     1313        $allowed_themes = get_site_option( 'allowedthemes' );
     1314
     1315        foreach ( $stylesheets as $stylesheet ) {
     1316                if ( isset( $allowed_themes[ $stylesheet ] ) )
     1317                unset( $allowed_themes[ $stylesheet ] );
     1318        }
     1319
     1320        update_site_option( 'allowedthemes', $allowed_themes );
     1321    }
     1322
     1323        /**
    12861324         * Sort themes by name.
    12871325         *
    12881326         * @since 3.4.0
  • src/wp-includes/ms-functions.php

     
    25062506         */
    25072507        return apply_filters( 'subdirectory_reserved_names', $names );
    25082508}
     2509
     2510
     2511/**
     2512 * Enable a theme for a whole network
     2513 *
     2514 * @uses WP_Theme::network_enable_theme()
     2515 *
     2516 * @param mixed $stylesheet Stylesheet name or array of stylesheets
     2517 */
     2518function wp_network_enable_theme( $stylesheets ) {
     2519
     2520        WP_Theme::network_enable_theme( $stylesheets );
     2521
     2522}
     2523
     2524/**
     2525 * Disable a theme network wide
     2526 *
     2527 * @uses WP_Theme::network_disable_theme()
     2528 *
     2529 * @param mixed $stylesheet Stylesheet name or array of stylesheets
     2530 */
     2531function wp_network_disable_theme( $stylesheets ) {
     2532
     2533        WP_Theme::network_disable_theme( $stylesheets );
     2534
     2535}
     2536 No newline at end of file
  • tests/phpunit/tests/multisite/network.php

     
    249249                $dashboard_blog = get_dashboard_blog();
    250250                $this->assertEquals( $blog_id, $dashboard_blog->blog_id );
    251251        }
     252
     253        /**
     254         * @ticket 30594
     255         */
     256        function test_network_enable_themes() {
     257                // Test one theme
     258                $theme = 'testtheme-1';
     259                wp_network_enable_theme( $theme );
     260                $enabled = get_site_option( 'allowedthemes' );
     261                $this->assertArrayHasKey( 'testtheme-1', $enabled );
     262
     263                // And enable again
     264                wp_network_enable_theme( $theme );
     265                $enabled = get_site_option( 'allowedthemes' );
     266                $this->assertArrayHasKey( 'testtheme-1', $enabled );
     267
     268                // Test an array of themes
     269                $themes = array( 'testtheme-2', 'testtheme-3' );
     270                wp_network_enable_theme( $themes );
     271                $enabled = get_site_option( 'allowedthemes' );
     272                $this->assertArrayHasKey( 'testtheme-1', $enabled );
     273                $this->assertArrayHasKey( 'testtheme-2', $enabled );
     274                $this->assertArrayHasKey( 'testtheme-3', $enabled );
     275
     276                // And enable again
     277                wp_network_enable_theme( $themes );
     278                $enabled = get_site_option( 'allowedthemes' );
     279                $this->assertArrayHasKey( 'testtheme-1', $enabled );
     280                $this->assertArrayHasKey( 'testtheme-2', $enabled );
     281                $this->assertArrayHasKey( 'testtheme-3', $enabled );
     282
     283        }
     284
     285        /**
     286         * @ticket 30594
     287         */
     288        function test_network_disable_theme() {
     289                // First, enable a few themes
     290                $themes = array( 'testtheme-1', 'testtheme-2', 'testtheme-3', 'testtheme-4' );
     291                wp_network_enable_theme( $themes );
     292
     293                // Disable one only theme
     294                wp_network_disable_theme( 'testtheme-2' );
     295                $enabled = get_site_option( 'allowedthemes' );
     296
     297                $this->assertArrayHasKey( 'testtheme-1', $enabled );
     298                $this->assertArrayHasKey( 'testtheme-3', $enabled );
     299                $this->assertArrayHasKey( 'testtheme-4', $enabled );
     300                $this->assertFalse( isset( $enabled['testtheme-2'] ) );
     301
     302                // And disable again
     303                wp_network_disable_theme( 'testtheme-2' );
     304                $enabled = get_site_option( 'allowedthemes' );
     305                $this->assertArrayHasKey( 'testtheme-1', $enabled );
     306                $this->assertArrayHasKey( 'testtheme-3', $enabled );
     307                $this->assertArrayHasKey( 'testtheme-4', $enabled );
     308                $this->assertFalse( isset( $enabled['testtheme-2'] ) );
     309
     310
     311                // Disable an array of themes
     312                $remove = array( 'testtheme-1', 'testtheme-3' );
     313                wp_network_disable_theme( $remove );
     314                $enabled = get_site_option( 'allowedthemes' );
     315                $this->assertArrayHasKey( 'testtheme-4', $enabled );
     316                $this->assertFalse( isset( $enabled['testtheme-1'] ) );
     317                $this->assertFalse( isset( $enabled['testtheme-2'] ) );
     318                $this->assertFalse( isset( $enabled['testtheme-3'] ) );
     319
     320                // And disable again
     321                wp_network_disable_theme( $remove );
     322                $enabled = get_site_option( 'allowedthemes' );
     323                $this->assertArrayHasKey( 'testtheme-4', $enabled );
     324                $this->assertFalse( isset( $enabled['testtheme-1'] ) );
     325                $this->assertFalse( isset( $enabled['testtheme-2'] ) );
     326                $this->assertFalse( isset( $enabled['testtheme-3'] ) );
     327        }
    252328}
    253329
    254330endif;