/** * Output the delete multiple networks page * * @since 2.0.0 */ private function page_delete_networks() { // Get posted networks $network_id = get_main_network_id(); $all_networks = isset($_POST['all_networks']) ? array_map('absint', $_POST['all_networks']) : array(); // Prevent primary network from being deleted $all_networks = array_diff($all_networks, array($network_id)); // Query for networks $networks = get_networks(array('network__in' => $all_networks)); // Bail if no networks if (empty($networks)) { wp_die(esc_html__('You have selected an invalid network or networks for deletion', 'wp-multi-network')); } // Ensure each network is valid foreach ($networks as $network) { if (!get_network($network)) { wp_die(esc_html__('You have selected an invalid network for deletion.', 'wp-multi-network')); } } // Query for sites in selected networks $sites = get_sites(array('network__in' => $all_networks)); ?> <div class="wrap"> <h1><?php esc_html_e('Networks', 'wp-multi-network'); ?> </h1> <h3><?php esc_html_e('Delete Multiple Networks', 'wp-multi-network'); ?> </h3> <form method="post" action="<?php echo esc_url($this->admin_url()); ?> "> <?php if (!empty($sites)) { ?> <div class="error inline"> <h3><?php esc_html_e('You have selected the following networks for deletion', 'wp-multi-network'); ?> :</h3> <ul> <?php foreach ($networks as $deleted_network) { ?> <li><input type="hidden" name="deleted_networks[]" value="<?php echo esc_attr($deleted_network->id); ?> "><?php echo esc_html($deleted_network->domain . $deleted_network->path); ?> </li> <?php } ?> </ul> <p><?php // Messaging wp_should_rescue_orphaned_sites() ? esc_html_e('One or more of these networks has existing sites. Deleting these networks will orphan these sites.', 'wp-multi-network') : esc_html_e('One or more of these networks has existing sites. Deleting these networks will permanently delete these sites.', 'wp-multi-network'); ?> </p> <p> <label for="override"><?php esc_html_e('Please confirm that you still want to delete these networks', 'wp-multi-network'); ?> :</label> <input type="checkbox" name="override" id="override"> </p> </div> <?php } else { ?> <div id="message inline"> <h3><?php esc_html_e('You have selected the following networks for deletion', 'wp-multi-network'); ?> :</h3> <ul><?php foreach ($networks as $deleted_network) { ?> <li><input type="hidden" name="deleted_networks[]" value="<?php echo esc_attr($deleted_network->id); ?> "><?php echo esc_html($deleted_network->domain . $deleted_network->path); ?> </li><?php } ?> </ul> </div> <?php } ?> <p><?php esc_html_e('Are you sure you want to delete these networks?', 'wp-multi-network'); ?> </p> <?php wp_nonce_field('edit_network', 'network_edit'); submit_button(esc_html__('Delete Networks', 'wp-multi-network'), 'primary', 'delete_multiple', false); ?> <a class="button" href="<?php echo esc_url($this->admin_url()); ?> "><?php esc_html_e('Cancel', 'wp-multi-network'); ?> </a> </form> </div> <?php }
/** * Delete a network and all its blogs * * @param int $network_id ID of network to delete * @param bool $delete_blogs Flag to permit blog deletion - default setting * of false will prevent deletion of occupied networks */ function delete_network($network_id, $delete_blogs = false) { global $wpdb; // Get network $network = get_network($network_id); // Bail if network does not exist if (empty($network)) { return new WP_Error('network_not_exist', __('Network does not exist.', 'wp-multi-network')); } // Ensure there are no blogs attached to this network $sites = get_sites(array('network_id' => $network->id)); // Network has sites if (!empty($sites)) { // Bail if blog deletion is off if (empty($delete_blogs)) { return new WP_Error('network_not_empty', __('Cannot delete network with sites.', 'wp-multi-network')); // Are we rescuing orphans or deleting them? } elseif (true === $delete_blogs) { foreach ($sites as $site) { wp_should_rescue_orphaned_sites() ? move_site($site->blog_id, 0) : wpmu_delete_blog($site->blog_id, true); } } } // Delete from sites table $sql = "DELETE FROM {$wpdb->site} WHERE id = %d"; $prep = $wpdb->prepare($sql, $network->id); $wpdb->query($prep); // Delete from site meta table $sql = "DELETE FROM {$wpdb->sitemeta} WHERE site_id = %d"; $prep = $wpdb->prepare($sql, $network->id); $wpdb->query($prep); // Clean network cache clean_network_cache(array($network->id)); // Network deleted do_action('delete_network', $network); }