Пример #1
0
 /**
  * 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);
 }
Пример #2
0
    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 
        }
    }