wp/wp-content/plugins/blog-copier/blog-copier.php
author ymh <ymh.work@gmail.com>
Mon, 08 Jun 2015 16:11:51 +0000
changeset 4 346c88efed21
child 5 5e2f62d02dcd
permissions -rw-r--r--
add blog-copier plugin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/*
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Plugin Name: Blog Copier
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
Plugin URI: http://wordpress.org/extend/plugins/blog-copier/
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
Description: Enables superusers to copy existing sub blogs to new sub blogs.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
Version: 1.0.5
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
Author: Modern Tribe, Inc.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
Network: true
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
Author URI: http://tri.be
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
Copyright: (C) 2012 Modern Tribe derived from (C) 2010 Ron Rennick, All rights reserved.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
See http://wpebooks.com/replicator/ for original code.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
This program is free software; you can redistribute it and/or modify
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
it under the terms of the GNU General Public License as published by
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
the Free Software Foundation; either version 2 of the License, or
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
(at your option) any later version.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
This program is distributed in the hope that it will be useful,
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
but WITHOUT ANY WARRANTY; without even the implied warranty of
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
GNU General Public License for more details.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
You should have received a copy of the GNU General Public License
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
along with this program; if not, write to the Free Software
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
*/
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
// Block direct requests
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
if ( !defined('ABSPATH') )
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
	die('-1');
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
if ( !class_exists('BlogCopier') ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
	/**
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
	 * Blog Copier
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
	 *
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
	 * @package BlogCopier
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
	 */
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
	class BlogCopier {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
		private $_name;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
		private $_domain = 'blog-copier';
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
		/**
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
		 * Main constructor function
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
		 */
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
		public function __construct() {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
			add_action( 'network_admin_menu', array( $this, 'ms_add_page' ) );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
			add_filter( 'manage_sites_action_links', array( $this, 'add_site_action' ), 10, 2 );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
		}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
		/**
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
		 * Add admin page to network admin menu
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
		 */
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
		public function ms_add_page() {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
			$this->setup_localization();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
			add_submenu_page( 'sites.php', $this->_name, $this->_name, 'manage_sites', $this->_domain, array( $this, 'admin_page' ) );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
		}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
		/**
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
		 * Add "Copy Blog" link under each site in the sites list view.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
		 *
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
		 * @param array $actions
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
		 * @param int $blog_id
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
		 * @return array $actions
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
		 */
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
		public function add_site_action( $actions, $blog_id ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
			if( !is_main_site( $blog_id ) ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
				$this->setup_localization();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
				$url = add_query_arg( array(
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
					'page' => $this->_domain,
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
					'blog' => $blog_id
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
				), network_admin_url( 'sites.php' ) );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
				$nonce_string = sprintf( '%s-%s', $this->_domain, $blog_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
				$actions[$this->_domain] = '<a href="' . esc_url( wp_nonce_url( $url, $nonce_string ) ) . '">' . __( 'Copy', $this->_domain ) . '</a>';
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
			}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
			return $actions;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
		}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
		/**
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
		 * Admin page
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
		 */
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
		public function admin_page() {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
			global $wpdb, $current_site;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
			if( !current_user_can( 'manage_sites' ) )
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
				wp_die( __( "Sorry, you don't have permissions to use this page.", $this->_domain ) );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
			$from_blog = false;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
			$copy_id = 0;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
			$nonce_string = sprintf( '%s-%s', $this->_domain, $copy_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
			if( isset($_GET['blog']) && wp_verify_nonce( $_GET['_wpnonce'], $nonce_string ) ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
				$copy_id = (int)$_GET['blog'];
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
				$from_blog = get_blog_details( $copy_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
				if( $from_blog->site_id != $current_site->id ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
					$from_blog = false;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
				}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
			}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
			$from_blog_id = ( isset( $_POST['source_blog'] ) ) ? (int) $_POST['source_blog'] : -1;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
			if( isset($_POST[ 'action' ]) && $_POST[ 'action' ] == $this->_domain ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
				check_admin_referer( $this->_domain );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
				$blog = $_POST['blog'];
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
				$domain = sanitize_user( str_replace( '/', '', $blog[ 'domain' ] ) );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
				$title = $blog[ 'title' ];
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
				$copy_files = (isset($_POST['copy_files']) && $_POST['copy_files'] == '1') ? true : false;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
				if ( !$from_blog_id ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
					$msg = __( 'Please select a source blog.', $this->_domain );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
				} elseif ( empty( $domain ) ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
					$msg = __( 'Please enter a "New Blog Address".', $this->_domain );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
				} elseif ( empty( $title ) ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
					$msg = __( 'Please enter a "New Blog Title".', $this->_domain );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
				} else {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
					$msg = $this->copy_blog( $domain, $title, $from_blog_id, $copy_files );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
				}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
			} else {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
				$copy_files = true; // set the default for first page load
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			} ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
			<div class='wrap'><h2><?php echo $this->_name; ?></h2><?php
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
			if( isset( $msg ) ) { ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
			<div id="message" class="updated fade"><p><strong><?php echo $msg; ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
			</strong></p></div><?php
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
			if( !$from_blog ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
				$query = "SELECT b.blog_id, CONCAT(b.domain, b.path) as domain_path FROM {$wpdb->blogs} b " .
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
					"WHERE b.site_id = {$current_site->id} && b.blog_id > 1 ORDER BY domain_path ASC LIMIT 10000";
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
				$blogs = $wpdb->get_results( $query );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
			}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
			if( $from_blog || $blogs ) { ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
			<div class="wrap">
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
			<h3><?php _e( 'Blog Copy Settings', $this->_domain ); ?></h3>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
				<form method="POST">
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
					<input type="hidden" name="action" value="<?php echo $this->_domain; ?>" />
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
						<table class="form-table">
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
							<?php if( $from_blog ) { ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
							<tr>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
								<th scope='row'><?php _e( 'Source Blog to Copy', $this->_domain ); ?></th>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
								<td><strong><?php printf( '<a href="%s" target="_blank">%s</a>', $from_blog->siteurl, $from_blog->blogname ); ?></strong>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
								<input type="hidden" name="source_blog" value="<?php echo $copy_id; ?>" />
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
								</td>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
							</tr>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
							<?php } else { ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
							<tr class="form-required">
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
								<th scope='row'><?php _e( 'Choose Source Blog to Copy', $this->_domain ); ?></th>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
								<td>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
									<select name="source_blog">
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
									<?php foreach( $blogs as $blog ) { ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
										<option value="<?php echo $blog->blog_id; ?>" <?php selected( $blog->blog_id, $from_blog_id ); ?>><?php echo substr($blog->domain_path, 0, -1); ?></option>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
									<?php } ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
									</select>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
								</td>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
							</tr>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
							<?php } ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
							<tr class="form-required">
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
								<th scope='row'><?php _e( 'New Blog Address', $this->_domain ); ?></th>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
								<td>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
								<?php if( is_subdomain_install() ) { ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
									<input name="blog[domain]" type="text" title="<?php _e( 'Subdomain', $this->_domain ); ?>" class="regular-text"/>.<?php echo $current_site->domain;?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
								<?php } else {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
									echo $current_site->domain . $current_site->path ?><input name="blog[domain]" type="text" title="<?php _e( 'Domain', $this->_domain ); ?>" class="regular-text"/>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
								<?php } ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
								</td>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
							</tr>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
							<tr class="form-required">
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
								<th scope='row'><?php _e( 'New Blog Title', $this->_domain ); ?></th>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
								<td><input name="blog[title]" type="text" title="<?php _e( 'Title', $this->_domain ); ?>" class="regular-text"/></td>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
							</tr>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
							<tr class="form-required">
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
								<th scope='row'><?php _e( 'Copy Files?', $this->_domain ); ?></th>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
								<td><input type="checkbox" name="copy_files" value="1" <?php checked( $copy_files ); ?>/></td>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
							</tr>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
						</table>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
						<?php wp_nonce_field( $this->_domain ); ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
					<p class="submit"><input class='button' type='submit' value='<?php _e( 'Copy Now', $this->_domain ); ?>' /></p>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
				</form></div>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
			<?php } else { ?>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
				<div class="wrap">
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
					<h3><?php _e( 'Oops!', $this->_domain ); ?></h3>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
					<p><?php
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
					printf( __( 'This plugin only works on subblogs. To use this you\'ll need to <a href="%s">create at least one subblog</a>.', $this->_domain ), network_admin_url( 'site-new.php' ) );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
					?></p>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
				</div>
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
			<?php }
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
		}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
		/**
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
		 * Copy the blog
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
		 *
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
		 * @param string $domain url of the new blog
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
		 * @param string $title title of the new blog
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
		 * @param int $from_blog_id ID of the blog being copied from.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
		 * @param bool $copy_files true if files should be copied
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
		 * @return string status message
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
		 */
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
		public function copy_blog($domain, $title, $from_blog_id = 0, $copy_files = true) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
			global $wpdb, $current_site, $base;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
			$email = get_blog_option( $from_blog_id, 'admin_email' );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
			$user_id = email_exists( sanitize_email( $email ) );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
			if( !$user_id ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
				// Use current user instead
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
				$user_id = get_current_user_id();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
			}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
			// The user id of the user that will become the blog admin of the new blog.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
			$user_id = apply_filters('copy_blog_user_id', $user_id, $from_blog_id);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
			if( is_subdomain_install() ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
				$newdomain = $domain.".".$current_site->domain;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
				$path = $base;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
			} else {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
				$newdomain = $current_site->domain;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
				$path = trailingslashit( $base ) . trailingslashit( $domain );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
			}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
			// The new domain that will be created for the destination blog.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
			$newdomain = apply_filters('copy_blog_domain', $newdomain, $domain);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
			// The new path that will be created for the destination blog.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
			$path = apply_filters('copy_blog_path', $path, $domain);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
			$wpdb->hide_errors();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
			$to_blog_id = wpmu_create_blog( $newdomain, $path, $title, $user_id , array( "public" => 1 ), $current_site->id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
			$wpdb->show_errors();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
			if( !is_wp_error( $to_blog_id ) ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
				$dashboard_blog = get_dashboard_blog();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
				if( !is_super_admin() && get_user_option( 'primary_blog', $user_id ) == $dashboard_blog->blog_id )
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
					update_user_option( $user_id, 'primary_blog', $to_blog_id, true );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
				// now copy
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
				if( $from_blog_id ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
					$this->copy_blog_data( $from_blog_id, $to_blog_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
					if ($copy_files) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
						$this->copy_blog_files( $from_blog_id, $to_blog_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
						$this->replace_content_urls( $from_blog_id, $to_blog_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
					}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
					$msg = sprintf(__( 'Copied: %s in %s seconds', $this->_domain ),'<a href="http://'.$newdomain.'" target="_blank">'.$title.'</a>', number_format_i18n(timer_stop()));
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
					do_action( 'log', __( 'Copy Complete!', $this->_domain ), $this->_domain, $msg );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
				}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
			} else {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
				$msg = $to_blog_id->get_error_message();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
			}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
			return $msg;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
		}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
		/**
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
		 * Copy blog data from one blog to another
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
		 *
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
		 * @param int $from_blog_id ID of the blog being copied from.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
		 * @param int $to_blog_id ID of the blog being copied to.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
		 */
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
		private function copy_blog_data( $from_blog_id, $to_blog_id ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
			global $wpdb, $wp_version;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
			if( $from_blog_id ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
				$from_blog_prefix = $this->get_blog_prefix( $from_blog_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
				$to_blog_prefix = $this->get_blog_prefix( $to_blog_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
				$from_blog_prefix_length = strlen($from_blog_prefix);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
				$to_blog_prefix_length = strlen($to_blog_prefix);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
				$from_blog_escaped_prefix = str_replace( '_', '\_', $from_blog_prefix );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
				// Grab key options from new blog.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
				$saved_options = array(
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
					'siteurl'=>'',
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
					'home'=>'',
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
					'upload_path'=>'',
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
					'fileupload_url'=>'',
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
					'upload_url_path'=>'',
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
					'admin_email'=>'',
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
					'blogname'=>''
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
				);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
				// Options that should be preserved in the new blog.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
				$saved_options = apply_filters('copy_blog_data_saved_options', $saved_options);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
				foreach($saved_options as $option_name => $option_value) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
					$saved_options[$option_name] = get_blog_option( $to_blog_id, $option_name );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
				}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
				// Copy over ALL the tables.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
				$query = $wpdb->prepare('SHOW TABLES LIKE %s',$from_blog_escaped_prefix.'%');
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
				do_action( 'log', $query, $this->_domain);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
				$old_tables = $wpdb->get_col($query);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
				foreach ($old_tables as $k => $table) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
					$raw_table_name = substr( $table, $from_blog_prefix_length );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
					$newtable = $to_blog_prefix . $raw_table_name;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
					$query = "DROP TABLE IF EXISTS {$newtable}";
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
					do_action( 'log', $query, $this->_domain);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
					$wpdb->get_results($query);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
					$query = "CREATE TABLE IF NOT EXISTS {$newtable} LIKE {$table}";
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
					do_action( 'log', $query, $this->_domain);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
					$wpdb->get_results($query);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
					$query = "INSERT {$newtable} SELECT * FROM {$table}";
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
					do_action( 'log', $query, $this->_domain);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
					$wpdb->get_results($query);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
				}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
				// apply key opptions from new blog.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
				switch_to_blog( $to_blog_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
				foreach( $saved_options as $option_name => $option_value ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
					update_option( $option_name, $option_value );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
				}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
				/// fix all options with the wrong prefix...
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
				$query = $wpdb->prepare("SELECT * FROM {$wpdb->options} WHERE option_name LIKE %s",$from_blog_escaped_prefix.'%');
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
				$options = $wpdb->get_results( $query );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
				do_action( 'log', $query, $this->_domain, count($options).' results found.');
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
				if( $options ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
					foreach( $options as $option ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
						$raw_option_name = substr($option->option_name,$from_blog_prefix_length);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
						$wpdb->update( $wpdb->options, array( 'option_name' => $to_blog_prefix . $raw_option_name ), array( 'option_id' => $option->option_id ) );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
					}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
					wp_cache_flush();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
				}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
				// Fix GUIDs on copied posts
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
				$this->replace_guid_urls( $from_blog_id, $to_blog_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
				restore_current_blog();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
			}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
		}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
		/**
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
		 * Copy files from one blog to another.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
		 *
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
		 * @param int $from_blog_id ID of the blog being copied from.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
		 * @param int $to_blog_id ID of the blog being copied to.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
		 */
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
		private function copy_blog_files( $from_blog_id, $to_blog_id ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
			set_time_limit( 2400 ); // 60 seconds x 10 minutes
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
			@ini_set('memory_limit','2048M');
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
			// Path to source blog files.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
			switch_to_blog($from_blog_id);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
			$dir_info = wp_upload_dir();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
			$from = str_replace(' ', "\\ ", trailingslashit($dir_info['basedir']).'*'); // * necessary with GNU cp, doesn't hurt anything with BSD cp
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
			restore_current_blog();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
			$from = apply_filters('copy_blog_files_from', $from, $from_blog_id);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
			// Path to destination blog files.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
			switch_to_blog($to_blog_id);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
			$dir_info = wp_upload_dir();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
			$to = str_replace(' ', "\\ ", trailingslashit($dir_info['basedir']));
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
			restore_current_blog();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
			$to = apply_filters('copy_blog_files_to', $to, $to_blog_id);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
			// Shell command used to copy files.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
			$command = apply_filters('copy_blog_files_command', sprintf("cp -Rfp %s %s", $from, $to), $from, $to );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
			exec($command);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
		}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
		/**
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
		 * Replace URLs in post content
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
		 *
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
		 * @param int $from_blog_id ID of the blog being copied from.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
		 * @param int $to_blog_id ID of the blog being copied to.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
		 */
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
		private function replace_content_urls( $from_blog_id, $to_blog_id ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
			global $wpdb;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
			$to_blog_prefix = $this->get_blog_prefix( $to_blog_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
			$from_blog_url = get_blog_option( $from_blog_id, 'siteurl' );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
			$to_blog_url = get_blog_option( $to_blog_id, 'siteurl' );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
			$query = $wpdb->prepare( "UPDATE {$to_blog_prefix}posts SET post_content = REPLACE(post_content, '%s', '%s')", $from_blog_url, $to_blog_url );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
			do_action( 'log', $query, $this->_domain);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
			$wpdb->query( $query );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
		}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
		/**
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
		 * Replace URLs in post GUIDs
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
		 *
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
		 * @param int $from_blog_id ID of the blog being copied from.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
		 * @param int $to_blog_id ID of the blog being copied to.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
		 */
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
		private function replace_guid_urls( $from_blog_id, $to_blog_id ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
			global $wpdb;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
			$to_blog_prefix = $this->get_blog_prefix( $to_blog_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
			$from_blog_url = get_blog_option( $from_blog_id, 'siteurl' );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
			$to_blog_url = get_blog_option( $to_blog_id, 'siteurl' );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
			$query = $wpdb->prepare( "UPDATE {$to_blog_prefix}posts SET guid = REPLACE(guid, '%s', '%s')", $from_blog_url, $to_blog_url );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
			do_action( 'log', $query, $this->_domain);
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
			$wpdb->query( $query );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
		}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
		/**
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
		 * Get the database prefix for a blog
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
		 *
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
		 * @param int $blog_id ID of the blog.
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
		 * @return string prefix
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
		 */
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
		private function get_blog_prefix( $blog_id ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
			global $wpdb;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
			if( is_callable( array( &$wpdb, 'get_blog_prefix' ) ) ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
				$prefix = $wpdb->get_blog_prefix( $blog_id );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
			} else {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
				$prefix = $wpdb->base_prefix . $blog_id . '_';
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
			}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
			return $prefix;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
		}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
		/**
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
		 * Load the localization file
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
		 */
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
		private function setup_localization() {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
			if ( !isset( $this->_name ) ) {
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
				load_plugin_textdomain( $this->_domain, false, trailingslashit(dirname(__FILE__)) . 'lang/');
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
				$this->_name = __( 'Blog Copier', $this->_domain );
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
			}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
		}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
	}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
	global $BlogCopier;
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
	$BlogCopier = new BlogCopier();
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
}
346c88efed21 add blog-copier plugin
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
?>