~canonical-sysadmins/wordpress/3.9.x

« back to all changes in this revision

Viewing changes to wp-admin/network/themes.php

  • Committer: Andrew Glen-Young
  • Date: 2011-03-08 14:47:51 UTC
  • Revision ID: andrew.glen-young@canonical.com-20110308144751-1n6spqgayztf9h77
[AGY] import 3.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/**
 
3
 * Multisite themes administration panel.
 
4
 *
 
5
 * @package WordPress
 
6
 * @subpackage Multisite
 
7
 * @since 3.1.0
 
8
 */
 
9
 
 
10
/** Load WordPress Administration Bootstrap */
 
11
require_once( './admin.php' );
 
12
 
 
13
if ( ! is_multisite() )
 
14
        wp_die( __( 'Multisite support is not enabled.' ) );
 
15
 
 
16
$menu_perms = get_site_option( 'menu_items', array() );
 
17
 
 
18
if ( empty( $menu_perms['themes'] ) && ! is_super_admin() )
 
19
        wp_die( __( 'Cheatin&#8217; uh?' ) );
 
20
 
 
21
if ( !current_user_can('manage_network_themes') )
 
22
        wp_die( __( 'You do not have sufficient permissions to manage network themes.' ) );
 
23
 
 
24
$wp_list_table = _get_list_table('WP_MS_Themes_List_Table');
 
25
$pagenum = $wp_list_table->get_pagenum();
 
26
 
 
27
$action = $wp_list_table->current_action();
 
28
 
 
29
$s = isset($_REQUEST['s']) ? $_REQUEST['s'] : '';
 
30
 
 
31
// Clean up request URI from temporary args for screen options/paging uri's to work as expected.
 
32
$temp_args = array( 'enabled', 'disabled', 'deleted', 'error' );
 
33
$_SERVER['REQUEST_URI'] = remove_query_arg( $temp_args, $_SERVER['REQUEST_URI'] );
 
34
$referer = remove_query_arg( $temp_args, wp_get_referer() );
 
