[ XREF Home ] [ Index ]

PHP Cross Reference of WordPress Trunk

Provided by Yoast

title

Body

[close]

/wp-admin/network/ -> themes.php (source)

   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  add_thickbox();
 175  
 176  add_screen_option( 'per_page', array('label' => _x( 'Themes', 'themes per page (screen options)' )) );
 177  
 178  add_contextual_help($current_screen,
 179      '<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>' .
 180      '<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>' .
 181      '<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>' .
 182      '<p><strong>' . __('For more information:') . '</strong></p>' .
 183      '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Themes_Screen" target="_blank">Documentation on Network Themes</a>') . '</p>' .
 184      '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
 185  );
 186  
 187  $title = __('Themes');
 188  $parent_file = 'themes.php';
 189  
 190  require_once (ABSPATH . 'wp-admin/admin-header.php');
 191  
 192  ?>
 193  
 194  <div class="wrap">
 195  <?php screen_icon('themes'); ?>
 196  <h2><?php echo esc_html( $title ); if ( current_user_can('install_themes') ) { ?> <a href="theme-install.php" class="add-new-h2"><?php echo esc_html_x('Add New', 'theme'); ?></a><?php }
 197  if ( $s ) 
 198      printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', esc_html( $s ) ); ?> 
 199  </h2>
 200  
 201  <?php
 202  if ( isset( $_GET['enabled'] ) ) {
 203      $_GET['enabled'] = absint( $_GET['enabled'] );
 204      echo '<div id="message" class="updated"><p>' . sprintf( _n( 'Theme enabled.', '%s themes enabled.', $_GET['enabled'] ), number_format_i18n( $_GET['enabled'] ) ) . '</p></div>';
 205  } elseif ( isset( $_GET['disabled'] ) ) {
 206      $_GET['disabled'] = absint( $_GET['disabled'] );
 207      echo '<div id="message" class="updated"><p>' . sprintf( _n( 'Theme disabled.', '%s themes disabled.', $_GET['disabled'] ), number_format_i18n( $_GET['disabled'] ) ) . '</p></div>';
 208  } elseif ( isset( $_GET['deleted'] ) ) {
 209      $_GET['deleted'] = absint( $_GET['deleted'] );
 210      echo '<div id="message" class="updated"><p>' . sprintf( _nx( 'Theme deleted.', '%s themes deleted.', $_GET['deleted'], 'network' ), number_format_i18n( $_GET['deleted'] ) ) . '</p></div>';
 211  } elseif ( isset( $_GET['error'] ) && 'none' == $_GET['error'] ) {
 212      echo '<div id="message" class="error"><p>' . __( 'No theme selected.' ) . '</p></div>';
 213  } elseif ( isset( $_GET['error'] ) && 'main' == $_GET['error'] ) {
 214      echo '<div class="error"><p>' . __( 'You cannot delete a theme while it is active on the main site.' ) . '</p></div>';
 215  }
 216  
 217  ?>
 218  
 219  <form method="get" action="">
 220  <?php $wp_list_table->search_box( __( 'Search Installed Themes' ), 'theme' ); ?>
 221  </form>
 222  
 223  <?php $wp_list_table->views(); ?>
 224  
 225  <form method="post" action="">
 226  <input type="hidden" name="theme_status" value="<?php echo esc_attr($status) ?>" />
 227  <input type="hidden" name="paged" value="<?php echo esc_attr($page) ?>" />
 228  
 229  <?php $wp_list_table->display(); ?>
 230  </form>
 231  
 232  </div>
 233  
 234  <?php
 235  include (ABSPATH . 'wp-admin/admin-footer.php');


Generated: Wed Jun 1 08:30:02 2011 Cross-referenced by PHPXref 0.7
Provided by Yoast and awesome WordPress Hosting