aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/develop/adjust_avatars.php
blob: dc4ae88f371aa3100b3ab9ec1e43ac20c3b34859 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?php
/**
* Corrects avatar filenames to match the new avatar delivery method.
*
* You should make a backup from your users table and the avatar directory in case something goes wrong
*/
die("Please read the first lines of this script for instructions on how to enable it");

set_time_limit(0);

define('IN_PHPBB', true);
$phpbb_root_path = './../';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.'.$phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();

$echos = 0;
 
if (!isset($config['avatar_salt']))
{
	$cache->purge();
	if (!isset($config['avatar_salt']))
	{
		die('database not up to date');
	}
	die('database not up to date');
}

// let's start with the users using a group_avatar.
$sql = 'SELECT group_id, group_avatar
	FROM ' . GROUPS_TABLE . '
	WHERE group_avatar_type = ' . AVATAR_UPLOAD;

// We'll skip these, so remember them
$group_avatars = array();

echo '<br /> Updating groups' . "\n";

$result = $db->sql_query($sql);

while ($row = $db->sql_fetchrow($result))
{
	$new_avatar_name = adjust_avatar($row['group_avatar'], 'g' . $row['group_id']);
	$group_avatars[] = $new_avatar_name;
	
	// failure is probably due to the avatar name already being adjusted
	if ($new_avatar_name !== false)
	{
		$sql = 'UPDATE ' . USERS_TABLE . "
			SET user_avatar = '" . $db->sql_escape($new_avatar_name) . "'
			WHERE user_avatar = '" . $db->sql_escape($row['group_avatar']) . "' 
			AND user_avatar_type = " . AVATAR_UPLOAD;
		$db->sql_query($sql);
		
		$sql = 'UPDATE ' . GROUPS_TABLE . "
			SET group_avatar = '" . $db->sql_escape($new_avatar_name) . "'
			WHERE group_id = {$row['group_id']}";
		$db->sql_query($sql);
	}
	else
	{
		echo '<br /> Failed updating group ' . $row['group_id'] . "\n";
	}

	if ($echos > 200)
	{
		echo '<br />' . "\n";
		$echos = 0;
	}

	echo '.';
	$echos++;

	flush();
}
$db->sql_freeresult($result);

$sql = 'SELECT user_id, username, user_avatar, user_avatar_type
	FROM ' . USERS_TABLE . ' 
	WHERE user_avatar_type = ' . AVATAR_UPLOAD . ' 
	AND ' . $db->sql_in_set('user_avatar', $group_avatars, true, true);
$result = $db->sql_query($sql);

echo '<br /> Updating users' . "\n";

while ($row = $db->sql_fetchrow($result))
{
	$new_avatar_name = adjust_avatar($row['user_avatar'], $row['user_id']);

	// failure is probably due to the avatar name already being adjusted
	if ($new_avatar_name !== false)
	{
		$sql = 'UPDATE ' . USERS_TABLE . "
			SET user_avatar = '" . $db->sql_escape($new_avatar_name) . "'
			WHERE user_id = {$row['user_id']}";
		$db->sql_query($sql);
	}
	else
	{
		// nuke this avatar
		$sql = 'UPDATE ' . USERS_TABLE . "
			SET user_avatar = '', user_avatar_type = 0
			WHERE user_id = {$row['user_id']}";
		$db->sql_query($sql);
		echo '<br /> Failed updating user ' . $row['user_id'] . "\n";
	}
	
	if ($echos > 200)
	{
		echo '<br />' . "\n";
		$echos = 0;
	}

	echo '.';
	$echos++;

	flush();
}

$db->sql_freeresult($result);

echo 'FINISHED';

// Done
$db->sql_close();

function adjust_avatar($old_name, $midfix)
{
	global $config, $phpbb_root_path;
	
	$avatar_path = $phpbb_root_path . $config['avatar_path'];
	$extension = strtolower(substr(strrchr($old_name, '.'), 1));
	$new_name = $config['avatar_salt'] . '_' . $midfix . '.' . $extension;

	if (@file_exists($avatar_path . '/' . $old_name) && @is_writable($avatar_path . '/' . $old_name) && @is_writable($avatar_path . '/' . $new_name))
	{
		@rename($avatar_path . '/' . $old_name, $avatar_path . '/' . $new_name);
		return $midfix . '.' . $extension;
	}
	return false;
}