35
 
 
36
if ( $action ) {
 
37
        $allowed_themes = get_site_option( 'allowedthemes' );   
 
38
        switch ( $action ) {
 
39
                case 'enable':
 
40
                        check_admin_referer('enable-theme_' . $_GET['theme']);
 
41
                        $allowed_themes[ $_GET['theme'] ] = true;
 
42
                        update_site_option( 'allowedthemes', $allowed_themes );
 
43
                        wp_redirect( add_query_arg( 'enabled', '1', $referer ) );
 
44
                        exit;
 
45
                        break;
 
46
                case 'disable':
 
47
                        check_admin_referer('disable-theme_' . $_GET['theme']);
 
48
                        unset( $allowed_themes[ $_GET['theme'] ] );
 
49
                        update_site_option( 'allowedthemes', $allowed_themes );
 
50
                        wp_redirect( add_query_arg( 'disabled', '1', $referer ) );
 
51
                        exit;
 
52
                        break;
 
53
                case 'enable-selected':
 
54
                        check_admin_referer('bulk-themes');
 
55
                        $themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
 
56
                        if ( empty($themes) ) {
 
57
                                wp_redirect( add_query_arg( 'error', 'none', $referer ) );
 
58
                                exit;
 
59
                        }
 
60
                        foreach( (array) $themes as $theme )
 
61
                                $allowed_themes[ $theme ] = true;
 
62
                        update_site_option( 'allowedthemes', $allowed_themes );
 
63
                        wp_redirect( add_query_arg( 'enabled', count( $themes ), $referer ) );
 
64
                        exit;
 
65
                        break;
 
66
                case 'disable-selected':
 
67
                        check_admin_referer('bulk-themes');
 
68
                        $themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
 
69
                        if ( empty($themes) ) {
 
70
                                wp_redirect( add_query_arg( 'error', 'none', $referer ) );
 
71
                                exit;
 
72
                        }
 
73
                        foreach( (array) $themes as $theme )
 
74
                                unset( $allowed_themes[ $theme ] );
 
75
                        update_site_option( 'allowedthemes', $allowed_themes );
 
76
                        wp_redirect( add_query_arg( 'disabled', count( $themes ), $referer ) );
 
77
                        exit;
 
78
                        break;
 
79
                case 'delete-selected':
 
80
                        if ( ! current_user_can( 'delete_themes' ) )
 
81
                                wp_die( __('You do not have sufficient permissions to delete themes for this site.') );
 
82
                        check_admin_referer( 'bulk-themes' );
 
83
 
 
84
                        $themes = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array();
 
85
 
 
86
                        if ( isset( $themes[ get_option( 'template' ) ] ) )
 
87
                                unset( $themes[ get_option( 'template' ) ] );
 
88
                        if ( isset( $themes[ get_option( 'stylesheet' ) ] ) )
 
89
                                unset( $themes[ get_option( 'stylesheet' ) ] );
 
90
 
 
91
                        if ( empty( $themes ) ) {
 
92
                                wp_redirect( add_query_arg( 'error', 'none', $referer ) );
 
93
                                exit;
 
94
                        }
 
95
 
 
96
                        $main_theme = get_current_theme();
 
97
                        $files_to_delete = $theme_info = array();
 
98
                        foreach ( $themes as $key => $theme ) {
 
99
                                $data = get_theme_data( WP_CONTENT_DIR . '/themes/' . $theme . '/style.css' );
 
100
                                if ( $data['Name'] == $main_theme ) {
 
101
                                        unset( $themes[$key] );
 
102
                                } else {
 
103
                                        $files_to_delete = array_merge( $files_to_delete, list_files( WP_CONTENT_DIR . "/themes/$theme" ) );                                    
 
104
                                        $theme_info[ $theme ] = $data;
 
105
                                }
 
106
                        }
 
107
                        
 
108
                        if ( empty( $themes ) ) {
 
109
                                wp_redirect( add_query_arg( 'error', 'main', $referer ) );
 
110
                                exit;
 
111
                        }
 
112
 
 
113
                        include(ABSPATH . 'wp-admin/update.php');
 
114
 
 
115
                        $parent_file = 'themes.php';
 
116
 
 
117
                        if ( ! isset( $_REQUEST['verify-delete'] ) ) {
 
118
                                wp_enqueue_script( 'jquery' );
 
119
                                require_once( ABSPATH . 'wp-admin/admin-header.php' );
 
120
                                ?>
 
121
                        <div class="wrap">
 
122
                                <?php
 
123
                                        $themes_to_delete = count( $themes );
 
124
                                        screen_icon();
 
125
                                        echo '<h2>' . _n( 'Delete Theme', 'Delete Themes', $themes_to_delete ) . '</h2>';
 
126
                                ?>
 
127
                                <div class="error"><p><strong><?php _e( 'Caution:' ); ?></strong> <?php echo _n( 'This theme may be active on other sites in the network.', 'These themes may be active on other sites in the network.', $themes_to_delete ); ?></p></div>
 
128
                                <p><?php echo _n( 'You are about to remove the following theme:', 'You are about to remove the following themes:', $themes_to_delete ); ?></p>
 
129
                                        <ul class="ul-disc">
 
130
                                                <?php foreach ( $theme_info as $theme )
 
131
                                                        echo '<li>', sprintf( __('<strong>%1$s</strong> by <em>%2$s</em>' ), esc_html( $theme['Name'] ), esc_html( $theme['AuthorName'] ) ), '</li>'; /* translators: 1: theme name, 2: theme author */ ?>
 
132
                                        </ul>
 
133
                                <p><?php _e('Are you sure you wish to delete these themes?'); ?></p>
 
134
                                <form method="post" action="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>" style="display:inline;">
 
135
                                        <input type="hidden" name="verify-delete" value="1" />
 
136
                                        <input type="hidden" name="action" value="delete-selected" />
 
137
                                        <?php
 
138
                                                foreach ( (array) $themes as $theme )
 
139
                                                        echo '<input type="hidden" name="checked[]" value="' . esc_attr($theme) . '" />';
 
140
                                        ?>
 
141
                                        <?php wp_nonce_field('bulk-themes') ?>
 
142
                                        <?php submit_button( _n( 'Yes, Delete this theme', 'Yes, Delete these themes', $themes_to_delete ), 'button', 'submit', false ); ?>
 
143
                                </form>
 
144
                                <form method="post" action="<?php echo esc_url(wp_get_referer()); ?>" style="display:inline;">
 
145
                                        <?php submit_button( __( 'No, Return me to the theme list' ), 'button', 'submit', false ); ?>
 
146
                                </form>
 
147
 
 
148
                                <p><a href="#" onclick="jQuery('#files-list').toggle(); return false;"><?php _e('Click to view entire list of files which will be deleted'); ?></a></p>
 
149
                                <div id="files-list" style="display:none;">
 
150
                                        <ul class="code">
 
151
                                        <?php
 
152
                                                foreach ( (array) $files_to_delete as $file )
 
153
                                                        echo '<li>' . esc_html( str_replace( WP_CONTENT_DIR . "/themes", '', $file) ) . '</li>';
 
154
                                        ?>
 
155
                                        </ul>
 
156
                                </div>
 
157
                        </div>
 
158
                                <?php
 
159
                                require_once(ABSPATH . 'wp-admin/admin-footer.php');
 
160
                                exit;
 
161
                        } // Endif verify-delete
 
162
 
 
163
                        foreach ( $themes as $theme )
 
164
                                $delete_result = delete_theme( $theme, esc_url( add_query_arg( array('verify-delete' => 1), $_SERVER['REQUEST_URI'] ) ) );
 
165
                        $paged = ( $_REQUEST['paged'] ) ? $_REQUEST['paged'] : 1; 
 
166
                        wp_redirect( network_admin_url( "themes.php?deleted=".count( $themes )."&paged=$paged&s=$s" ) );
 
167
                        exit;
 
168
                        break;
 
169
        }
 
170
}
 
