/** * Delete a site and all its blogs * * @uses move_blog() * @uses wpmu_delete_blog() * * @param integer id ID of site to delete * @param boolean $delete_blogs flag to permit blog deletion - default setting of FALSE will prevent deletion of occupied sites */ function delete_site($id, $delete_blogs = FALSE) { global $wpdb; $override = $delete_blogs; /* ensure we got a valid site id */ $query = "SELECT * FROM {$wpdb->site} WHERE id=" . (int) $id; $site = $wpdb->get_row($query); if (!$site) { return new WP_Error('site_not_exist', __('Network does not exist.', 'njsl-networks')); } /* ensure there are no blogs attached to this site */ $query = "SELECT * FROM {$wpdb->blogs} WHERE site_id=" . (int) $id; $blogs = $wpdb->get_results($query); if ($blogs && !$override) { return new WP_Error('site_not_empty', __('Cannot delete network with sites.', 'njsl-networks')); } if ($override) { if ($blogs) { foreach ($blogs as $blog) { if (RESCUE_ORPHANED_BLOGS && ENABLE_HOLDING_SITE) { move_blog($blog->blog_id, 0); } else { wpmu_delete_blog($blog->blog_id, true); } } } } $query = "DELETE FROM {$wpdb->site} WHERE id=" . (int) $id; $wpdb->query($query); $query = "DELETE FROM {$wpdb->sitemeta} WHERE site_id=" . (int) $id; $wpdb->query($query); do_action('wpmu_delete_site', $site); do_action('wpms_delete_network', $site); }
function reassign_blog_page() { global $wpdb; if (isset($_POST['reassign']) && isset($_GET['id'])) { if (isset($_POST['jsEnabled'])) { /** Javascript enabled for client - check the 'to' box */ if (!isset($_POST['to'])) { wp_die(__('No sites selected.', 'njsl-networks')); } $blogs = $_POST['to']; } else { /** Javascript disabled for client - check the 'from' box */ if (!isset($_POST['from'])) { wp_die(__('No sites selected.', 'njsl-networks')); } $blogs = $_POST['from']; } $currentBlogs = $wpdb->get_results("SELECT * FROM {$wpdb->blogs} WHERE site_id=" . (int) $_GET['id']); foreach ($blogs as $blog) { move_blog($blog, (int) $_GET['id']); } /* true sync - move any unlisted blogs to 'zero' site */ if (ENABLE_HOLDING_SITE) { foreach ($currentBlogs as $currentBlog) { if (!in_array($currentBlog->blog_id, $blogs)) { move_blog($currentBlog->blog_id, 0); } } } $_GET['updated'] = 'yes'; $_GET['action'] = 'saved'; } else { // get site by id $query = $wpdb->prepare("SELECT *, {$wpdb->sitemeta}.meta_value as site_name FROM {$wpdb->site} " . " LEFT JOIN {$wpdb->sitemeta} ON {$wpdb->sitemeta}.meta_key='site_name' AND {$wpdb->sitemeta}.site_id = {$wpdb->site}.id WHERE id=%d", $_GET['id']); $site = $wpdb->get_row($query); if (!$site) { wp_die(__('Invalid network ID selected', 'njsl-networks')); } $blogs = $wpdb->get_results("SELECT * FROM {$wpdb->blogs}"); if (!$blogs) { wp_die(__('Blogs table is inaccessible.', 'njsl-networks')); } foreach ($blogs as $key => $blog) { $tableName = $wpdb->get_blog_prefix($blog->blog_id) . 'options'; $blog_name = $wpdb->get_row("SELECT * FROM {$tableName} WHERE option_name='blogname'"); if ($wpdb->last_error != '') { wp_die(printf(__('Could not locate options table for a site. (Tried: %s).', 'njsl-networks'), $tableName)); } if (!$blog_name) { $blogs[$key]->name = __('Unknown site name', 'njsl-networks'); } else { $blogs[$key]->name = stripslashes($blog_name->option_value); } } // Extend the select box based on the number of blogs, but with a minimum $select_height = floor(count($blogs)); if ($select_height < 10) { $select_height = 10; } ?> <div class="wrap"> <div class="icon32" id="icon-ms-admin"><br></div> <h2><?php _e('Assign Sites to', 'njsl-networks'); ?> : <?php echo $site->site_name . ' (' . $site->domain . $site->path . ')'; ?> </h2> <noscript> <div id="message" class="updated hide-if-js"><p><?php printf(__('Select the sites you want to assign to this network from the column at left, and click "%s."', 'njsl-networks'), __('Update Assignments', 'njsl-networks')); ?> </p></div> </noscript> <form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?> " id="site-assign-form"> <table class="widefat"> <thead> <tr> <th><?php _e('Available', 'njsl-networks'); ?> </th> <th style="width: 2em;"></th> <th><?php _e('Assigned', 'njsl-networks'); ?> </th> </tr> </thead> <tr> <td> <select name="from[]" id="from" multiple style="height: <?php echo $select_height; ?> em; width: 98%"> <?php foreach ($blogs as $blog) { if ($blog->site_id != $site->id) { echo '<option value="' . $blog->blog_id . '">' . $blog->name . ' ( ' . $blog->domain . $blog->path . ' )</option>'; } } ?> </select> </td> <td> <input type="button" name="unassign" id="unassign" value="<<" /><br /> <input type="button" name="assign" id="assign" value=">>" /> </td> <td valign="top"> <?php if (!ENABLE_HOLDING_SITE) { ?> <ul style="margin: 0; padding: 0; list-style-type: none;"> <?php foreach ($blogs as $blog) { if ($blog->site_id == $site->id) { ?> <li><?php echo $blog->name . ' (' . $blog->domain . ')'; ?> </li> <?php } } ?> </ul><?php } ?> <select name="to[]" id="to" multiple style="height: <?php echo $select_height; ?> em; width: 98%"> <?php if (ENABLE_HOLDING_SITE) { foreach ($blogs as $blog) { if ($blog->site_id == $site->id) { echo '<option value="' . $blog->blog_id . '">' . $blog->name . ' ( ' . $blog->domain . $blog->path . ' )</option>'; } } } ?> </select> </td> </tr> </table> <br class="clear" /> <?php if (has_action('add_move_blog_option')) { ?> <table class="widefat"> <thead> <tr scope="col"><th colspan="2"><?php _e('Options', 'njsl-networks'); ?> :</th></tr> </thead> <?php do_action('add_move_blog_option', $blog->blog_id); ?> </table> <br /> <?php } ?> <?php submit_button(__('Update Assignments', 'njsl-networks'), 'primary', 'reassign', false); ?> <a class="button" href="<?php echo $this->listPage; ?> "><?php _e('Cancel'); ?> </a> </form> <script type="text/javascript"> /** add field to signal javascript is enabled */ jQuery(document.createElement('input')) .attr( 'type', 'hidden' ) .attr( 'name', 'jsEnabled' ) .attr( 'value', 'true' ) .appendTo( '#site-assign-form' ); /** Handle clicks to add/remove sites to/from selected list */ jQuery( 'input[name=assign]' ).click( function() { move( 'from', 'to' ); }); jQuery( 'input[name=unassign]' ).click( function() { move( 'to', 'from' ); }); /** Select all sites in "selected" box when submitting */ jQuery( '#site-assign-form' ).submit( function() { jQuery( '#to' ).children( 'option' ).attr( 'selected', true ); }); function move( from, to ) { jQuery( '#' + from ).children( 'option:selected' ).each( function() { jQuery( '#' + to ).append( jQuery( this ).clone() ); jQuery( this ).remove(); }); } </script> </div> <?php } }