public function test_move_site() { // Grab some example data $site_id = $this->factory->blog->create(); $site = $this->factory->blog->get_object_by_id($site_id); $other_network_id = $this->factory->network->create(); $other_network = $this->factory->network->get_object_by_id($other_network_id); // Check we start out in the main network $this->assertEquals(1, $site->site_id, 'Site should be created in main network by default'); // Move the site to the other network $result = move_site($site_id, $other_network_id); $this->assertNull($result, 'Site should be moved without error'); // Reload site data $site = $this->factory->blog->get_object_by_id($site_id); $this->assertEquals($other_network_id, $site->site_id, 'Site should be in other network after move'); // Move it back $result = move_site($site_id, 1); $this->assertNull($result, 'Site should be moved without error'); // Reload site data again $site = $this->factory->blog->get_object_by_id($site_id); $this->assertEquals(1, $site->site_id, 'Site should be back in main network'); }
/** * Delete a network and all its blogs * * @param integer id ID of network to delete * @param boolean $delete_blogs Flag to permit blog deletion - default setting * of false will prevent deletion of occupied networks */ function delete_network($id, $delete_blogs = false) { global $wpdb; $id = (int) $id; // Ensure we have a valid network id $network = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->site} WHERE id = %d", $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 = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->blogs} WHERE site_id = %d", $id)); // Bail if network has blogs and blog deletion is off if (false == $delete_blogs && !empty($sites)) { return new WP_Error('network_not_empty', __('Cannot delete network with sites.', 'wp-multi-network')); } // Are we rescuing orphans or deleting them? if (true == $delete_blogs && !empty($sites)) { foreach ($sites as $site) { if (RESCUE_ORPHANED_BLOGS && ENABLE_NETWORK_ZERO) { move_site($site->blog_id, 0); } else { wpmu_delete_blog($site->blog_id, true); } } } // Delete from sites table $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->site} WHERE id = %d", $id)); // Delete from site meta table $wpdb->query($wpdb->prepare($query = "DELETE FROM {$wpdb->sitemeta} WHERE site_id = %d", $id)); do_action('delete_network', $network); }
/** * Delete a network and all its blogs * * @param integer id ID of network to delete * @param boolean $delete_blogs Flag to permit blog deletion - default setting * of false will prevent deletion of occupied networks */ function delete_network($id, $delete_blogs = false) { global $wpdb; // Get network $network = wp_get_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 */ $sql = "SELECT * FROM {$wpdb->blogs} WHERE site_id = %d"; $prep = $wpdb->prepare($sql, $network->id); $sites = $wpdb->get_results($prep); // Bail if network has blogs and blog deletion is off if (empty($delete_blogs) && !empty($sites)) { return new WP_Error('network_not_empty', __('Cannot delete network with sites.', 'wp-multi-network')); } // Are we rescuing orphans or deleting them? if (true == $delete_blogs && !empty($sites)) { foreach ($sites as $site) { if (RESCUE_ORPHANED_BLOGS) { move_site($site->blog_id, 0); } else { 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); // Network deleted do_action('delete_network', $network); }
function Draw_Page($Page_Type) { // Read only pages - these pages don't strictly require user authentication. // Therefore, to enable permit-all page viewing, comment out the call // to rejectIfNotAuthenticated() in the relevant case block. Note, some of // these pages will replace sensitive info such as telephone/email with // the string 'PROTECTED' // ************************************************************************ switch ($Page_Type) { case "default": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/start_page.php'; startPage(); break; case "View_Service_Endpoint": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/view_service_endpoint.php'; view_endpoint(); break; case "Service_Groups": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service_group/view_all.php'; showAllServiceGroups(); break; case "Service_Group": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service_group/view_sgroup.php'; showServiceGroup(); break; case "Site": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/site/view_site.php'; view_site(); break; case "NGI": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/ngi/view_ngi.php'; view_ngi(); break; case "Service": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/view_service.php'; view_se(); break; case "Services": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/view_all.php'; drawSEs(); break; case "NGIs": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/ngi/view_ngis.php'; view_ngis(); break; case "Sites": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/site/view_all.php'; showAllSites(); break; case "Projects": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/project/view_all.php'; show_all_projects(); break; case "Project": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/project/view_project.php'; show_project(); break; case "Scope_Help": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/scope_help.php'; show_help(); break; case "Site_Geo_xml": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/sitesForGoogleMapXML.php'; show_xml(); break; case "Error_Redirect": //rejectIfNotAuthenticated(); show_view('error.php', $_REQUEST['error']); break; case "Static_HTML": //rejectIfNotAuthenticated(); Draw_Static_HTML(); break; case "Search": //rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/search.php'; search(); break; // CrUD Pages - These pages MUST have authentication enabled so // the calls to rejectIfNotAuthenticated() must be used. // ********************************************************************* // CrUD Pages - These pages MUST have authentication enabled so // the calls to rejectIfNotAuthenticated() must be used. // ********************************************************************* case "Revoke_Role": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/political_role/revoke_request.php'; view_revoke_request(); break; case "Accept_Role_Request": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/political_role/accept_request.php'; view_accept_request(); break; case "Deny_Role_Request": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/political_role/deny_request.php'; view_deny_request(); break; case "Role_Requests": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/political_role/view_requests.php'; view_requests(); break; case "Request_Role": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/political_role/request_role.php'; request_role(); break; case "Edit_Site": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/site/edit_site.php'; edit_site(); break; case "Edit_Service": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/edit_service.php'; edit_service(); break; case "SE_Downtimes": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/se_downtimes.php'; se_downtimes(); break; case "Add_Service": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/add_service.php'; add_service(); break; case "Add_Service_Endpoint": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/add_service_endpoint.php'; add_service_endpoint(); break; case "Delete_Service": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/delete_service.php'; delete(); break; case "Edit_User": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/user/edit_user.php'; edit_user(); break; case "User": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/user/view_user.php'; view_user(); break; case "Downtime": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/downtime/view_downtime.php'; view(); break; case "My_Sites": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/my_sites.php'; my_sites(); break; case "Edit_NGI": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/ngi/edit_ngi.php'; edit_ngi(); break; case "Edit_Service_Group": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service_group/edit_service_group.php'; edit_service_group(); break; case "Add_Service_Group_SEs": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service_group/add_ses.php'; add_ses(); break; case "Search_SEs": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service_group/search_ses.php'; search_ses(); break; case "Remove_Service_Group_SEs": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service_group/remove_ses.php'; remove_ses(); break; case "Add_Site": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/site/add_site.php'; add_site(); break; case "SGroup_Downtimes": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service_group/view_sgroup_downtimes.php'; view_sgroup_downtimes(); break; case "Add_Service_Group": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service_group/add_service_group.php'; add_service_group(); break; case "Site_Downtimes": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/site/site_downtimes.php'; site_downtimes(); break; case "Register": rejectIfNotAuthenticated('Access denied - ' . 'you need to be pre-authenticated before you can register a new account'); require_once __DIR__ . '/controllers/user/register.php'; register(); break; case "Add_Downtime": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/downtime/add_downtime.php'; //require_once __DIR__.'/controllers/downtime/add_downtime_old.php'; add(); break; case "Edit_Downtime": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/downtime/edit_downtime.php'; //require_once __DIR__.'/controllers/downtime/edit_downtime_old.php'; edit(); break; case "End_Downtime": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/downtime/end_downtime.php'; endDt(); break; case "Downtime_view_endpoint_tree": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/downtime/view_endpoint_tree.php'; getServiceandEndpointList(); break; case "Edit_Downtime_view_endpoint_tree": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/downtime/view_endpoint_tree.php'; editDowntimePopulateEndpointTree(); break; case "Downtime_View_Services": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/downtime/view_services.php'; getSitesServices(); break; case "Delete_Site": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/site/delete_site.php'; delete(); break; case "Delete_Downtime": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/downtime/delete_downtime.php'; delete(); break; case "Downtimes_Overview": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/downtime/downtimes_overview.php'; view(); break; case "Delete_Service_Group": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service_group/delete_service_group.php'; delete(); break; case "Delete_User": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/user/delete_user.php'; delete(); break; case "Edit_Certification_Status": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/site/edit_cert_status.php'; edit(); break; case "Retrieve_Account": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/user/retrieve_account.php'; retrieve(); break; case "Remove_Project_NGIs": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/project/remove_ngis.php'; remove_ngis_project(); break; case "Add_Project_NGIs": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/project/add_ngis.php'; add_ngis_to_project(); break; case "Edit_Project": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/project/edit_project.php'; edit_project(); break; case "Delete_Project": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/project/delete_project.php'; delete_project(); break; case "Admin_Move_Site": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/move_site.php'; move_site(); break; case "Admin_Move_SEP": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/move_service_end_point.php'; move_service_end_point(); break; case "Admin_Service_Types": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/view_service_types.php'; show_all(); break; case "Admin_Service_Type": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/view_service_type.php'; view_service_type(); break; case "Admin_Edit_Service_Type": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/edit_service_type.php'; edit_type(); break; case "Admin_Add_Service_Type": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/add_service_type.php'; add_type(); break; case "Admin_Delete_Service_Type": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/delete_service_type.php'; delete_service_type(); break; case "Admin_Delete_Service_Type_Denied": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/delete_service_type_denied.php'; deny_delete_type(); break; case "Admin_Add_NGI": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/add_ngi.php'; add_ngi(); break; case "Admin_Users": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/users.php'; show_users(); break; case "Admin_Edit_User_DN": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/edit_user_dn.php'; edit_dn(); break; // case "Admin_Change_User_Admin_Status": // rejectIfNotAuthenticated(); // require_once __DIR__.'/controllers/admin/edit_user_isadmin.php'; // make_admin(); // break; // case "Admin_Change_User_Admin_Status": // rejectIfNotAuthenticated(); // require_once __DIR__.'/controllers/admin/edit_user_isadmin.php'; // make_admin(); // break; case "Admin_Add_Project": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/add_project.php'; add_project(); break; case "Admin_Scopes": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/scopes.php'; show_scopes(); break; case "Admin_Remove_Scope": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/delete_scope.php'; remove_scope(); break; case "Admin_Add_Scope": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/add_scope.php'; add_scope(); break; case "Admin_Scope": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/scope.php'; view_scope(); break; case "Admin_Edit_Scope": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/edit_scope.php'; edit_scope(); break; case "Admin_Delete_NGI": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/admin/delete_ngi.php'; delete_ngi(); break; case "User_Validate_DN_Change": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/user/retrieve_account_user_validate.php'; validate_dn_change(); break; case "Add_Site_Property": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/site/add_site_property.php'; add_site_property(); break; case "Add_Service_Property": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/add_service_property.php'; add_service_property(); break; case "Add_Endpoint_Property": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/add_endpoint_property.php'; add_endpoint_property(); break; case "Delete_Site_Property": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/site/delete_site_property.php'; delete(); break; case "Delete_Service_Property": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/delete_service_property.php'; delete(); break; case "Delete_Endpoint_Property": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/delete_endpoint_property.php'; delete(); break; case "Edit_Site_Property": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/site/edit_site_property.php'; edit_property(); break; case "Edit_Service_Property": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/edit_service_property.php'; edit_property(); break; case "Edit_Endpoint_Property": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/edit_endpoint_property.php'; edit_property(); break; case "Add_Service_Group_Property": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service_group/add_service_group_property.php'; add_service_group_property(); break; case "Edit_Service_Group_Property": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service_group/edit_service_group_property.php'; edit_property(); break; case "Delete_Service_Group_Property": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service_group/delete_service_group_property.php'; delete(); break; case "Delete_Service_Endpoint": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/delete_service_endpoint.php'; delete_endpoint(); break; case "Edit_Service_Endpoint": rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/service/edit_service_endpoint.php'; edit_endpoint(); break; default: // require auth by default rejectIfNotAuthenticated(); require_once __DIR__ . '/controllers/start_page.php'; startPage(); break; } }
/** * Handle the request to reassign sites * * @since 1.7.0 * * @global object $wpdb */ private function reassign_sites_handler() { global $wpdb; // Coming in $to = isset($_POST['to']) ? $_POST['to'] : array(); // Orphaning out $from = isset($_POST['from']) ? $_POST['from'] : array(); // Bail early if no movement if (empty($to) && empty($from)) { return; } // Cast the network ID $network_id = (int) $_GET['id']; // Query for sites $sql = "SELECT * FROM {$wpdb->blogs}"; $prep = $wpdb->prepare($sql, (int) $_GET['id']); $sites = $wpdb->get_results($prep); // Loop through and move sites foreach ($sites as $site) { // Skip the main site of this network if (is_main_site_for_network($site->blog_id, $site->site_id)) { continue; } // Coming in if (in_array($site->blog_id, $to)) { move_site($site->blog_id, $network_id); // Orphaning out } elseif (in_array($site->blog_id, $from)) { move_site($site->blog_id, 0); } } }
/** * Move to blog to another network * * <site_id> * : Site id to move * * <new_network_id> * : New network id * * @subcommand move-site */ public function move_site($args, $assoc_args) { list($site_id, $new_network_id) = $args; $network_id = move_site($site_id, $new_network_id); if (is_wp_error($network_id)) { WP_CLI::error($network_id); } WP_CLI::success(sprintf(__('Blog %d has moved to network %d.', 'wp-multi-network'), $site_id, $new_network_id)); }
/** * Handle the request to reassign sites * * @since 2.0.0 */ private function handle_reassign_sites() { // Coming in $to = isset($_POST['to']) ? array_map('absint', (array) $_POST['to']) : array(); // Orphaning out $from = isset($_POST['from']) ? array_map('absint', (array) $_POST['from']) : array(); // Bail early if no movement if (empty($to) && empty($from)) { return; } // Cast the network ID $network_id = (int) $_GET['id']; // Setup sites arrays $moving_to = $moving_from = array(); // Query for sites in this network $sites_list = get_sites(array('network_id' => $network_id, 'fields' => 'ids')); // Moving out from current network foreach ($from as $site_id) { if (in_array($site_id, $sites_list, true)) { $moving_from[] = $site_id; } } // Moving into current network foreach ($to as $site_id) { if (!in_array($site_id, $sites_list, true)) { $moving_to[] = $site_id; } } // Merge into one array $moving = array_filter(array_merge($moving_to, $moving_from)); // Loop through and move sites foreach ($moving as $site_id) { // Skip the main site of this network if (is_main_site_for_network($site_id)) { continue; } // Coming in if (in_array($site_id, $to) && !in_array($site_id, $sites_list, true)) { move_site($site_id, $network_id); // Orphaning out } elseif (in_array($site_id, $from, true)) { move_site($site_id, 0); } } }
public function reassign_site_page() { global $wpdb; if (isset($_POST['reassign']) && isset($_GET['id'])) { /** Javascript enabled for client - check the 'to' box */ if (isset($_POST['jsEnabled'])) { if (!isset($_POST['to'])) { die(esc_html__('No blogs selected.', 'wp-multi-network')); } $sites = $_POST['to']; /** Javascript disabled for client - check the 'from' box */ } else { if (!isset($_POST['from'])) { die(esc_html_e('No blogs selected.', 'wp-multi-network')); } $sites = $_POST['from']; } $current_blogs = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->blogs} WHERE site_id = %d", (int) $_GET['id'])); foreach ($sites as $site) { move_site($site, (int) $_GET['id']); } /* true sync - move any unlisted blogs to 'zero' network */ if (ENABLE_NETWORK_ZERO) { foreach ($current_blogs as $current_blog) { if (!in_array($current_blog->blog_id, $sites)) { move_site($current_blog->blog_id, 0); } } } $_GET['moved'] = 'yes'; $_GET['action'] = 'saved'; } else { // get network by id $network = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->site} WHERE id = %d", (int) $_GET['id'])); if (empty($network)) { die(esc_html__('Invalid network id.', 'wp-multi-network')); } $sites = $wpdb->get_results("SELECT * FROM {$wpdb->blogs}"); if (empty($sites)) { die(esc_html__('Site table inaccessible.', 'wp-multi-network')); } foreach ($sites as $key => $site) { $table_name = $wpdb->get_blog_prefix($site->blog_id) . "options"; $site_name = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$table_name} WHERE option_name = %s", 'blogname')); if (empty($site_name)) { die(esc_html__('Invalid blog.', 'wp-multi-network')); } $sites[$key]->name = stripslashes($site_name->option_value); } ?> <div class="wrap"> <form method="post" id="site-assign-form" action="<?php echo $_SERVER['REQUEST_URI']; ?> "> <?php screen_icon('ms-admin'); ?> <h2><?php esc_html_e('Networks', 'wp-multi-network'); ?> </h2> <h3><?php esc_html_e('Assign Sites to', 'wp-multi-network'); ?> : http://<?php echo esc_html($network->domain . $network->path); ?> </h3> <noscript> <div id="message" class="updated"><p><?php esc_html_e('Select the blogs you want to assign to this network from the column at left, and click "Update Assignments."', 'wp-multi-network'); ?> </p></div> </noscript> <table class="widefat"> <thead> <tr> <th><?php esc_html_e('Available', 'wp-multi-network'); ?> </th> <th style="width: 2em;"></th> <th><?php esc_html_e('Assigned', 'wp-multi-network'); ?> </th> </tr> </thead> <tr> <td> <select name="from[]" id="from" multiple style="height: auto; width: 98%;"> <?php foreach ($sites as $site) { if ($site->site_id != $network->id) { echo '<option value="' . esc_attr($site->blog_id) . '">' . esc_html(sprintf('%1$s (%2$s%3$s)', $site->name, $site->domain, $site->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_NETWORK_ZERO) { ?> <ul style="margin: 0; padding: 0; list-style-type: none;"> <?php foreach ($sites as $site) { ?> <?php if ($site->site_id === $network->id) { ?> <li><?php echo esc_html(sprintf('%1$s (%2$s%3$s)', $site->name, $site->domain, $site->path)); ?> </li> <?php } ?> <?php } ?> </ul> <?php } ?> <select name="to[]" id="to" multiple style="height: auto; width: 98%"> <?php if (ENABLE_NETWORK_ZERO) { foreach ($sites as $site) { if ($site->site_id === $network->id) { echo '<option value="' . esc_attr($site->blog_id) . '">' . esc_html(sprintf('%1$s (%2$s%3$s)', $site->name, $site->domain, $site->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 esc_html_e('Options', 'wp-multi-network'); ?> :</th></tr> </thead> <?php do_action('add_move_blog_option', $site->blog_id); ?> </table> <br /> <?php } ?> <?php submit_button(esc_attr__('Update Assignments', 'wp-multi-network'), 'primary', 'reassign', false); ?> <a class="button" href="<?php echo $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); }