View difference between Paste ID: p3fydKGd and
SHOW: | | - or go back to the newest paste.
1-
1+
<?php
2
3
/**
4
 * Written by Cast Iron Coding for the CUNY Academic Commons
5
 */
6
7
class wpmuSetDomain {
8
	
9
	private $dbConn = false;
10
	
11
	public function __construct() {
12
		error_reporting(E_ALL);
13
	}
14
	
15
	public function setDatabaseConnection($host,$user,$password,$db) {
16
		$host = '127.0.0.1';
17
		
18
		if($user == 'commons') {
19
			$msg = 'This script will not run on databases named "commons." This is a precaution to prevent it from being run on the production database by mistake';
20
			die($msg);
21
		}
22
		$this->dbConn = mysql_connect($host,$user,$password);
23
		$this->db = $db;
24
		mysql_select_db($db,$this->dbConn);
25
	}
26
	
27
	private function getTables() {
28
		$q = 'SHOW TABLES FROM '.$this->db;
29
		$qres = mysql_query($q);
30
		$tables = array();
31
		while($row = mysql_fetch_array($qres)) {
32
			$tables[] = $row[0];
33
		}
34
		return $tables;
35
	}
36
	
37
	private function getFields($table) {
38
		$q = 'SHOW FIELDS FROM '.$table;
39
		$qres = mysql_query($q);
40
		$fields = array();
41
		while($row = mysql_fetch_assoc($qres)) {
42
			$type = $row['Type'];
43
			$typeOk = false;
44
			if(stristr(strtolower($type),'char')) $typeOk = true;
45
			elseif(stristr(strtolower($type),'text')) $typeOk = true;
46
			elseif(stristr(strtolower($type),'blob')) $typeOk = true;
47
			if($typeOk == true) $fields[] = $row;
48
		}
49
		return $fields;
50
	}
51
	
52
	private function fatalError($msg) {
53
		print $msg;
54
		print 'TEST';
55
		die('EXITING...');
56
	}
57
	
58
	public function setDomain($oldDomain, $newDomain, $testOnly) {
59
		
60
		if($testOnly) {
61
			$queryType = 'select';
62
		} else {
63
			$queryType = 'replace';
64
		}
65
		
66
		// get all tables
67
		$tables = $this->getTables();
68
		
69
		$i = 0;
70
		foreach($tables as $table) {
71
			$fields = $this->getFields($table);
72
73
			if(count($fields) > 0) {
74
				print 'Updating table "'.$table.'"'."\n";
75
				
76
				foreach($fields as $field) {
77
					$i++;
78
					$fieldName = $field['Field'];
79
					if($queryType == 'replace') {
80
		                $q = 'UPDATE '.$table.' SET '.$fieldName.' = REPLACE('.$fieldName.',\''.$oldDomain.'\',\''.$newDomain.'\')';
81
						#print $q.'</br>';
82
						mysql_query($q);
83
					} else {
84
		                $q = 'SELECT * FROM '.$table.' WHERE '.$fieldName.' REGEXP(\''.$oldDomain.'\')';
85
						#print $q.'</br>';
86
		            }
87
				}
88
			}
89
		}
90
		if($i > 1000) {
91
			print 'Executed '.$i.' queries. Wow, that\'s a lot!'."\n";
92
		} else {
93
			print 'Executed '.$i.' queries. Heck, that\'s nothing!'."\n";
94
		}
95
	}
96
	
97
	public function confirm($oldDomain, $newDomain) {
98
		require_once('/sites/xcommons/cac-env-config.php');
99
		echo "\n\n";
100
		echo "Please confirm that you would like to do the following:\n\n";
101
		echo "Replace '$oldDomain' in the Wordpress Database [".strtoupper(DB_NAME).'], the BuddyPress Database ['.strtoupper(BBDB_NAME).'] and in the MediaWiki database ['.strtoupper(MW_DB_NAME)."] with '$newDomain'\n";
102
		echo "\nAre you sure you want me to do this? If so, type 'yes' and press return\n";
103
		$confirm = trim(fgets(STDIN));
104
		if($confirm != "yes") die("\n".'You did\'nt say yes! Alas, I am done for.'."\n\n");
105
	}
106
	
107
	public function doUpdates($oldDomain, $newDomain, $testOnly) {
108
		// include the configuration file with the local connection constants
109
		require_once('/sites/xcommons/cac-env-config.php');
110
		
111
		$wpmu = true;
112
		$bpress = true;
113
		$mwiki = true;
114
		
115
		// WPMU
116
		if($wpmu == true) {
117
			print '######################'."\n";
118
			print 'Updating WPMU Database: '.DB_NAME."\n";
119
			print '######################'."\n";
120
			$this->setDatabaseConnection(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
121
			$this->setDomain($oldDomain,$newDomain,$testOnly);
122
		}
123
124
		// BBPRESS, IF IT'S NOT IN THE SAME DB.
125
		if($bpress == true && DB_NAME != BBDB_NAME && BBDB_USER && BBDB_PASSWORD && BBDB_NAME) {
126
			print '######################'."\n";
127
			print 'Updating BBPress Database: '.BBDB_NAME."\n";
128
			print '######################'."\n";
129
			$this->setDatabaseConnection(BBDB_HOST,BBDB_USER,BBDB_PASSWORD,BBDB_NAME);
130
			$this->setDomain($oldDomain,$newDomain,$testOnly);
131
		}
132
133
		// MEDIAWIKI, IF IT'S NOT IN THE SAME DB.
134
		if($mwiki == true && MW_DB_NAME != BBDB_NAME && MW_DB_NAME != DB_NAME && MW_DB_SERVER && MW_DB_USER && MW_DB_PASSWORD && MW_DB_NAME) {
135
			print '######################'."\n";
136
			print 'Updating MediaWiki Database: '.MW_DB_PASSWORD."\n";
137
			print '######################'."\n";
138
			$this->setDatabaseConnection(MW_DB_SERVER,MW_DB_USER,MW_DB_PASSWORD,MW_DB_NAME);
139
			$this->setDomain($oldDomain,$newDomain,$testOnly);
140
		}
141
142
143
144
	}
145
}
146
147
$wpmuSetDomain = new wpmuSetDomain;
148
echo 'This script replaces all instances of one domain in the commons databases with another domain name.'."\n";
149
150
echo 'Enter the domain name that you want to change (press return to accept the default: "commons.gc.cuny.edu"):'."\n";
151
$oldDomain = trim(fgets(STDIN));
152
if($oldDomain == '') $oldDomain = 'commons.gc.cuny.edu';
153
154
$newDomain = false;
155
156
$first = true;
157
while($newDomain == '') {
158
	if($first == true) {
159
		echo 'Enter the domain name that you want to change to:'."\n";
160
	} else {
161
		echo 'That\'s not a domain name. Enter the domain name that you want to change to or press ctrl+c to exit'."\n";
162
	}
163
	$first = false;
164
	$newDomain = trim(fgets(STDIN));
165
}
166
167
$wpmuSetDomain->confirm($oldDomain,$newDomain);
168
$wpmuSetDomain->doUpdates($oldDomain,$newDomain,0);
169
170
171
?>