171
 
 
172
$wp_list_table->prepare_items();
 
173
 
 
174
$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' );
 
175
if ( $pagenum > $total_pages && $total_pages > 0 ) {
 
176
        wp_redirect( add_query_arg( 'paged', $total_pages ) );
 
177
        exit;
 
178
}
 
179
 
 
180
add_thickbox();
 
181
 
 
182
add_screen_option( 'per_page', array('label' => _x( 'Themes', 'themes per page (screen options)' )) );
 
183
 
 
184
add_contextual_help($current_screen,
 
185
        '<p>' . __('This screen enables and disables the inclusion of themes available to choose in the Appearance menu for each site. It does not activate or deactivate which theme a site is currently using.') . '</p>' .
 
186
        '<p>' . __('If the network admin disables a theme that is in use, it can still remain selected on that site. If another theme is chosen, the disabled theme will not appear in the site&#8217;s Appearance > Themes screen.') . '</p>' .
 
187
        '<p>' . __('Themes can be enabled on a site by site basis by the network admin on the Edit Site screen you go to via the Edit action link on the Sites screen. Only network admins are able to install or edit themes.') . '</p>' .
 
188
        '<p><strong>' . __('For more information:') . '</strong></p>' .
 
189
        '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Themes_Screen" target="_blank">Documentation on Network Themes</a>') . '</p>' .
 
190
        '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
 
191
);
 
192
 
 
193
$title = __('Themes');
 
194
$parent_file = 'themes.php';
 
195
 
 
196
require_once(ABSPATH . 'wp-admin/admin-header.php');
 
197
 
 
198
?>
 
199
 
 
200
<div class="wrap">
 
201
<?php screen_icon('themes'); ?>
 
202
<h2><?php echo esc_html( $title ); if ( current_user_can('install_themes') ) { ?> <a href="theme-install.php" class="button add-new-h2"><?php echo esc_html_x('Add New', 'theme'); ?></a><?php }
 
203
if ( $s ) 
 
204
        printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', esc_html( $s ) ); ?> 
 
205
</h2>
 
206
 
 
207
<?php
 
208
if ( isset( $_GET['enabled'] ) ) {
 
209
        $_GET['enabled'] = absint( $_GET['enabled'] );
 
210
        echo '<div id="message" class="updated"><p>' . sprintf( _n( 'Theme enabled.', '%s themes enabled.', $_GET['enabled'] ), number_format_i18n( $_GET['enabled'] ) ) . '</p></div>';
 
211
} elseif ( isset( $_GET['disabled'] ) ) {
 
212
        $_GET['disabled'] = absint( $_GET['disabled'] );
 
213
        echo '<div id="message" class="updated"><p>' . sprintf( _n( 'Theme disabled.', '%s themes disabled.', $_GET['disabled'] ), number_format_i18n( $_GET['disabled'] ) ) . '</p></div>';
 
214
} elseif ( isset( $_GET['deleted'] ) ) {
 
215
        $_GET['deleted'] = absint( $_GET['deleted'] );
 
216
        echo '<div id="message" class="updated"><p>' . sprintf( _nx( 'Theme deleted.', '%s themes deleted.', $_GET['deleted'], 'network' ), number_format_i18n( $_GET['deleted'] ) ) . '</p></div>';
 
217
} elseif ( isset( $_GET['error'] ) && 'none' == $_GET['error'] ) {
 
218
        echo '<div id="message" class="error"><p>' . __( 'No theme selected.' ) . '</p></div>';
 
219
} elseif ( isset( $_GET['error'] ) && 'main' == $_GET['error'] ) {
 
220
        echo '<div class="error"><p>' . __( 'You cannot delete a theme while it is active on the main site.' ) . '</p></div>';
 
221
}
 
222
 
 
223
?>
 
224
 
 
225
<form method="get" action="">
 
226
<?php $wp_list_table->search_box( __( 'Search Installed Themes' ), 'theme' ); ?>
 
227
</form>
 
228
 
 
229
<?php $wp_list_table->views(); ?>
 
230
 
 
231
<form method="post" action="">
 
232
<input type="hidden" name="theme_status" value="<?php echo esc_attr($status) ?>" />
 
233
<input type="hidden" name="paged" value="<?php echo esc_attr($page) ?>" />
 
234
 
 
235
<?php $wp_list_table->display(); ?>
 
236
</form>
 
237
 
 
238
</div>
 
239
 
 
240
<?php
 
241
include(ABSPATH . 'wp-admin/admin-footer.php');