phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / includes / functions_convert.php

History | View | Annotate | Download (60.7 kB)

1 6847 acydburn
<?php
2 7736 acydburn
/**
3 6847 acydburn
*
4 6847 acydburn
* @package install
5 6847 acydburn
* @version $Id$
6 7736 acydburn
* @copyright (c) 2006 phpBB Group
7 7736 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 6847 acydburn
*
9 6847 acydburn
*/
10 6847 acydburn
11 6939 acydburn
/**
12 8133 acydburn
* @ignore
13 8133 acydburn
*/
14 8133 acydburn
if (!defined('IN_PHPBB'))
15 8133 acydburn
{
16 8133 acydburn
        exit;
17 8133 acydburn
}
18 8133 acydburn
19 8133 acydburn
/**
20 6939 acydburn
* Default avatar width/height
21 6939 acydburn
* @ignore
22 6847 acydburn
*/
23 6847 acydburn
define('DEFAULT_AVATAR_X', 80);
24 6847 acydburn
define('DEFAULT_AVATAR_Y', 80);
25 6847 acydburn
26 6939 acydburn
// Global functions - all functions can be used by convertors
27 6847 acydburn
28 6847 acydburn
// SIMPLE FUNCTIONS
29 6847 acydburn
30 6847 acydburn
/**
31 6847 acydburn
* Return the preceding value
32 6847 acydburn
*/
33 6847 acydburn
function dec($var)
34 6847 acydburn
{
35 6847 acydburn
        return --$var;
36 6847 acydburn
}
37 6847 acydburn
38 6847 acydburn
/**
39 6847 acydburn
* Return the next value
40 6847 acydburn
*/
41 6847 acydburn
function inc($var)
42 6847 acydburn
{
43 6847 acydburn
        return ++$var;
44 6847 acydburn
}
45 6847 acydburn
46 6847 acydburn
/**
47 6847 acydburn
* Return whether the value is positive
48 6847 acydburn
*/
49 6847 acydburn
function is_positive($n)
50 6847 acydburn
{
51 6847 acydburn
        return ($n > 0) ? 1 : 0;
52 6847 acydburn
}
53 6847 acydburn
54 6847 acydburn
/**
55 6847 acydburn
* Boolean inverse of the value
56 6847 acydburn
*/
57 6847 acydburn
function not($var)
58 6847 acydburn
{
59 6847 acydburn
        return ($var) ? 0 : 1;
60 6847 acydburn
}
61 6847 acydburn
62 6847 acydburn
/**
63 6847 acydburn
* Convert a textual value to it's equivalent boolean value
64 6847 acydburn
*
65 6847 acydburn
* @param string $str String to convert (converts yes, on, y, 1 and true to boolean true)
66 6847 acydburn
* @return boolean The equivalent value
67 6847 acydburn
*/
68 6847 acydburn
function str_to_bool($str)
69 6847 acydburn
{
70 6847 acydburn
        $str = strtolower($str);
71 6847 acydburn
        return ($str == 'yes' || $str == 'on' || $str == 'y' || $str == 'true' || $str == '1') ? true : false;
72 6847 acydburn
}
73 6847 acydburn
74 6847 acydburn
/**
75 6847 acydburn
* Function to mimic php's empty() function (it is the same)
76 6847 acydburn
*/
77 6847 acydburn
function is_empty($mixed)
78 6847 acydburn
{
79 6847 acydburn
        return empty($mixed);
80 6847 acydburn
}
81 6847 acydburn
82 6847 acydburn
/**
83 6847 acydburn
* Convert the name of a user's primary group to the appropriate equivalent phpBB group id
84 6847 acydburn
*
85 6847 acydburn
* @param string $status The name of the group
86 6847 acydburn
* @return int The group_id corresponding to the equivalent group
87 6847 acydburn
*/
88 6847 acydburn
function str_to_primary_group($status)
89 6847 acydburn
{
90 6847 acydburn
        switch (ucfirst(strtolower($status)))
91 6847 acydburn
        {
92 6847 acydburn
                case 'Administrator':
93 6847 acydburn
                        return get_group_id('administrators');
94 6847 acydburn
                break;
95 6847 acydburn
96 6847 acydburn
                case 'Super moderator':
97 6847 acydburn
                case 'Global moderator':
98 6847 acydburn
                case 'Moderator':
99 6847 acydburn
                        return get_group_id('global_moderators');
100 6847 acydburn
                break;
101 6847 acydburn
102 6847 acydburn
                case 'Guest':
103 6847 acydburn
                case 'Anonymous':
104 6847 acydburn
                        return get_group_id('guests');
105 6847 acydburn
                break;
106 6847 acydburn
107 6847 acydburn
                default:
108 6847 acydburn
                        return get_group_id('registered');
109 6847 acydburn
                break;
110 6847 acydburn
        }
111 6847 acydburn
}
112 6847 acydburn
113 6847 acydburn
/**
114 6847 acydburn
* Convert a boolean into the appropriate phpBB constant indicating whether the item is locked
115 6847 acydburn
*/
116 6847 acydburn
function is_item_locked($bool)
117 6847 acydburn
{
118 6847 acydburn
        return ($bool) ? ITEM_LOCKED : ITEM_UNLOCKED;
119 6847 acydburn
}
120 6847 acydburn
121 6847 acydburn
/**
122 6847 acydburn
* Convert a value from days to seconds
123 6847 acydburn
*/
124 6847 acydburn
function days_to_seconds($days)
125 6847 acydburn
{
126 6847 acydburn
        return ($days * 86400);
127 6847 acydburn
}
128 6847 acydburn
129 6847 acydburn
/**
130 6847 acydburn
* Determine whether a user is anonymous and return the appropriate new user_id
131 6847 acydburn
*/
132 6847 acydburn
function is_user_anonymous($user_id)
133 6847 acydburn
{
134 6847 acydburn
        return ($user_id > ANONYMOUS) ? $user_id : ANONYMOUS;
135 6847 acydburn
}
136 6847 acydburn
137 6847 acydburn
/**
138 6847 acydburn
* Generate a key value based on existing values
139 6847 acydburn
*
140 6847 acydburn
* @param int $pad Amount to add to the maximum value
141 6847 acydburn
* @return int Key value
142 6847 acydburn
*/
143 6847 acydburn
function auto_id($pad = 0)
144 6847 acydburn
{
145 6847 acydburn
        global $auto_id, $convert_row;
146 6847 acydburn
147 6847 acydburn
        if (!empty($convert_row['max_id']))
148 6847 acydburn
        {
149 6847 acydburn
                return $convert_row['max_id'] + $pad;
150 6847 acydburn
        }
151 8667 acydburn
152 6847 acydburn
        return $auto_id + $pad;
153 6847 acydburn
}
154 6847 acydburn
155 6847 acydburn
/**
156 6847 acydburn
* Convert a boolean into the appropriate phpBB constant indicating whether the user is active
157 6847 acydburn
*/
158 6847 acydburn
function set_user_type($user_active)
159 6847 acydburn
{
160 6847 acydburn
        return ($user_active) ? USER_NORMAL : USER_INACTIVE;
161 6847 acydburn
}
162 6847 acydburn
163 6847 acydburn
/**
164 6847 acydburn
* Convert a value from minutes to hours
165 6847 acydburn
*/
166 6847 acydburn
function minutes_to_hours($minutes)
167 6847 acydburn
{
168 6847 acydburn
        return ($minutes / 3600);
169 6847 acydburn
}
170 6847 acydburn
171 6847 acydburn
/**
172 6847 acydburn
* Return the group_id for a given group name
173 6847 acydburn
*/
174 6847 acydburn
function get_group_id($group_name)
175 6847 acydburn
{
176 6847 acydburn
        global $db, $group_mapping;
177 6847 acydburn
178 6847 acydburn
        if (empty($group_mapping))
179 6847 acydburn
        {
180 6847 acydburn
                $sql = 'SELECT group_name, group_id
181 6847 acydburn
                        FROM ' . GROUPS_TABLE;
182 6847 acydburn
                $result = $db->sql_query($sql);
183 6847 acydburn
184 6847 acydburn
                $group_mapping = array();
185 6847 acydburn
                while ($row = $db->sql_fetchrow($result))
186 6847 acydburn
                {
187 6847 acydburn
                        $group_mapping[strtoupper($row['group_name'])] = (int) $row['group_id'];
188 6847 acydburn
                }
189 6847 acydburn
                $db->sql_freeresult($result);
190 6847 acydburn
        }
191 6847 acydburn
192 6847 acydburn
        if (!sizeof($group_mapping))
193 6847 acydburn
        {
194 6847 acydburn
                add_default_groups();
195 6847 acydburn
                return get_group_id($group_name);
196 6847 acydburn
        }
197 6847 acydburn
198 6847 acydburn
        if (isset($group_mapping[strtoupper($group_name)]))
199 6847 acydburn
        {
200 6847 acydburn
                return $group_mapping[strtoupper($group_name)];
201 6847 acydburn
        }
202 6847 acydburn
203 6847 acydburn
        return $group_mapping['REGISTERED'];
204 6847 acydburn
}
205 6847 acydburn
206 6847 acydburn
/**
207 6847 acydburn
* Generate the email hash stored in the users table
208 10499 bantu
*
209 10499 bantu
* Note: Deprecated, calls should directly go to phpbb_email_hash()
210 6847 acydburn
*/
211 6847 acydburn
function gen_email_hash($email)
212 6847 acydburn
{
213 10499 bantu
        return phpbb_email_hash($email);
214 6847 acydburn
}
215 6847 acydburn
216 6847 acydburn
/**
217 6847 acydburn
* Convert a boolean into the appropriate phpBB constant indicating whether the topic is locked
218 6847 acydburn
*/
219 6847 acydburn
function is_topic_locked($bool)
220 6847 acydburn
{
221 6847 acydburn
        return (!empty($bool)) ? ITEM_LOCKED : ITEM_UNLOCKED;
222 6847 acydburn
}
223 6847 acydburn
224 6847 acydburn
/**
225 6847 acydburn
* Generate a bbcode_uid value
226 6847 acydburn
*/
227 6847 acydburn
function make_uid($timestamp)
228 6847 acydburn
{
229 8179 kellanved
        static $last_timestamp, $last_uid;
230 8179 kellanved
231 8179 kellanved
        if (empty($last_timestamp) || $timestamp != $last_timestamp)
232 8179 kellanved
        {
233 8179 kellanved
                $last_uid = substr(base_convert(unique_id(), 16, 36), 0, BBCODE_UID_LEN);
234 8179 kellanved
        }
235 8179 kellanved
        $last_timestamp = $timestamp;
236 8179 kellanved
        return $last_uid;
237 6847 acydburn
}
238 6847 acydburn
239 8179 kellanved
240 6847 acydburn
/**
241 6847 acydburn
* Validate a website address
242 6847 acydburn
*/
243 6847 acydburn
function validate_website($url)
244 6847 acydburn
{
245 7882 kellanved
        if ($url === 'http://')
246 7882 kellanved
        {
247 7807 kellanved
                return '';
248 7807 kellanved
        }
249 8033 acydburn
        else if (!preg_match('#^[a-z0-9]+://#i', $url) && strlen($url) > 0)
250 7807 kellanved
        {
251 7807 kellanved
                return 'http://' . $url;
252 7807 kellanved
        }
253 7882 kellanved
        return $url;
254 6847 acydburn
}
255 6847 acydburn
256 6847 acydburn
/**
257 6847 acydburn
* Convert nulls to zeros for fields which allowed a NULL value in the source but not the destination
258 6847 acydburn
*/
259 6847 acydburn
function null_to_zero($value)
260 6847 acydburn
{
261 6847 acydburn
        return ($value === NULL) ? 0 : $value;
262 6847 acydburn
}
263 6847 acydburn
264 6847 acydburn
/**
265 6847 acydburn
* Convert nulls to empty strings for fields which allowed a NULL value in the source but not the destination
266 6847 acydburn
*/
267 6847 acydburn
function null_to_str($value)
268 6847 acydburn
{
269 6847 acydburn
        return ($value === NULL) ? '' : $value;
270 6847 acydburn
}
271 6847 acydburn
272 6847 acydburn
// EXTENDED FUNCTIONS
273 6847 acydburn
274 6847 acydburn
/**
275 6847 acydburn
* Get old config value
276 6847 acydburn
*/
277 6847 acydburn
function get_config_value($config_name)
278 6847 acydburn
{
279 6847 acydburn
        static $convert_config;
280 6847 acydburn
281 6847 acydburn
        if (!isset($convert_config))
282 6847 acydburn
        {
283 6847 acydburn
                $convert_config = get_config();
284 6847 acydburn
        }
285 8667 acydburn
286 6847 acydburn
        if (!isset($convert_config[$config_name]))
287 6847 acydburn
        {
288 6847 acydburn
                return false;
289 6847 acydburn
        }
290 6847 acydburn
291 6847 acydburn
        return (empty($convert_config[$config_name])) ? '' : $convert_config[$config_name];
292 6847 acydburn
}
293 6847 acydburn
294 6847 acydburn
/**
295 6915 acydburn
* Convert an IP address from the hexadecimal notation to normal dotted-quad notation
296 6847 acydburn
*/
297 6847 acydburn
function decode_ip($int_ip)
298 6847 acydburn
{
299 6847 acydburn
        if (!$int_ip)
300 6847 acydburn
        {
301 7063 acydburn
                return $int_ip;
302 6847 acydburn
        }
303 6847 acydburn
304 6847 acydburn
        $hexipbang = explode('.', chunk_split($int_ip, 2, '.'));
305 6970 acydburn
306 7063 acydburn
        // Any mod changing the way ips are stored? Then we are not able to convert and enter the ip "as is" to not "destroy" anything...
307 7034 acydburn
        if (sizeof($hexipbang) < 4)
308 6970 acydburn
        {
309 7063 acydburn
                return $int_ip;
310 6970 acydburn
        }
311 6970 acydburn
312 7007 acydburn
        return hexdec($hexipbang[0]) . '.' . hexdec($hexipbang[1]) . '.' . hexdec($hexipbang[2]) . '.' . hexdec($hexipbang[3]);
313 6847 acydburn
}
314 6847 acydburn
315 6847 acydburn
/**
316 6847 acydburn
* Reverse the encoding of wild-carded bans
317 6847 acydburn
*/
318 6847 acydburn
function decode_ban_ip($int_ip)
319 6847 acydburn
{
320 6847 acydburn
        return str_replace('255', '*', decode_ip($int_ip));
321 6847 acydburn
}
322 6847 acydburn
323 6847 acydburn
/**
324 6847 acydburn
* Determine the MIME-type of a specified filename
325 6847 acydburn
* This does not actually inspect the file, but simply uses the file extension
326 6847 acydburn
*/
327 6847 acydburn
function mimetype($filename)
328 6847 acydburn
{
329 6847 acydburn
        if (!preg_match('/\.([a-z0-9]+)$/i', $filename, $m))
330 6847 acydburn
        {
331 6847 acydburn
                return 'application/octet-stream';
332 6847 acydburn
        }
333 6847 acydburn
334 6847 acydburn
        switch (strtolower($m[1]))
335 6847 acydburn
        {
336 6847 acydburn
                case 'zip':                return 'application/zip';
337 6847 acydburn
                case 'jpeg':        return 'image/jpeg';
338 6847 acydburn
                case 'jpg':                return 'image/jpeg';
339 6847 acydburn
                case 'jpe':                return 'image/jpeg';
340 6847 acydburn
                case 'png':                return 'image/png';
341 6847 acydburn
                case 'gif':                return 'image/gif';
342 6847 acydburn
                case 'htm':
343 6847 acydburn
                case 'html':        return 'text/html';
344 6847 acydburn
                case 'tif':                return 'image/tiff';
345 6847 acydburn
                case 'tiff':        return 'image/tiff';
346 6847 acydburn
                case 'ras':                return 'image/x-cmu-raster';
347 6847 acydburn
                case 'pnm':                return 'image/x-portable-anymap';
348 6847 acydburn
                case 'pbm':                return 'image/x-portable-bitmap';
349 6847 acydburn
                case 'pgm':                return 'image/x-portable-graymap';
350 6847 acydburn
                case 'ppm':                return 'image/x-portable-pixmap';
351 6847 acydburn
                case 'rgb':                return 'image/x-rgb';
352 6847 acydburn
                case 'xbm':                return 'image/x-xbitmap';
353 6847 acydburn
                case 'xpm':                return 'image/x-xpixmap';
354 6847 acydburn
                case 'xwd':                return 'image/x-xwindowdump';
355 6847 acydburn
                case 'z':                return 'application/x-compress';
356 6847 acydburn
                case 'gtar':        return 'application/x-gtar';
357 6847 acydburn
                case 'tgz':                return 'application/x-gtar';
358 6847 acydburn
                case 'gz':                return 'application/x-gzip';
359 6847 acydburn
                case 'tar':                return 'application/x-tar';
360 6847 acydburn
                case 'xls':                return 'application/excel';
361 6847 acydburn
                case 'pdf':                return 'application/pdf';
362 6847 acydburn
                case 'ppt':                return 'application/powerpoint';
363 6847 acydburn
                case 'rm':                return 'application/vnd.rn-realmedia';
364 6847 acydburn
                case 'wma':                return 'audio/x-ms-wma';
365 6847 acydburn
                case 'swf':                return 'application/x-shockwave-flash';
366 6847 acydburn
                case 'ief':                return 'image/ief';
367 6847 acydburn
                case 'doc':
368 6847 acydburn
                case 'dot':
369 6847 acydburn
                case 'wrd':                return 'application/msword';
370 6847 acydburn
                case 'ai':
371 6847 acydburn
                case 'eps':
372 6847 acydburn
                case 'ps':                return 'application/postscript';
373 6847 acydburn
                case 'asc':
374 6847 acydburn
                case 'txt':
375 6847 acydburn
                case 'c':
376 6847 acydburn
                case 'cc':
377 6847 acydburn
                case 'h':
378 6847 acydburn
                case 'hh':
379 6847 acydburn
                case 'cpp':
380 6847 acydburn
                case 'hpp':
381 6847 acydburn
                case 'php':
382 6847 acydburn
                case 'php3':        return 'text/plain';
383 6847 acydburn
                default:                 return 'application/octet-stream';
384 6847 acydburn
        }
385 6847 acydburn
}
386 6847 acydburn
387 6847 acydburn
/**
388 6847 acydburn
* Obtain the dimensions of all remotely hosted avatars
389 6847 acydburn
* This should only be called from execute_last
390 6847 acydburn
* There can be significant network overhead if there are a large number of remote avatars
391 6847 acydburn
* @todo Look at the option of allowing the user to decide whether this is called or to force the dimensions
392 6847 acydburn
*/
393 8133 acydburn
function remote_avatar_dims()
394 6847 acydburn
{
395 6847 acydburn
        global $db;
396 6847 acydburn
397 6847 acydburn
        $sql = 'SELECT user_id, user_avatar
398 6847 acydburn
                FROM ' . USERS_TABLE . '
399 6847 acydburn
                WHERE user_avatar_type = ' . AVATAR_REMOTE;
400 6847 acydburn
        $result = $db->sql_query($sql);
401 6847 acydburn
402 6847 acydburn
        $remote_avatars = array();
403 6847 acydburn
        while ($row = $db->sql_fetchrow($result))
404 6847 acydburn
        {
405 6847 acydburn
                $remote_avatars[(int) $row['user_id']] = $row['user_avatar'];
406 6847 acydburn
        }
407 6847 acydburn
        $db->sql_freeresult($result);
408 6847 acydburn
409 6847 acydburn
        foreach ($remote_avatars as $user_id => $avatar)
410 6847 acydburn
        {
411 6847 acydburn
                $width = (int) get_remote_avatar_dim($avatar, 0);
412 6847 acydburn
                $height = (int) get_remote_avatar_dim($avatar, 1);
413 6847 acydburn
414 6847 acydburn
                $sql = 'UPDATE ' . USERS_TABLE . '
415 6847 acydburn
                        SET user_avatar_width = ' . (int) $width . ', user_avatar_height = ' . (int) $height . '
416 6847 acydburn
                        WHERE user_id = ' . $user_id;
417 6847 acydburn
                $db->sql_query($sql);
418 6847 acydburn
        }
419 6847 acydburn
}
420 6847 acydburn
421 6847 acydburn
function import_avatar_gallery($gallery_name = '', $subdirs_as_galleries = false)
422 6847 acydburn
{
423 6847 acydburn
        global $config, $convert, $phpbb_root_path, $user;
424 6847 acydburn
425 6847 acydburn
        $relative_path = empty($convert->convertor['source_path_absolute']);
426 6847 acydburn
427 11656 git-gate
        // check for trailing slash
428 11656 git-gate
        if (rtrim($convert->convertor['avatar_gallery_path'], '/') === '')
429 6847 acydburn
        {
430 6847 acydburn
                $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_GALLERY_PATH'], 'import_avatar_gallery()'), __LINE__, __FILE__);
431 6847 acydburn
        }
432 6847 acydburn
433 6847 acydburn
        $src_path = relative_base(path($convert->convertor['avatar_gallery_path'], $relative_path), $relative_path);
434 6847 acydburn
435 6847 acydburn
        if (is_dir($src_path))
436 6847 acydburn
        {
437 6975 acydburn
                // Do not die on failure... safe mode restrictions may be in effect.
438 6975 acydburn
                copy_dir($convert->convertor['avatar_gallery_path'], path($config['avatar_gallery_path']) . $gallery_name, !$subdirs_as_galleries, false, false, $relative_path);
439 6847 acydburn
440 6847 acydburn
                // only doing 1 level deep. (ibf 1.x)
441 6847 acydburn
                // notes: ibf has 2 tiers: directly in the avatar directory for base gallery (handled in the above statement), plus subdirs(handled below).
442 6847 acydburn
                // recursive subdirs ignored. -- i don't know if other forums support recursive galleries. if they do, this following code could be upgraded to be recursive.
443 6847 acydburn
                if ($subdirs_as_galleries)
444 6847 acydburn
                {
445 6847 acydburn
                        $dirlist = array();
446 6847 acydburn
                        if ($handle = @opendir($src_path))
447 6847 acydburn
                        {
448 6847 acydburn
                                while ($entry = readdir($handle))
449 6847 acydburn
                                {
450 6851 acydburn
                                        if ($entry[0] == '.' || $entry == 'CVS' || $entry == 'index.htm')
451 6847 acydburn
                                        {
452 6847 acydburn
                                                continue;
453 6847 acydburn
                                        }
454 6847 acydburn
455 6847 acydburn
                                        if (is_dir($src_path . $entry))
456 6847 acydburn
                                        {
457 6847 acydburn
                                                $dirlist[] = $entry;
458 6847 acydburn
                                        }
459 6847 acydburn
                                }
460 6847 acydburn
                                closedir($handle);
461 6847 acydburn
                        }
462 6847 acydburn
                        else if ($dir = @dir($src_path))
463 6847 acydburn
                        {
464 6847 acydburn
                                while ($entry = $dir->read())
465 6847 acydburn
                                {
466 6851 acydburn
                                        if ($entry[0] == '.' || $entry == 'CVS' || $entry == 'index.htm')
467 6847 acydburn
                                        {
468 6847 acydburn
                                                continue;
469 6847 acydburn
                                        }
470 6847 acydburn
471 6847 acydburn
                                        if (is_dir($src_path . $entry))
472 6847 acydburn
                                        {
473 6847 acydburn
                                                $dirlist[] = $entry;
474 6847 acydburn
                                        }
475 6847 acydburn
                                }
476 6847 acydburn
                                $dir->close();
477 6847 acydburn
                        }
478 6847 acydburn
479 6847 acydburn
                        for ($i = 0; $i < sizeof($dirlist); ++$i)
480 6847 acydburn
                        {
481 6847 acydburn
                                $dir = $dirlist[$i];
482 6975 acydburn
483 6975 acydburn
                                // Do not die on failure... safe mode restrictions may be in effect.
484 6975 acydburn
                                copy_dir(path($convert->convertor['avatar_gallery_path'], $relative_path) . $dir, path($config['avatar_gallery_path']) . $dir, true, false, false, $relative_path);
485 6847 acydburn
                        }
486 6847 acydburn
                }
487 6847 acydburn
        }
488 6847 acydburn
}
489 6847 acydburn
490 6847 acydburn
function import_attachment_files($category_name = '')
491 6847 acydburn
{
492 6847 acydburn
        global $config, $convert, $phpbb_root_path, $db, $user;
493 6847 acydburn
494 6847 acydburn
        $sql = 'SELECT config_value AS upload_path
495 6847 acydburn
                FROM ' . CONFIG_TABLE . "
496 6847 acydburn
                WHERE config_name = 'upload_path'";
497 6847 acydburn
        $result = $db->sql_query($sql);
498 6847 acydburn
        $config['upload_path'] = $db->sql_fetchfield('upload_path');
499 6847 acydburn
        $db->sql_freeresult($result);
500 6847 acydburn
501 6847 acydburn
        $relative_path = empty($convert->convertor['source_path_absolute']);
502 6847 acydburn
503 6847 acydburn
        if (empty($convert->convertor['upload_path']))
504 6847 acydburn
        {
505 6847 acydburn
                $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_UPLOAD_DIR'], 'import_attachment_files()'), __LINE__, __FILE__);
506 6847 acydburn
        }
507 6847 acydburn
508 6847 acydburn
        if (is_dir(relative_base(path($convert->convertor['upload_path'], $relative_path), $relative_path)))
509 6847 acydburn
        {
510 6847 acydburn
                copy_dir($convert->convertor['upload_path'], path($config['upload_path']) . $category_name, true, false, true, $relative_path);
511 6847 acydburn
        }
512 6847 acydburn
}
513 6847 acydburn
514 6847 acydburn
function attachment_forum_perms($forum_id)
515 6847 acydburn
{
516 6847 acydburn
        if (!is_array($forum_id))
517 6847 acydburn
        {
518 6847 acydburn
                $forum_id = array($forum_id);
519 6847 acydburn
        }
520 6847 acydburn
521 6847 acydburn
        return serialize($forum_id);
522 6847 acydburn
}
523 6847 acydburn
524 6847 acydburn
// base64todec function
525 6847 acydburn
// -> from php manual?
526 6847 acydburn
function base64_unpack($string)
527 6847 acydburn
{
528 6847 acydburn
        $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+-';
529 6847 acydburn
        $base = strlen($chars);
530 6847 acydburn
531 6847 acydburn
        $length = strlen($string);
532 6847 acydburn
        $number = 0;
533 6847 acydburn
534 6847 acydburn
        for ($i = 1; $i <= $length; $i++)
535 6847 acydburn
        {
536 8133 acydburn
                $pos = $length - $i;
537 6847 acydburn
                $operand = strpos($chars, substr($string, $pos, 1));
538 8133 acydburn
                $exponent = pow($base, $i-1);
539 6847 acydburn
                $dec_value = $operand * $exponent;
540 8133 acydburn
                $number += $dec_value;
541 6847 acydburn
        }
542 6847 acydburn
543 8133 acydburn
        return $number;
544 6847 acydburn
}
545 6847 acydburn
546 6905 acydburn
function _import_check($config_var, $source, $use_target)
547 6847 acydburn
{
548 6905 acydburn
        global $convert, $config;
549 6847 acydburn
550 6905 acydburn
        $result = array(
551 6905 acydburn
                'orig_source'        => $source,
552 6907 acydburn
                'copied'                => false,
553 6905 acydburn
                'relative_path'        => (empty($convert->convertor['source_path_absolute'])) ? true : false,
554 6905 acydburn
        );
555 6847 acydburn
556 7392 kellanved
        // copy file will prepend $phpBB_root_path
557 9905 acydburn
        $target = $config[$config_var] . '/' . utf8_basename(($use_target === false) ? $source : $use_target);
558 6847 acydburn
559 6905 acydburn
        if (!empty($convert->convertor[$config_var]) && strpos($source, $convert->convertor[$config_var]) !== 0)
560 6847 acydburn
        {
561 6905 acydburn
                $source = $convert->convertor[$config_var] . $source;
562 6847 acydburn
        }
563 6847 acydburn
564 6905 acydburn
        $result['source'] = $source;
565 6847 acydburn
566 6905 acydburn
        if (file_exists(relative_base($source, $result['relative_path'], __LINE__, __FILE__)))
567 6847 acydburn
        {
568 6905 acydburn
                $result['copied'] = copy_file($source, $target, false, false, $result['relative_path']);
569 6847 acydburn
        }
570 6847 acydburn
571 6905 acydburn
        if ($result['copied'])
572 6847 acydburn
        {
573 9905 acydburn
                $result['target'] = utf8_basename($target);
574 6847 acydburn
        }
575 6905 acydburn
        else
576 6905 acydburn
        {
577 9905 acydburn
                $result['target'] = ($use_target !== false) ? $result['orig_source'] : utf8_basename($target);
578 6905 acydburn
        }
579 6847 acydburn
580 6905 acydburn
        return $result;
581 6847 acydburn
}
582 6847 acydburn
583 6905 acydburn
function import_attachment($source, $use_target = false)
584 6847 acydburn
{
585 6847 acydburn
        if (empty($source))
586 6847 acydburn
        {
587 6847 acydburn
                return '';
588 6847 acydburn
        }
589 6847 acydburn
590 6847 acydburn
        global $convert, $phpbb_root_path, $config, $user;
591 6847 acydburn
592 11656 git-gate
        // check for trailing slash
593 11656 git-gate
        if (rtrim($convert->convertor['upload_path'], '/') === '')
594 6847 acydburn
        {
595 6905 acydburn
                $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_UPLOAD_DIR'], 'import_attachment()'), __LINE__, __FILE__);
596 6847 acydburn
        }
597 6847 acydburn
598 6905 acydburn
        $result = _import_check('upload_path', $source, $use_target);
599 6847 acydburn
600 6905 acydburn
        if ($result['copied'])
601 6847 acydburn
        {
602 6905 acydburn
                // Thumbnails?
603 6905 acydburn
                if (is_array($convert->convertor['thumbnails']))
604 6847 acydburn
                {
605 6905 acydburn
                        $thumb_dir = $convert->convertor['thumbnails'][0];
606 6905 acydburn
                        $thumb_prefix = $convert->convertor['thumbnails'][1];
607 9905 acydburn
                        $thumb_source = $thumb_dir . $thumb_prefix . utf8_basename($result['source']);
608 6905 acydburn
609 6905 acydburn
                        if (strpos($thumb_source, $convert->convertor['upload_path']) !== 0)
610 6905 acydburn
                        {
611 6905 acydburn
                                $thumb_source = $convert->convertor['upload_path'] . $thumb_source;
612 6905 acydburn
                        }
613 6905 acydburn
                        $thumb_target = $config['upload_path'] . '/thumb_' . $result['target'];
614 6905 acydburn
615 6905 acydburn
                        if (file_exists(relative_base($thumb_source, $result['relative_path'], __LINE__, __FILE__)))
616 6905 acydburn
                        {
617 6905 acydburn
                                copy_file($thumb_source, $thumb_target, false, false, $result['relative_path']);
618 6905 acydburn
                        }
619 6847 acydburn
                }
620 6847 acydburn
        }
621 6847 acydburn
622 6905 acydburn
        return $result['target'];
623 6847 acydburn
}
624 6847 acydburn
625 6905 acydburn
function import_rank($source, $use_target = false)
626 6847 acydburn
{
627 6847 acydburn
        if (empty($source))
628 6847 acydburn
        {
629 6847 acydburn
                return '';
630 6847 acydburn
        }
631 6847 acydburn
632 6847 acydburn
        global $convert, $phpbb_root_path, $config, $user;
633 6847 acydburn
634 6905 acydburn
        if (!isset($convert->convertor['ranks_path']))
635 6847 acydburn
        {
636 6905 acydburn
                $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_RANKS_PATH'], 'import_rank()'), __LINE__, __FILE__);
637 6847 acydburn
        }
638 6847 acydburn
639 6905 acydburn
        $result = _import_check('ranks_path', $source, $use_target);
640 6905 acydburn
        return $result['target'];
641 6905 acydburn
}
642 6847 acydburn
643 6905 acydburn
function import_smiley($source, $use_target = false)
644 6905 acydburn
{
645 6905 acydburn
        if (empty($source))
646 6847 acydburn
        {
647 6905 acydburn
                return '';
648 6847 acydburn
        }
649 6847 acydburn
650 6905 acydburn
        global $convert, $phpbb_root_path, $config, $user;
651 6905 acydburn
652 11656 git-gate
        // check for trailing slash
653 11656 git-gate
        if (rtrim($convert->convertor['smilies_path'], '/') === '')
654 6847 acydburn
        {
655 6905 acydburn
                $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_SMILIES_PATH'], 'import_smiley()'), __LINE__, __FILE__);
656 6847 acydburn
        }
657 6847 acydburn
658 6905 acydburn
        $result = _import_check('smilies_path', $source, $use_target);
659 6905 acydburn
        return $result['target'];
660 6847 acydburn
}
661 6847 acydburn
662 7429 kellanved
/*
663 7429 kellanved
*/
664 7429 kellanved
function import_avatar($source, $use_target = false, $user_id = false)
665 6847 acydburn
{
666 6847 acydburn
        if (empty($source) || preg_match('#^https?:#i', $source) || preg_match('#blank\.(gif|png)$#i', $source))
667 6847 acydburn
        {
668 6847 acydburn
                return;
669 6847 acydburn
        }
670 6847 acydburn
671 6847 acydburn
        global $convert, $phpbb_root_path, $config, $user;
672 6847 acydburn
673 11656 git-gate
        // check for trailing slash
674 11656 git-gate
        if (rtrim($convert->convertor['avatar_path'], '/') === '')
675 6847 acydburn
        {
676 6847 acydburn
                $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_AVATAR_PATH'], 'import_avatar()'), __LINE__, __FILE__);
677 6847 acydburn
        }
678 8667 acydburn
679 7429 kellanved
        if ($use_target === false && $user_id !== false)
680 7429 kellanved
        {
681 7429 kellanved
                $use_target = $config['avatar_salt'] . '_' . $user_id . '.' . substr(strrchr($source, '.'), 1);
682 7429 kellanved
        }
683 8667 acydburn
684 7429 kellanved
        $result = _import_check('avatar_path', $source, $use_target);
685 6847 acydburn
686 7429 kellanved
        return ((!empty($user_id)) ? $user_id : $use_target) . '.' . substr(strrchr($source, '.'), 1);
687 6847 acydburn
}
688 6847 acydburn
689 6847 acydburn
/**
690 6847 acydburn
* @todo all image dimension functions below (there are a *lot*) should get revisited and converted to one or two functions (no more needed, really).
691 6847 acydburn
*/
692 6847 acydburn
693 6847 acydburn
/**
694 6847 acydburn
* Calculate the size of the specified image
695 6847 acydburn
* Called from the following functions for calculating the size of specific image types
696 6847 acydburn
*/
697 6847 acydburn
function get_image_dim($source)
698 6847 acydburn
{
699 6847 acydburn
        if (empty($source))
700 6847 acydburn
        {
701 6847 acydburn
                return array(0, 0);
702 6847 acydburn
        }
703 6847 acydburn
704 6847 acydburn
        global $convert;
705 6847 acydburn
706 6847 acydburn
        $relative_path = empty($convert->convertor['source_path_absolute']);
707 6847 acydburn
708 6847 acydburn
        if (file_exists(relative_base($source, $relative_path)))
709 6847 acydburn
        {
710 6847 acydburn
                $image = relative_base($source, $relative_path);
711 7646 acydburn
                return @getimagesize($image);
712 6847 acydburn
        }
713 6847 acydburn
714 6847 acydburn
        return false;
715 6847 acydburn
}
716 6847 acydburn
717 6847 acydburn
/**
718 6847 acydburn
* Obtain the width of the specified smilie
719 6847 acydburn
*/
720 6847 acydburn
function get_smiley_width($src)
721 6847 acydburn
{
722 6847 acydburn
        return get_smiley_dim($src, 0);
723 6847 acydburn
}
724 6847 acydburn
725 6847 acydburn
/**
726 6847 acydburn
* Obtain the height of the specified smilie
727 6847 acydburn
*/
728 6847 acydburn
function get_smiley_height($src)
729 6847 acydburn
{
730 6847 acydburn
        return get_smiley_dim($src, 1);
731 6847 acydburn
}
732 6847 acydburn
733 6847 acydburn
/**
734 6847 acydburn
* Obtain the size of the specified smilie (using the cache if possible) and cache the value
735 6847 acydburn
*/
736 6847 acydburn
function get_smiley_dim($source, $axis)
737 6847 acydburn
{
738 6847 acydburn
        if (empty($source))
739 6847 acydburn
        {
740 6847 acydburn
                return 15;
741 6847 acydburn
        }
742 6847 acydburn
743 6847 acydburn
        static $smiley_cache = array();
744 6847 acydburn
745 6847 acydburn
        if (isset($smiley_cache[$source]))
746 6847 acydburn
        {
747 6847 acydburn
                return $smiley_cache[$source][$axis];
748 6847 acydburn
        }
749 6847 acydburn
750 6847 acydburn
        global $convert, $phpbb_root_path, $config, $user;
751 6847 acydburn
752 6847 acydburn
        $orig_source = $source;
753 6847 acydburn
754 6847 acydburn
        if (!isset($convert->convertor['smilies_path']))
755 6847 acydburn
        {
756 6847 acydburn
                $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_SMILIES_PATH'], 'get_smiley_dim()'), __LINE__, __FILE__);
757 6847 acydburn
        }
758 6847 acydburn
759 6847 acydburn
        if (!empty($convert->convertor['smilies_path']) && strpos($source, $convert->convertor['smilies_path']) !== 0)
760 6847 acydburn
        {
761 6847 acydburn
                $source = $convert->convertor['smilies_path'] . $source;
762 6847 acydburn
        }
763 6847 acydburn
764 6847 acydburn
        $smiley_cache[$orig_source] = get_image_dim($source);
765 6847 acydburn
766 6847 acydburn
        if (empty($smiley_cache[$orig_source]) || empty($smiley_cache[$orig_source][0]) || empty($smiley_cache[$orig_source][1]))
767 6847 acydburn
        {
768 6847 acydburn
                $smiley_cache[$orig_source] = array(15, 15);
769 6847 acydburn
                return 15;
770 6847 acydburn
        }
771 6847 acydburn
772 6847 acydburn
        return $smiley_cache[$orig_source][$axis];
773 6847 acydburn
}
774 6847 acydburn
775 6847 acydburn
/**
776 6847 acydburn
* Obtain the width of the specified avatar
777 6847 acydburn
*/
778 6847 acydburn
function get_avatar_width($src, $func = false, $arg1 = false, $arg2 = false)
779 6847 acydburn
{
780 6847 acydburn
        return get_avatar_dim($src, 0, $func, $arg1, $arg2);
781 6847 acydburn
}
782 6847 acydburn
783 6847 acydburn
/**
784 6847 acydburn
* Obtain the height of the specified avatar
785 6847 acydburn
*/
786 6847 acydburn
function get_avatar_height($src, $func = false, $arg1 = false, $arg2 = false)
787 6847 acydburn
{
788 6847 acydburn
        return get_avatar_dim($src, 1, $func, $arg1, $arg2);
789 6847 acydburn
}
790 6847 acydburn
791 6847 acydburn
/**
792 6847 acydburn
*/
793 6847 acydburn
function get_avatar_dim($src, $axis, $func = false, $arg1 = false, $arg2 = false)
794 6847 acydburn
{
795 6847 acydburn
        $avatar_type = AVATAR_UPLOAD;
796 6847 acydburn
797 6847 acydburn
        if ($func)
798 6847 acydburn
        {
799 6847 acydburn
                if ($arg1 || $arg2)
800 6847 acydburn
                {
801 6847 acydburn
                        $ary = array($arg1);
802 6847 acydburn
803 6847 acydburn
                        if ($arg2)
804 6847 acydburn
                        {
805 6847 acydburn
                                $ary[] = $arg2;
806 6847 acydburn
                        }
807 6847 acydburn
808 6847 acydburn
                        $avatar_type = call_user_func_array($func, $ary);
809 6847 acydburn
                }
810 6847 acydburn
                else
811 6847 acydburn
                {
812 6847 acydburn
                        $avatar_type = call_user_func($func);
813 6847 acydburn
                }
814 6847 acydburn
        }
815 6847 acydburn
816 6847 acydburn
        switch ($avatar_type)
817 6847 acydburn
        {
818 6847 acydburn
                case AVATAR_UPLOAD:
819 6847 acydburn
                        return get_upload_avatar_dim($src, $axis);
820 6847 acydburn
                break;
821 6847 acydburn
822 6847 acydburn
                case AVATAR_GALLERY:
823 6847 acydburn
                        return get_gallery_avatar_dim($src, $axis);
824 6847 acydburn
                break;
825 6847 acydburn
826 6847 acydburn
                case AVATAR_REMOTE:
827 6847 acydburn
                         // see notes on this functions usage and (hopefully) model $func to avoid this accordingly
828 6847 acydburn
                        return get_remote_avatar_dim($src, $axis);
829 6847 acydburn
                break;
830 6847 acydburn
831 6847 acydburn
                default:
832 7040 acydburn
                        $default_x = (defined('DEFAULT_AVATAR_X_CUSTOM')) ? DEFAULT_AVATAR_X_CUSTOM : DEFAULT_AVATAR_X;
833 7040 acydburn
                        $default_y = (defined('DEFAULT_AVATAR_Y_CUSTOM')) ? DEFAULT_AVATAR_Y_CUSTOM : DEFAULT_AVATAR_Y;
834 7040 acydburn
835 7040 acydburn
                        return $axis ? $default_y : $default_x;
836 6847 acydburn
                break;
837 6847 acydburn
        }
838 6847 acydburn
}
839 6847 acydburn
840 6847 acydburn
/**
841 6847 acydburn
* Obtain the size of the specified uploaded avatar (using the cache if possible) and cache the value
842 6847 acydburn
*/
843 6847 acydburn
function get_upload_avatar_dim($source, $axis)
844 6847 acydburn
{
845 6847 acydburn
        static $cachedims = false;
846 6847 acydburn
        static $cachekey = false;
847 6847 acydburn
848 6847 acydburn
        if (empty($source))
849 6847 acydburn
        {
850 6847 acydburn
                return 0;
851 6847 acydburn
        }
852 6847 acydburn
853 6847 acydburn
        if ($cachekey == $source)
854 6847 acydburn
        {
855 6847 acydburn
                return $cachedims[$axis];
856 6847 acydburn
        }
857 6847 acydburn
858 6847 acydburn
        $orig_source = $source;
859 6847 acydburn
860 6847 acydburn
        if (substr($source, 0, 7) == 'upload:')
861 6847 acydburn
        {
862 6847 acydburn
                $source = substr($source, 7);
863 6847 acydburn
        }
864 6847 acydburn
865 6847 acydburn
        global $convert, $phpbb_root_path, $config, $user;
866 6847 acydburn
867 6847 acydburn
        if (!isset($convert->convertor['avatar_path']))
868 6847 acydburn
        {
869 6847 acydburn
                $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_AVATAR_PATH'], 'get_upload_avatar_dim()'), __LINE__, __FILE__);
870 6847 acydburn
        }
871 6847 acydburn
872 6847 acydburn
        if (!empty($convert->convertor['avatar_path']) && strpos($source, $convert->convertor['avatar_path']) !== 0)
873 6847 acydburn
        {
874 6847 acydburn
                $source = path($convert->convertor['avatar_path'], empty($convert->convertor['source_path_absolute'])) . $source;
875 6847 acydburn
        }
876 6847 acydburn
877 6847 acydburn
        $cachedims = get_image_dim($source);
878 6847 acydburn
879 6847 acydburn
        if (empty($cachedims) || empty($cachedims[0]) || empty($cachedims[1]))
880 6847 acydburn
        {
881 7040 acydburn
                $default_x = (defined('DEFAULT_AVATAR_X_CUSTOM')) ? DEFAULT_AVATAR_X_CUSTOM : DEFAULT_AVATAR_X;
882 7040 acydburn
                $default_y = (defined('DEFAULT_AVATAR_Y_CUSTOM')) ? DEFAULT_AVATAR_Y_CUSTOM : DEFAULT_AVATAR_Y;
883 7040 acydburn
884 7040 acydburn
                $cachedims = array($default_x, $default_y);
885 6847 acydburn
        }
886 6847 acydburn
887 6847 acydburn
        return $cachedims[$axis];
888 6847 acydburn
}
889 6847 acydburn
890 6847 acydburn
/**
891 6847 acydburn
* Obtain the size of the specified gallery avatar (using the cache if possible) and cache the value
892 6847 acydburn
*/
893 6847 acydburn
function get_gallery_avatar_dim($source, $axis)
894 6847 acydburn
{
895 6847 acydburn
        if (empty($source))
896 6847 acydburn
        {
897 6847 acydburn
                return 0;
898 6847 acydburn
        }
899 6847 acydburn
900 6847 acydburn
        static $avatar_cache = array();
901 6847 acydburn
902 6847 acydburn
        if (isset($avatar_cache[$source]))
903 6847 acydburn
        {
904 6847 acydburn
                return $avatar_cache[$source][$axis];
905 6847 acydburn
        }
906 6847 acydburn
907 6847 acydburn
        global $convert, $phpbb_root_path, $config, $user;
908 6847 acydburn
909 6847 acydburn
        $orig_source = $source;
910 6847 acydburn
911 6847 acydburn
        if (!isset($convert->convertor['avatar_gallery_path']))
912 6847 acydburn
        {
913 6847 acydburn
                $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_GALLERY_PATH'], 'get_gallery_avatar_dim()'), __LINE__, __FILE__);
914 6847 acydburn
        }
915 6847 acydburn
916 6847 acydburn
        if (!empty($convert->convertor['avatar_gallery_path']) && strpos($source, $convert->convertor['avatar_gallery_path']) !== 0)
917 6847 acydburn
        {
918 6847 acydburn
                $source = path($convert->convertor['avatar_gallery_path'], empty($convert->convertor['source_path_absolute'])) . $source;
919 6847 acydburn
        }
920 6847 acydburn
921 6847 acydburn
        $avatar_cache[$orig_source] = get_image_dim($source);
922 6847 acydburn
923 6847 acydburn
        if (empty($avatar_cache[$orig_source]) || empty($avatar_cache[$orig_source][0]) || empty($avatar_cache[$orig_source][1]))
924 6847 acydburn
        {
925 7040 acydburn
                $default_x = (defined('DEFAULT_AVATAR_X_CUSTOM')) ? DEFAULT_AVATAR_X_CUSTOM : DEFAULT_AVATAR_X;
926 7040 acydburn
                $default_y = (defined('DEFAULT_AVATAR_Y_CUSTOM')) ? DEFAULT_AVATAR_Y_CUSTOM : DEFAULT_AVATAR_Y;
927 7040 acydburn
928 7040 acydburn
                $avatar_cache[$orig_source] = array($default_x, $default_y);
929 6847 acydburn
        }
930 6847 acydburn
931 6847 acydburn
        return $avatar_cache[$orig_source][$axis];
932 6847 acydburn
}
933 6847 acydburn
934 6847 acydburn
/**
935 6847 acydburn
* Obtain the size of the specified remote avatar (using the cache if possible) and cache the value
936 6847 acydburn
* Whilst it's unlikely that remote avatars will be duplicated, it is possible so caching seems the best option
937 6847 acydburn
* This should only be called from a post processing step due to the possibility of network timeouts
938 6847 acydburn
*/
939 7529 kellanved
function get_remote_avatar_dim($src, $axis)
940 6847 acydburn
{
941 6847 acydburn
        if (empty($src))
942 6847 acydburn
        {
943 6847 acydburn
                return 0;
944 6847 acydburn
        }
945 6847 acydburn
946 7529 kellanved
        static $remote_avatar_cache = array();
947 6847 acydburn
948 7529 kellanved
        // an ugly hack: we assume that the dimensions of each remote avatar are accessed exactly twice (x and y)
949 7529 kellanved
        if (isset($remote_avatar_cache[$src]))
950 6847 acydburn
        {
951 7529 kellanved
                $retval = $remote_avatar_cache[$src][$axis];
952 7529 kellanved
                unset($remote_avatar_cache);
953 7529 kellanved
                return $retval;
954 6847 acydburn
        }
955 8667 acydburn
956 7545 kellanved
        $url_info = @parse_url($src);
957 7549 kellanved
        if (empty($url_info['host']))
958 7545 kellanved
        {
959 7545 kellanved
                return 0;
960 7545 kellanved
        }
961 7401 kellanved
        $host = $url_info['host'];
962 7401 kellanved
        $port = (isset($url_info['port'])) ? $url_info['port'] : 0;
963 7545 kellanved
        $protocol = (isset($url_info['scheme'])) ? $url_info['scheme'] : 'http';
964 7401 kellanved
        if (empty($port))
965 7401 kellanved
        {
966 7401 kellanved
                switch(strtolower($protocol))
967 7401 kellanved
                {
968 7401 kellanved
                        case 'ftp':
969 7401 kellanved
                                $port = 21;
970 7401 kellanved
                                break;
971 8667 acydburn
972 7401 kellanved
                        case 'https':
973 7401 kellanved
                                $port = 443;
974 7401 kellanved
                                break;
975 8667 acydburn
976 7401 kellanved
                        default:
977 7401 kellanved
                                $port = 80;
978 7401 kellanved
                }
979 7401 kellanved
        }
980 8667 acydburn
981 7400 kellanved
        $timeout = @ini_get('default_socket_timeout');
982 7529 kellanved
        @ini_set('default_socket_timeout', 2);
983 8667 acydburn
984 7401 kellanved
        // We're just trying to reach the server to avoid timeouts
985 7529 kellanved
        $fp = @fsockopen($host, $port, $errno, $errstr, 1);
986 7401 kellanved
        if ($fp)
987 7401 kellanved
        {
988 7529 kellanved
                $remote_avatar_cache[$src] = @getimagesize($src);
989 7401 kellanved
                fclose($fp);
990 7401 kellanved
        }
991 8667 acydburn
992 7399 kellanved
        $default_x         = (defined('DEFAULT_AVATAR_X_CUSTOM')) ? DEFAULT_AVATAR_X_CUSTOM : DEFAULT_AVATAR_X;
993 7399 kellanved
        $default_y         = (defined('DEFAULT_AVATAR_Y_CUSTOM')) ? DEFAULT_AVATAR_Y_CUSTOM : DEFAULT_AVATAR_Y;
994 7399 kellanved
        $default         = array($default_x, $default_y);
995 8667 acydburn
996 7529 kellanved
        if (empty($remote_avatar_cache[$src]) || empty($remote_avatar_cache[$src][0]) || empty($remote_avatar_cache[$src][1]))
997 6847 acydburn
        {
998 7529 kellanved
                $remote_avatar_cache[$src] = $default;
999 6847 acydburn
        }
1000 7399 kellanved
        else
1001 7399 kellanved
        {
1002 7399 kellanved
                // We trust gallery and uploaded avatars to conform to the size settings; we might have to adjust here
1003 7529 kellanved
                if ($remote_avatar_cache[$src][0] > $default_x || $remote_avatar_cache[$src][1] > $default_y)
1004 7399 kellanved
                {
1005 7529 kellanved
                        $bigger = ($remote_avatar_cache[$src][0] > $remote_avatar_cache[$src][1]) ? 0 : 1;
1006 7529 kellanved
                        $ratio = $default[$bigger] / $remote_avatar_cache[$src][$bigger];
1007 7529 kellanved
                        $remote_avatar_cache[$src][0] = (int)($remote_avatar_cache[$src][0] * $ratio);
1008 7529 kellanved
                        $remote_avatar_cache[$src][1] = (int)($remote_avatar_cache[$src][1] * $ratio);
1009 7399 kellanved
                }
1010 7399 kellanved
        }
1011 8667 acydburn
1012 7400 kellanved
        @ini_set('default_socket_timeout', $timeout);
1013 7529 kellanved
        return $remote_avatar_cache[$src][$axis];
1014 6847 acydburn
}
1015 6847 acydburn
1016 6847 acydburn
function set_user_options()
1017 6847 acydburn
{
1018 6847 acydburn
        global $convert_row;
1019 6847 acydburn
1020 6847 acydburn
        // Key need to be set in row, else default value is chosen
1021 6847 acydburn
        $keyoptions = array(
1022 8133 acydburn
                'viewimg'                => array('bit' => 0, 'default' => 1),
1023 6847 acydburn
                'viewflash'                => array('bit' => 1, 'default' => 1),
1024 6847 acydburn
                'viewsmilies'        => array('bit' => 2, 'default' => 1),
1025 6847 acydburn
                'viewsigs'                => array('bit' => 3, 'default' => 1),
1026 8133 acydburn
                'viewavatars'        => array('bit' => 4, 'default' => 1),
1027 8133 acydburn
                'viewcensors'        => array('bit' => 5, 'default' => 1),
1028 8133 acydburn
                'attachsig'                => array('bit' => 6, 'default' => 0),
1029 8133 acydburn
                'bbcode'                => array('bit' => 8, 'default' => 1),
1030 8133 acydburn
                'smilies'                => array('bit' => 9, 'default' => 1),
1031 6847 acydburn
                'popuppm'                => array('bit' => 10, 'default' => 0),
1032 10687 git-gate
                'sig_bbcode'        => array('bit' => 15, 'default' => 1),
1033 10687 git-gate
                'sig_smilies'        => array('bit' => 16, 'default' => 1),
1034 10687 git-gate
                'sig_links'                => array('bit' => 17, 'default' => 1),
1035 6847 acydburn
        );
1036 6847 acydburn
1037 6847 acydburn
        $option_field = 0;
1038 6847 acydburn
1039 6847 acydburn
        foreach ($keyoptions as $key => $key_ary)
1040 6847 acydburn
        {
1041 6872 acydburn
                $value = (isset($convert_row[$key])) ? (int) $convert_row[$key] : $key_ary['default'];
1042 6847 acydburn
1043 6847 acydburn
                if ($value && !($option_field & 1 << $key_ary['bit']))
1044 6847 acydburn
                {
1045 6847 acydburn
                        $option_field += 1 << $key_ary['bit'];
1046 6847 acydburn
                }
1047 6847 acydburn
        }
1048 6847 acydburn
1049 6847 acydburn
        return $option_field;
1050 6847 acydburn
}
1051 6847 acydburn
1052 6847 acydburn
/**
1053 6847 acydburn
* Index messages on the fly as we convert them
1054 6847 acydburn
* @todo naderman, can you check that this works with the new search plugins as it's use is currently disabled (and thus untested)
1055 6847 acydburn
function search_indexing($message = '')
1056 6847 acydburn
{
1057 6847 acydburn
        global $fulltext_search, $convert_row;
1058 6847 acydburn
1059 6847 acydburn
        if (!isset($convert_row['post_id']))
1060 6847 acydburn
        {
1061 6847 acydburn
                return;
1062 6847 acydburn
        }
1063 6847 acydburn
1064 6847 acydburn
        if (!$message)
1065 6847 acydburn
        {
1066 6847 acydburn
                if (!isset($convert_row['message']))
1067 6847 acydburn
                {
1068 6847 acydburn
                        return;
1069 6847 acydburn
                }
1070 6847 acydburn
1071 6847 acydburn
                $message = $convert_row['message'];
1072 6847 acydburn
        }
1073 6847 acydburn
1074 6847 acydburn
        $title = (isset($convert_row['title'])) ? $convert_row['title'] : '';
1075 6847 acydburn
1076 6847 acydburn
        $fulltext_search->index('post', $convert_row['post_id'], $message, $title, $convert_row['poster_id'], $convert_row['forum_id']);
1077 6847 acydburn
}
1078 6847 acydburn
*/
1079 6847 acydburn
1080 6847 acydburn
function make_unique_filename($filename)
1081 6847 acydburn
{
1082 6847 acydburn
        if (!strlen($filename))
1083 6847 acydburn
        {
1084 6847 acydburn
                $filename = md5(unique_id()) . '.dat';
1085 6847 acydburn
        }
1086 6847 acydburn
        else if ($filename[0] == '.')
1087 6847 acydburn
        {
1088 6847 acydburn
                $filename = md5(unique_id()) . $filename;
1089 6847 acydburn
        }
1090 6847 acydburn
        else if (preg_match('/\.([a-z]+)$/i', $filename, $m))
1091 6847 acydburn
        {
1092 6847 acydburn
                $filename = preg_replace('/\.([a-z]+)$/i', '_' . md5(unique_id()) . '.\1', $filename);
1093 6847 acydburn
        }
1094 6847 acydburn
        else
1095 6847 acydburn
        {
1096 6847 acydburn
                $filename .= '_' . md5(unique_id()) . '.dat';
1097 6847 acydburn
        }
1098 6847 acydburn
1099 6847 acydburn
        return $filename;
1100 6847 acydburn
}
1101 6847 acydburn
1102 6847 acydburn
function words_unique(&$words)
1103 6847 acydburn
{
1104 6847 acydburn
        reset($words);
1105 6847 acydburn
        $return_array = array();
1106 6847 acydburn
1107 6847 acydburn
        $word = current($words);
1108 6847 acydburn
        do
1109 6847 acydburn
        {
1110 6847 acydburn
                $return_array[$word] = $word;
1111 6847 acydburn
        }
1112 6847 acydburn
        while ($word = next($words));
1113 6847 acydburn
1114 6847 acydburn
        return $return_array;
1115 6847 acydburn
}
1116 6847 acydburn
1117 6847 acydburn
/**
1118 6847 acydburn
* Adds a user to the specified group and optionally makes them a group leader
1119 6847 acydburn
* This function does not create the group if it does not exist and so should only be called after the groups have been created
1120 6847 acydburn
*/
1121 6847 acydburn
function add_user_group($group_id, $user_id, $group_leader=false)
1122 6847 acydburn
{
1123 6847 acydburn
        global $convert, $phpbb_root_path, $config, $user, $db;
1124 8667 acydburn
1125 6847 acydburn
        $sql = 'INSERT INTO ' . USER_GROUP_TABLE . ' ' . $db->sql_build_array('INSERT', array(
1126 6847 acydburn
                'group_id'                => $group_id,
1127 6847 acydburn
                'user_id'                => $user_id,
1128 6847 acydburn
                'group_leader'        => ($group_leader) ? 1 : 0,
1129 6847 acydburn
                'user_pending'        => 0));
1130 6847 acydburn
        $db->sql_query($sql);
1131 6847 acydburn
}
1132 6847 acydburn
1133 6847 acydburn
// STANDALONE FUNCTIONS
1134 6847 acydburn
1135 6847 acydburn
/**
1136 6847 acydburn
* Add users to the pre-defined "special" groups
1137 6939 acydburn
*
1138 6847 acydburn
* @param string $group The name of the special group to add to
1139 6847 acydburn
* @param string $select_query An SQL query to retrieve the user(s) to add to the group
1140 6847 acydburn
*/
1141 7002 naderman
function user_group_auth($group, $select_query, $use_src_db)
1142 6847 acydburn
{
1143 6995 naderman
        global $convert, $phpbb_root_path, $config, $user, $db, $src_db, $same_db;
1144 6847 acydburn
1145 6847 acydburn
        if (!in_array($group, array('guests', 'registered', 'registered_coppa', 'global_moderators', 'administrators', 'bots')))
1146 6847 acydburn
        {
1147 6847 acydburn
                $convert->p_master->error(sprintf($user->lang['CONV_ERROR_WRONG_GROUP'], $group, 'user_group_auth()'), __LINE__, __FILE__, true);
1148 6847 acydburn
                return;
1149 6847 acydburn
        }
1150 6847 acydburn
1151 6847 acydburn
        $sql = 'SELECT group_id
1152 6847 acydburn
                FROM ' . GROUPS_TABLE . "
1153 6847 acydburn
                WHERE group_name = '" . $db->sql_escape(strtoupper($group)) . "'";
1154 6847 acydburn
        $result = $db->sql_query($sql);
1155 6847 acydburn
        $group_id = (int) $db->sql_fetchfield('group_id');
1156 6847 acydburn
        $db->sql_freeresult($result);
1157 6847 acydburn
1158 6847 acydburn
        if (!$group_id)
1159 6847 acydburn
        {
1160 6847 acydburn
                $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_GROUP'], $group, 'user_group_auth()'), __LINE__, __FILE__, true);
1161 6847 acydburn
                return;
1162 6847 acydburn
        }
1163 6847 acydburn
1164 7002 naderman
        if ($same_db || !$use_src_db)
1165 6995 naderman
        {
1166 6995 naderman
                $sql = 'INSERT INTO ' . USER_GROUP_TABLE . ' (user_id, group_id, user_pending)
1167 6995 naderman
                        ' . str_replace('{' . strtoupper($group) . '}', $group_id . ', 0', $select_query);
1168 6995 naderman
                $db->sql_query($sql);
1169 6995 naderman
        }
1170 6995 naderman
        else
1171 6995 naderman
        {
1172 7662 kellanved
                $result = $src_db->sql_query(str_replace('{' . strtoupper($group) . '}', $group_id . ' ', $select_query));
1173 6995 naderman
                while ($row = $src_db->sql_fetchrow($result))
1174 6995 naderman
                {
1175 6995 naderman
                        // this might become quite a lot of INSERTS unfortunately
1176 7662 kellanved
                        $sql = 'INSERT INTO ' . USER_GROUP_TABLE . " (user_id, group_id, user_pending)
1177 7662 kellanved
                                VALUES ({$row['user_id']}, $group_id, 0)";
1178 6995 naderman
                        $db->sql_query($sql);
1179 6995 naderman
                }
1180 6995 naderman
                $src_db->sql_freeresult($result);
1181 6995 naderman
        }
1182 6847 acydburn
}
1183 6847 acydburn
1184 6847 acydburn
/**
1185 6847 acydburn
* Retrieves configuration information from the source forum and caches it as an array
1186 6847 acydburn
* Both database and file driven configuration formats can be handled
1187 6847 acydburn
* (the type used is specified in $config_schema, see convert_phpbb20.php for more details)
1188 6847 acydburn
*/
1189 6847 acydburn
function get_config()
1190 6847 acydburn
{
1191 6847 acydburn
        static $convert_config;
1192 6847 acydburn
        global $user;
1193 6847 acydburn
1194 6847 acydburn
        if (isset($convert_config))
1195 6847 acydburn
        {
1196 6847 acydburn
                return $convert_config;
1197 6847 acydburn
        }
1198 6847 acydburn
1199 6995 naderman
        global $src_db, $same_db, $phpbb_root_path, $config;
1200 6847 acydburn
        global $convert;
1201 6847 acydburn
1202 6847 acydburn
        if ($convert->config_schema['table_format'] != 'file')
1203 6847 acydburn
        {
1204 6995 naderman
                if ($convert->mysql_convert && $same_db)
1205 6995 naderman
                {
1206 6995 naderman
                        $src_db->sql_query("SET NAMES 'binary'");
1207 6995 naderman
                }
1208 6995 naderman
1209 6847 acydburn
                $sql = 'SELECT * FROM ' . $convert->src_table_prefix . $convert->config_schema['table_name'];
1210 6995 naderman
                $result = $src_db->sql_query($sql);
1211 6995 naderman
                $row = $src_db->sql_fetchrow($result);
1212 6847 acydburn
1213 6847 acydburn
                if (!$row)
1214 6847 acydburn
                {
1215 6847 acydburn
                        $convert->p_master->error($user->lang['CONV_ERROR_GET_CONFIG'], __LINE__, __FILE__);
1216 6847 acydburn
                }
1217 6847 acydburn
        }
1218 6847 acydburn
1219 6847 acydburn
        if (is_array($convert->config_schema['table_format']))
1220 6847 acydburn
        {
1221 6847 acydburn
                $convert_config = array();
1222 6847 acydburn
                list($key, $val) = each($convert->config_schema['table_format']);
1223 6847 acydburn
1224 6847 acydburn
                do
1225 6847 acydburn
                {
1226 6847 acydburn
                        $convert_config[$row[$key]] = $row[$val];
1227 6847 acydburn
                }
1228 6995 naderman
                while ($row = $src_db->sql_fetchrow($result));
1229 6995 naderman
                $src_db->sql_freeresult($result);
1230 6995 naderman
1231 6995 naderman
                if ($convert->mysql_convert && $same_db)
1232 6995 naderman
                {
1233 6995 naderman
                        $src_db->sql_query("SET NAMES 'utf8'");
1234 6995 naderman
                }
1235 6847 acydburn
        }
1236 6847 acydburn
        else if ($convert->config_schema['table_format'] == 'file')
1237 6847 acydburn
        {
1238 6872 acydburn
                $filename = $convert->options['forum_path'] . '/' . $convert->config_schema['filename'];
1239 6847 acydburn
                if (!file_exists($filename))
1240 6847 acydburn
                {
1241 6847 acydburn
                        $convert->p_master->error($user->lang['FILE_NOT_FOUND'] . ': ' . $filename, __LINE__, __FILE__);
1242 6847 acydburn
                }
1243 6847 acydburn
1244 10473 jelly_doughnut
                if (isset($convert->config_schema['array_name']))
1245 10473 jelly_doughnut
                {
1246 10473 jelly_doughnut
                        unset($convert->config_schema['array_name']);
1247 10473 jelly_doughnut
                }
1248 10473 jelly_doughnut
1249 6847 acydburn
                $convert_config = extract_variables_from_file($filename);
1250 6847 acydburn
                if (!empty($convert->config_schema['array_name']))
1251 6847 acydburn
                {
1252 6847 acydburn
                        $convert_config = $convert_config[$convert->config_schema['array_name']];
1253 6847 acydburn
                }
1254 6847 acydburn
        }
1255 6847 acydburn
        else
1256 6847 acydburn
        {
1257 6847 acydburn
                $convert_config = $row;
1258 6995 naderman
                if ($convert->mysql_convert && $same_db)
1259 6995 naderman
                {
1260 6995 naderman
                        $src_db->sql_query("SET NAMES 'utf8'");
1261 6995 naderman
                }
1262 6847 acydburn
        }
1263 6847 acydburn
1264 6847 acydburn
        if (!sizeof($convert_config))
1265 6847 acydburn
        {
1266 7760 kellanved
                $convert->p_master->error($user->lang['CONV_ERROR_CONFIG_EMPTY'], __LINE__, __FILE__);
1267 6847 acydburn
        }
1268 6847 acydburn
1269 6847 acydburn
        return $convert_config;
1270 6847 acydburn
}
1271 6847 acydburn
1272 6847 acydburn
/**
1273 6847 acydburn
* Transfers the relevant configuration information from the source forum
1274 6847 acydburn
* The mapping of fields is specified in $config_schema, see convert_phpbb20.php for more details
1275 6847 acydburn
*/
1276 6847 acydburn
function restore_config($schema)
1277 6847 acydburn
{
1278 6847 acydburn
        global $db, $config;
1279 6847 acydburn
1280 6847 acydburn
        $convert_config = get_config();
1281 10473 jelly_doughnut
1282 6847 acydburn
        foreach ($schema['settings'] as $config_name => $src)
1283 6847 acydburn
        {
1284 6847 acydburn
                if (preg_match('/(.*)\((.*)\)/', $src, $m))
1285 6847 acydburn
                {
1286 7322 acydburn
                        $var = (empty($m[2]) || empty($convert_config[$m[2]])) ? "''" : "'" . addslashes($convert_config[$m[2]]) . "'";
1287 6847 acydburn
                        $exec = '$config_value = ' . $m[1] . '(' . $var . ');';
1288 6847 acydburn
                        eval($exec);
1289 6847 acydburn
                }
1290 6847 acydburn
                else
1291 6847 acydburn
                {
1292 10473 jelly_doughnut
                        if ($schema['table_format'] != 'file' || empty($schema['array_name']))
1293 10473 jelly_doughnut
                        {
1294 10473 jelly_doughnut
                                $config_value = (isset($convert_config[$src])) ? $convert_config[$src] : '';
1295 10473 jelly_doughnut
                        }
1296 10473 jelly_doughnut
                        else if (!empty($schema['array_name']))
1297 10473 jelly_doughnut
                        {
1298 10473 jelly_doughnut
                                $src_ary = $schema['array_name'];
1299 10473 jelly_doughnut
                                $config_value = (isset($convert_config[$src_ary][$src])) ? $convert_config[$src_ary][$src] : '';
1300 10473 jelly_doughnut
                        }
1301 10473 jelly_doughnut
                   }
1302 6847 acydburn
1303 6847 acydburn
                if ($config_value !== '')
1304 6847 acydburn
                {
1305 6927 acydburn
                        // Most are...
1306 6927 acydburn
                        if (is_string($config_value))
1307 6927 acydburn
                        {
1308 8667 acydburn
                                $config_value = truncate_string(utf8_htmlspecialchars($config_value), 255, 255, false);
1309 6927 acydburn
                        }
1310 6927 acydburn
1311 6847 acydburn
                        set_config($config_name, $config_value);
1312 6847 acydburn
                }
1313 6847 acydburn
        }
1314 6847 acydburn
}
1315 6847 acydburn
1316 6847 acydburn
/**
1317 6847 acydburn
* Update the count of PM's in custom folders for all users
1318 6847 acydburn
*/
1319 6847 acydburn
function update_folder_pm_count()
1320 6847 acydburn
{
1321 6847 acydburn
        global $db, $convert, $user;
1322 6847 acydburn
1323 6847 acydburn
        $sql = 'SELECT user_id, folder_id, COUNT(msg_id) as num_messages
1324 6847 acydburn
                FROM ' . PRIVMSGS_TO_TABLE . '
1325 6847 acydburn
                WHERE folder_id NOT IN (' . PRIVMSGS_NO_BOX . ', ' . PRIVMSGS_HOLD_BOX . ', ' . PRIVMSGS_INBOX . ', ' . PRIVMSGS_OUTBOX . ', ' . PRIVMSGS_SENTBOX . ')
1326 6971 davidmj
                GROUP BY folder_id, user_id';
1327 6847 acydburn
        $result = $db->sql_query($sql);
1328 6847 acydburn
1329 6847 acydburn
        while ($row = $db->sql_fetchrow($result))
1330 6847 acydburn
        {
1331 6847 acydburn
                $db->sql_query('UPDATE ' . PRIVMSGS_FOLDER_TABLE . ' SET pm_count = ' . $row['num_messages'] . '
1332 6847 acydburn
                        WHERE user_id = ' . $row['user_id'] . ' AND folder_id = ' . $row['folder_id']);
1333 6847 acydburn
        }
1334 6847 acydburn
        $db->sql_freeresult($result);
1335 6847 acydburn
}
1336 6847 acydburn
1337 6915 acydburn
// Functions mainly used by the main convertor script
1338 6847 acydburn
1339 6847 acydburn
function path($path, $path_relative = true)
1340 6847 acydburn
{
1341 7198 acydburn
        if ($path === false)
1342 7198 acydburn
        {
1343 7198 acydburn
                return '';
1344 7198 acydburn
        }
1345 7198 acydburn
1346 6847 acydburn
        if (substr($path, -1) != '/')
1347 6847 acydburn
        {
1348 6847 acydburn
                $path .= '/';
1349 6847 acydburn
        }
1350 6847 acydburn
1351 6847 acydburn
        if (!$path_relative)
1352 6847 acydburn
        {
1353 6847 acydburn
                return $path;
1354 6847 acydburn
        }
1355 6847 acydburn
1356 6847 acydburn
        if (substr($path, 0, 1) == '/')
1357 6847 acydburn
        {
1358 6847 acydburn
                $path = substr($path, 1);
1359 6847 acydburn
        }
1360 6847 acydburn
1361 6847 acydburn
        return $path;
1362 6847 acydburn
}
1363 6847 acydburn
1364 6847 acydburn
/**
1365 6847 acydburn
* Extract the variables defined in a configuration file
1366 6847 acydburn
* @todo As noted by Xore we need to look at this from a security perspective
1367 6847 acydburn
*/
1368 6847 acydburn
function extract_variables_from_file($_filename)
1369 6847 acydburn
{
1370 6847 acydburn
        include($_filename);
1371 6847 acydburn
1372 6847 acydburn
        $vars = get_defined_vars();
1373 6847 acydburn
        unset($vars['_filename']);
1374 6847 acydburn
1375 6847 acydburn
        return $vars;
1376 6847 acydburn
}
1377 6847 acydburn
1378 6847 acydburn
function get_path($src_path, $src_url, $test_file)
1379 6847 acydburn
{
1380 6847 acydburn
        global $config, $phpbb_root_path, $phpEx;
1381 6847 acydburn
1382 6847 acydburn
        $board_config = get_config();
1383 6847 acydburn
1384 6847 acydburn
        $test_file = preg_replace('/\.php$/i', ".$phpEx", $test_file);
1385 6847 acydburn
        $src_path = path($src_path);
1386 6847 acydburn
1387 6847 acydburn
        if (@file_exists($phpbb_root_path . $src_path . $test_file))
1388 6847 acydburn
        {
1389 6847 acydburn
                return $src_path;
1390 6847 acydburn
        }
1391 6847 acydburn
1392 6847 acydburn
        if (!empty($src_url) && !empty($board_config['server_name']))
1393 6847 acydburn
        {
1394 6847 acydburn
                if (!preg_match('#https?://([^/]+)(.*)#i', $src_url, $m))
1395 6847 acydburn
                {
1396 6847 acydburn
                        return false;
1397 6847 acydburn
                }
1398 6847 acydburn
1399 6847 acydburn
                if ($m[1] != $board_config['server_name'])
1400 6847 acydburn
                {
1401 6847 acydburn
                        return false;
1402 6847 acydburn
                }
1403 6847 acydburn
1404 6847 acydburn
                $url_parts = explode('/', $m[2]);
1405 6847 acydburn
                if (substr($src_url, -1) != '/')
1406 6847 acydburn
                {
1407 7211 davidmj
                        if (preg_match('/.*\.([a-z0-9]{3,4})$/i', $url_parts[sizeof($url_parts) - 1]))
1408 6847 acydburn
                        {
1409 6847 acydburn
                                $url_parts[sizeof($url_parts) - 1] = '';
1410 6847 acydburn
                        }
1411 6847 acydburn
                        else
1412 6847 acydburn
                        {
1413 6847 acydburn
                                $url_parts[] = '';
1414 6847 acydburn
                        }
1415 6847 acydburn
                }
1416 6847 acydburn
1417 6847 acydburn
                $script_path = $board_config['script_path'];
1418 6847 acydburn
                if (substr($script_path, -1) == '/')
1419 6847 acydburn
                {
1420 6847 acydburn
                        $script_path = substr($script_path, 0, -1);
1421 6847 acydburn
                }
1422 6847 acydburn
1423 6847 acydburn
                $path_array = array();
1424 6847 acydburn
1425 6847 acydburn
                $phpbb_parts = explode('/', $script_path);
1426 6847 acydburn
                for ($i = 0; $i < sizeof($url_parts); ++$i)
1427 6847 acydburn
                {
1428 6847 acydburn
                        if ($i < sizeof($phpbb_parts[$i]) && $url_parts[$i] == $phpbb_parts[$i])
1429 6847 acydburn
                        {
1430 6847 acydburn
                                $path_array[] = $url_parts[$i];
1431 6847 acydburn
                                unset($url_parts[$i]);
1432 6847 acydburn
                        }
1433 6847 acydburn
                        else
1434 6847 acydburn
                        {
1435 6847 acydburn
                                $path = '';
1436 6847 acydburn
                                for ($j = $i; $j < sizeof($phpbb_parts); ++$j)
1437 6847 acydburn
                                {
1438 6847 acydburn
                                        $path .= '../';
1439 6847 acydburn
                                }
1440 6847 acydburn
                                $path .= implode('/', $url_parts);
1441 6847 acydburn
                                break;
1442 6847 acydburn
                        }
1443 6847 acydburn
                }
1444 6847 acydburn
1445 6847 acydburn
                if (!empty($path))
1446 6847 acydburn
                {
1447 6847 acydburn
                        if (@file_exists($phpbb_root_path . $path . $test_file))
1448 6847 acydburn
                        {
1449 6847 acydburn
                                return $path;
1450 6847 acydburn
                        }
1451 6847 acydburn
                }
1452 6847 acydburn
        }
1453 6847 acydburn
1454 6847 acydburn
        return false;
1455 6847 acydburn
}
1456 6847 acydburn
1457 6847 acydburn
function compare_table($tables, $tablename, &$prefixes)
1458 6847 acydburn
{
1459 7015 davidmj
        for ($i = 0, $table_size = sizeof($tables); $i < $table_size; ++$i)
1460 6847 acydburn
        {
1461 6847 acydburn
                if (preg_match('/(.*)' . $tables[$i] . '$/', $tablename, $m))
1462 6847 acydburn
                {
1463 6847 acydburn
                        if (empty($m[1]))
1464 6847 acydburn
                        {
1465 6847 acydburn
                                $m[1] = '*';
1466 6847 acydburn
                        }
1467 6847 acydburn
1468 6847 acydburn
                        if (isset($prefixes[$m[1]]))
1469 6847 acydburn
                        {
1470 6847 acydburn
                                $prefixes[$m[1]]++;
1471 6847 acydburn
                        }
1472 6847 acydburn
                        else
1473 6847 acydburn
                        {
1474 6847 acydburn
                                $prefixes[$m[1]] = 1;
1475 6847 acydburn
                        }
1476 6847 acydburn
                }
1477 6847 acydburn
        }
1478 6847 acydburn
}
1479 6847 acydburn
1480 6847 acydburn
/**
1481 6847 acydburn
* Grant permissions to a specified user or group
1482 6847 acydburn
*
1483 6847 acydburn
* @param string $ug_type user|group|user_role|group_role
1484 6847 acydburn
* @param mixed $forum_id forum ids (array|int|0) -> 0 == all forums
1485 6847 acydburn
* @param mixed $ug_id [int] user_id|group_id : [string] usergroup name
1486 6847 acydburn
* @param mixed $acl_list [string] acl entry : [array] acl entries : [string] role entry
1487 6847 acydburn
* @param int $setting ACL_YES|ACL_NO|ACL_NEVER
1488 6847 acydburn
*/
1489 6847 acydburn
function mass_auth($ug_type, $forum_id, $ug_id, $acl_list, $setting = ACL_NO)
1490 6847 acydburn
{
1491 6847 acydburn
        global $db, $convert, $user, $config;
1492 6847 acydburn
        static $acl_option_ids, $group_ids;
1493 6847 acydburn
1494 6847 acydburn
        if (($ug_type == 'group' || $ug_type == 'group_role') && is_string($ug_id))
1495 6847 acydburn
        {
1496 6847 acydburn
                if (!isset($group_ids[$ug_id]))
1497 6847 acydburn
                {
1498 6847 acydburn
                        $sql = 'SELECT group_id
1499 8133 acydburn
                                FROM ' . GROUPS_TABLE . "
1500 6847 acydburn
                                WHERE group_name = '" . $db->sql_escape(strtoupper($ug_id)) . "'";
1501 6847 acydburn
                        $result = $db->sql_query_limit($sql, 1);
1502 6847 acydburn
                        $id = (int) $db->sql_fetchfield('group_id');
1503 6847 acydburn
                        $db->sql_freeresult($result);
1504 6847 acydburn
1505 6847 acydburn
                        if (!$id)
1506 6847 acydburn
                        {
1507 6847 acydburn
                                return;
1508 6847 acydburn
                        }
1509 6847 acydburn
1510 6847 acydburn
                        $group_ids[$ug_id] = $id;
1511 6847 acydburn
                }
1512 6847 acydburn
1513 6847 acydburn
                $ug_id = (int) $group_ids[$ug_id];
1514 6847 acydburn
        }
1515 6847 acydburn
1516 6847 acydburn
        $table = ($ug_type == 'user' || $ug_type == 'user_role') ? ACL_USERS_TABLE : ACL_GROUPS_TABLE;
1517 6930 acydburn
        $id_field = ($ug_type == 'user' || $ug_type == 'user_role') ? 'user_id' : 'group_id';
1518 6847 acydburn
1519 6847 acydburn
        // Role based permissions are the simplest to handle so check for them first
1520 6847 acydburn
        if ($ug_type == 'user_role' || $ug_type == 'group_role')
1521 6847 acydburn
        {
1522 7952 kellanved
                if (is_numeric($forum_id))
1523 7952 kellanved
                {
1524 7952 kellanved
                        $sql = 'SELECT role_id
1525 7952 kellanved
                                FROM ' . ACL_ROLES_TABLE . "
1526 7952 kellanved
                                WHERE role_name = 'ROLE_" . $db->sql_escape($acl_list) . "'";
1527 7952 kellanved
                        $result = $db->sql_query_limit($sql, 1);
1528 7952 kellanved
                        $row = $db->sql_fetchrow($result);
1529 7952 kellanved
                        $db->sql_freeresult($result);
1530 6847 acydburn
1531 7952 kellanved
                        // If we have no role id there is something wrong here
1532 7952 kellanved
                        if ($row)
1533 7952 kellanved
                        {
1534 7952 kellanved
                                $sql = "INSERT INTO $table ($id_field, forum_id, auth_role_id) VALUES ($ug_id, $forum_id, " . $row['role_id'] . ')';
1535 7952 kellanved
                                $db->sql_query($sql);
1536 7952 kellanved
                        }
1537 6865 acydburn
                }
1538 6847 acydburn
1539 6847 acydburn
                return;
1540 6847 acydburn
        }
1541 6847 acydburn
1542 6847 acydburn
        // Build correct parameters
1543 6847 acydburn
        $auth = array();
1544 6847 acydburn
1545 6847 acydburn
        if (!is_array($acl_list))
1546 6847 acydburn
        {
1547 6847 acydburn
                $auth = array($acl_list => $setting);
1548 6847 acydburn
        }
1549 6847 acydburn
        else
1550 6847 acydburn
        {
1551 6847 acydburn
                foreach ($acl_list as $auth_option)
1552 6847 acydburn
                {
1553 6847 acydburn
                        $auth[$auth_option] = $setting;
1554 6847 acydburn
                }
1555 6847 acydburn
        }
1556 6847 acydburn
        unset($acl_list);
1557 6847 acydburn
1558 6847 acydburn
        if (!is_array($forum_id))
1559 6847 acydburn
        {
1560 6847 acydburn
                $forum_id = array($forum_id);
1561 6847 acydburn
        }
1562 6847 acydburn
1563 6847 acydburn
        // Set any flags as required
1564 6847 acydburn
        foreach ($auth as $auth_option => $acl_setting)
1565 6847 acydburn
        {
1566 6847 acydburn
                $flag = substr($auth_option, 0, strpos($auth_option, '_') + 1);
1567 6847 acydburn
                if (empty($auth[$flag]))
1568 6847 acydburn
                {
1569 6847 acydburn
                        $auth[$flag] = $acl_setting;
1570 6847 acydburn
                }
1571 6847 acydburn
        }
1572 6847 acydburn
1573 6847 acydburn
        if (!is_array($acl_option_ids) || empty($acl_option_ids))
1574 6847 acydburn
        {
1575 6847 acydburn
                $sql = 'SELECT auth_option_id, auth_option
1576 6847 acydburn
                        FROM ' . ACL_OPTIONS_TABLE;
1577 6847 acydburn
                $result = $db->sql_query($sql);
1578 6847 acydburn
1579 6847 acydburn
                while ($row = $db->sql_fetchrow($result))
1580 6847 acydburn
                {
1581 6847 acydburn
                        $acl_option_ids[$row['auth_option']] = $row['auth_option_id'];
1582 6847 acydburn
                }
1583 6847 acydburn
                $db->sql_freeresult($result);
1584 6847 acydburn
        }
1585 6847 acydburn
1586 7952 kellanved
        $sql_forum = 'AND ' . $db->sql_in_set('a.forum_id', array_map('intval', $forum_id), false, true);
1587 6847 acydburn
1588 6847 acydburn
        $sql = ($ug_type == 'user') ? 'SELECT o.auth_option_id, o.auth_option, a.forum_id, a.auth_setting FROM ' . ACL_USERS_TABLE . ' a, ' . ACL_OPTIONS_TABLE . " o WHERE a.auth_option_id = o.auth_option_id $sql_forum AND a.user_id = $ug_id" : 'SELECT o.auth_option_id, o.auth_option, a.forum_id, a.auth_setting FROM ' . ACL_GROUPS_TABLE . ' a, ' . ACL_OPTIONS_TABLE . " o WHERE a.auth_option_id = o.auth_option_id $sql_forum AND a.group_id = $ug_id";
1589 6847 acydburn
        $result = $db->sql_query($sql);
1590 6847 acydburn
1591 6847 acydburn
        $cur_auth = array();
1592 6847 acydburn
        while ($row = $db->sql_fetchrow($result))
1593 6847 acydburn
        {
1594 6847 acydburn
                $cur_auth[$row['forum_id']][$row['auth_option_id']] = $row['auth_setting'];
1595 6847 acydburn
        }
1596 6847 acydburn
        $db->sql_freeresult($result);
1597 6847 acydburn
1598 6847 acydburn
        $sql_ary = array();
1599 6847 acydburn
        foreach ($forum_id as $forum)
1600 6847 acydburn
        {
1601 6847 acydburn
                foreach ($auth as $auth_option => $setting)
1602 6847 acydburn
                {
1603 6847 acydburn
                        $auth_option_id = $acl_option_ids[$auth_option];
1604 6847 acydburn
1605 6847 acydburn
                        if (!$auth_option_id)
1606 6847 acydburn
                        {
1607 6847 acydburn
                                continue;
1608 6847 acydburn
                        }
1609 6847 acydburn
1610 6847 acydburn
                        switch ($setting)
1611 6847 acydburn
                        {
1612 6847 acydburn
                                case ACL_NO:
1613 6847 acydburn
                                        if (isset($cur_auth[$forum][$auth_option_id]))
1614 6847 acydburn
                                        {
1615 8133 acydburn
                                                $sql_ary['delete'][] = "DELETE FROM $table
1616 6847 acydburn
                                                        WHERE forum_id = $forum
1617 6847 acydburn
                                                                AND auth_option_id = $auth_option_id
1618 6847 acydburn
                                                                AND $id_field = $ug_id";
1619 6847 acydburn
                                        }
1620 6847 acydburn
                                break;
1621 6847 acydburn
1622 6847 acydburn
                                default:
1623 6847 acydburn
                                        if (!isset($cur_auth[$forum][$auth_option_id]))
1624 6847 acydburn
                                        {
1625 6847 acydburn
                                                $sql_ary['insert'][] = "$ug_id, $forum, $auth_option_id, $setting";
1626 6847 acydburn
                                        }
1627 6847 acydburn
                                        else if ($cur_auth[$forum][$auth_option_id] != $setting)
1628 6847 acydburn
                                        {
1629 8133 acydburn
                                                $sql_ary['update'][] = "UPDATE " . $table . "
1630 8133 acydburn
                                                        SET auth_setting = $setting
1631 8133 acydburn
                                                        WHERE $id_field = $ug_id
1632 8133 acydburn
                                                                AND forum_id = $forum
1633 6847 acydburn
                                                                AND auth_option_id = $auth_option_id";
1634 6847 acydburn
                                        }
1635 6847 acydburn
                        }
1636 6847 acydburn
                }
1637 6847 acydburn
        }
1638 6847 acydburn
        unset($cur_auth);
1639 6847 acydburn
1640 6847 acydburn
        $sql = '';
1641 6847 acydburn
        foreach ($sql_ary as $sql_type => $sql_subary)
1642 6847 acydburn
        {
1643 6847 acydburn
                switch ($sql_type)
1644 6847 acydburn
                {
1645 6847 acydburn
                        case 'insert':
1646 6847 acydburn
                                switch ($db->sql_layer)
1647 6847 acydburn
                                {
1648 6847 acydburn
                                        case 'mysql':
1649 6847 acydburn
                                        case 'mysql4':
1650 6847 acydburn
                                                $sql = 'VALUES ' . implode(', ', preg_replace('#^(.*?)$#', '(\1)', $sql_subary));
1651 6847 acydburn
                                        break;
1652 6847 acydburn
1653 6847 acydburn
                                        case 'mssql':
1654 6847 acydburn
                                        case 'sqlite':
1655 10489 naderman
                                        case 'mssqlnative':
1656 6847 acydburn
                                                $sql = implode(' UNION ALL ', preg_replace('#^(.*?)$#', 'SELECT \1', $sql_subary));
1657 6847 acydburn
                                        break;
1658 6847 acydburn
1659 6847 acydburn
                                        default:
1660 6847 acydburn
                                                foreach ($sql_subary as $sql)
1661 6847 acydburn
                                                {
1662 6847 acydburn
                                                        $sql = "INSERT INTO $table ($id_field, forum_id, auth_option_id, auth_setting) VALUES ($sql)";
1663 6847 acydburn
                                                        $db->sql_query($sql);
1664 6847 acydburn
                                                        $sql = '';
1665 6847 acydburn
                                                }
1666 6847 acydburn
                                }
1667 6847 acydburn
1668 6847 acydburn
                                if ($sql != '')
1669 6847 acydburn
                                {
1670 6847 acydburn
                                        $sql = "INSERT INTO $table ($id_field, forum_id, auth_option_id, auth_setting) $sql";
1671 6847 acydburn
                                        $db->sql_query($sql);
1672 6847 acydburn
                                }
1673 6847 acydburn
                        break;
1674 6847 acydburn
1675 6847 acydburn
                        case 'update':
1676 6847 acydburn
                        case 'delete':
1677 6847 acydburn
                                foreach ($sql_subary as $sql)
1678 6847 acydburn
                                {
1679 6847 acydburn
                                        $db->sql_query($sql);
1680 6847 acydburn
                                        $sql = '';
1681 6847 acydburn
                                }
1682 6847 acydburn
                        break;
1683 6847 acydburn
                }
1684 6847 acydburn
                unset($sql_ary[$sql_type]);
1685 6847 acydburn
        }
1686 6847 acydburn
        unset($sql_ary);
1687 6847 acydburn
1688 6847 acydburn
}
1689 6847 acydburn
1690 6847 acydburn
/**
1691 6847 acydburn
* Update the count of unread private messages for all users
1692 6847 acydburn
*/
1693 6847 acydburn
function update_unread_count()
1694 6847 acydburn
{
1695 6847 acydburn
        global $db;
1696 6847 acydburn
1697 6847 acydburn
        $sql = 'SELECT user_id, COUNT(msg_id) as num_messages
1698 6847 acydburn
                FROM ' . PRIVMSGS_TO_TABLE . '
1699 6847 acydburn
                WHERE pm_unread = 1
1700 6847 acydburn
                        AND folder_id <> ' . PRIVMSGS_OUTBOX . '
1701 6847 acydburn
                GROUP BY user_id';
1702 6847 acydburn
        $result = $db->sql_query($sql);
1703 6847 acydburn
1704 6847 acydburn
        while ($row = $db->sql_fetchrow($result))
1705 6847 acydburn
        {
1706 6847 acydburn
                $db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_unread_privmsg = ' . $row['num_messages'] . '
1707 6847 acydburn
                        WHERE user_id = ' . $row['user_id']);
1708 6847 acydburn
        }
1709 6847 acydburn
        $db->sql_freeresult($result);
1710 6847 acydburn
}
1711 6847 acydburn
1712 6847 acydburn
/**
1713 6847 acydburn
* Add any of the pre-defined "special" groups which are missing from the database
1714 6847 acydburn
*/
1715 6847 acydburn
function add_default_groups()
1716 6847 acydburn
{
1717 6847 acydburn
        global $db;
1718 6847 acydburn
1719 6847 acydburn
        $default_groups = array(
1720 7744 kellanved
                'GUESTS'                        => array('', 0, 0),
1721 7744 kellanved
                'REGISTERED'                => array('', 0, 0),
1722 7744 kellanved
                'REGISTERED_COPPA'        => array('', 0, 0),
1723 7744 kellanved
                'GLOBAL_MODERATORS'        => array('00AA00', 1, 0),
1724 7744 kellanved
                'ADMINISTRATORS'        => array('AA0000', 1, 1),
1725 9636 acydburn
                'BOTS'                                => array('9E8DA7', 0, 0),
1726 9636 acydburn
                'NEWLY_REGISTERED'                => array('', 0, 0),
1727 6847 acydburn
        );
1728 6847 acydburn
1729 6847 acydburn
        $sql = 'SELECT *
1730 7952 kellanved
                FROM ' . GROUPS_TABLE . '
1731 7952 kellanved
                WHERE ' . $db->sql_in_set('group_name', array_keys($default_groups));
1732 6847 acydburn
        $result = $db->sql_query($sql);
1733 6847 acydburn
1734 6847 acydburn
        while ($row = $db->sql_fetchrow($result))
1735 6847 acydburn
        {
1736 6847 acydburn
                unset($default_groups[strtoupper($row['group_name'])]);
1737 6847 acydburn
        }
1738 6847 acydburn
        $db->sql_freeresult($result);
1739 6847 acydburn
1740 6847 acydburn
        $sql_ary = array();
1741 6847 acydburn
1742 6847 acydburn
        foreach ($default_groups as $name => $data)
1743 6847 acydburn
        {
1744 6847 acydburn
                $sql_ary[] = array(
1745 6847 acydburn
                        'group_name'                        => (string) $name,
1746 6847 acydburn
                        'group_desc'                        => '',
1747 6847 acydburn
                        'group_desc_uid'                => '',
1748 6847 acydburn
                        'group_desc_bitfield'        => '',
1749 6847 acydburn
                        'group_type'                        => GROUP_SPECIAL,
1750 7961 acydburn
                        'group_colour'                        => (string) $data[0],
1751 7961 acydburn
                        'group_legend'                        => (int) $data[1],
1752 7961 acydburn
                        'group_founder_manage'        => (int) $data[2]
1753 6847 acydburn
                );
1754 6847 acydburn
        }
1755 6847 acydburn
1756 6847 acydburn
        if (sizeof($sql_ary))
1757 6847 acydburn
        {
1758 6847 acydburn
                $db->sql_multi_insert(GROUPS_TABLE, $sql_ary);
1759 6847 acydburn
        }
1760 6847 acydburn
}
1761 6847 acydburn
1762 7666 kellanved
1763 8133 acydburn
/**
1764 7666 kellanved
* Sync post count. We might need to do this in batches.
1765 7666 kellanved
*/
1766 7666 kellanved
function sync_post_count($offset, $limit)
1767 7666 kellanved
{
1768 7666 kellanved
        global $db;
1769 7666 kellanved
        $sql = 'SELECT COUNT(post_id) AS num_posts, poster_id
1770 7666 kellanved
                        FROM ' . POSTS_TABLE . '
1771 7666 kellanved
                        WHERE post_postcount = 1
1772 8805 acydburn
                                AND post_approved = 1
1773 7666 kellanved
                        GROUP BY poster_id
1774 7666 kellanved
                        ORDER BY poster_id';
1775 7666 kellanved
        $result = $db->sql_query_limit($sql, $limit, $offset);
1776 7666 kellanved
1777 7666 kellanved
        while ($row = $db->sql_fetchrow($result))
1778 7666 kellanved
        {
1779 7666 kellanved
                $db->sql_query('UPDATE ' . USERS_TABLE . " SET user_posts = {$row['num_posts']} WHERE user_id = {$row['poster_id']}");
1780 7666 kellanved
        }
1781 7666 kellanved
        $db->sql_freeresult($result);
1782 7666 kellanved
}
1783 7666 kellanved
1784 6847 acydburn
/**
1785 6847 acydburn
* Add the search bots into the database
1786 6847 acydburn
* This code should be used in execute_last if the source database did not have bots
1787 6847 acydburn
* If you are converting bots this function should not be called
1788 6847 acydburn
* @todo We might want to look at sharing the bot list between the install code and this code for consistancy
1789 6847 acydburn
*/
1790 6847 acydburn
function add_bots()
1791 6847 acydburn
{
1792 6855 acydburn
        global $db, $convert, $user, $config, $phpbb_root_path, $phpEx;
1793 6847 acydburn
1794 6905 acydburn
        $db->sql_query($convert->truncate_statement . BOTS_TABLE);
1795 6905 acydburn
1796 6847 acydburn
        $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name = 'BOTS'";
1797 6847 acydburn
        $result = $db->sql_query($sql);
1798 6984 davidmj
        $group_id = (int) $db->sql_fetchfield('group_id', false, $result);
1799 6847 acydburn
        $db->sql_freeresult($result);
1800 6847 acydburn
1801 6847 acydburn
        if (!$group_id)
1802 6847 acydburn
        {
1803 6847 acydburn
                add_default_groups();
1804 6847 acydburn
1805 6847 acydburn
                $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name = 'BOTS'";
1806 6847 acydburn
                $result = $db->sql_query($sql);
1807 6984 davidmj
                $group_id = (int) $db->sql_fetchfield('group_id', false, $result);
1808 6847 acydburn
                $db->sql_freeresult($result);
1809 6847 acydburn
1810 6847 acydburn
                if (!$group_id)
1811 6847 acydburn
                {
1812 6984 davidmj
                        global $install;
1813 6847 acydburn
                        $install->error($user->lang['CONV_ERROR_INCONSISTENT_GROUPS'], __LINE__, __FILE__);
1814 6847 acydburn
                }
1815 6847 acydburn
        }
1816 6847 acydburn
1817 6847 acydburn
        $bots = array(
1818 6847 acydburn
                'AdsBot [Google]'                        => array('AdsBot-Google', ''),
1819 6847 acydburn
                'Alexa [Bot]'                                => array('ia_archiver', ''),
1820 6847 acydburn
                'Alta Vista [Bot]'                        => array('Scooter/', ''),
1821 6847 acydburn
                'Ask Jeeves [Bot]'                        => array('Ask Jeeves', ''),
1822 6847 acydburn
                'Baidu [Spider]'                        => array('Baiduspider+(', ''),
1823 10878 git-gate
                'Bing [Bot]'                                => array('bingbot/', ''),
1824 6847 acydburn
                'Exabot [Bot]'                                => array('Exabot/', ''),
1825 6847 acydburn
                'FAST Enterprise [Crawler]'        => array('FAST Enterprise Crawler', ''),
1826 6847 acydburn
                'FAST WebCrawler [Crawler]'        => array('FAST-WebCrawler/', ''),
1827 6847 acydburn
                'Francis [Bot]'                                => array('http://www.neomo.de/', ''),
1828 6847 acydburn
                'Gigabot [Bot]'                                => array('Gigabot/', ''),
1829 8072 acydburn
                'Google Adsense [Bot]'                => array('Mediapartners-Google', ''),
1830 6847 acydburn
                'Google Desktop'                        => array('Google Desktop', ''),
1831 6847 acydburn
                'Google Feedfetcher'                => array('Feedfetcher-Google', ''),
1832 6847 acydburn
                'Google [Bot]'                                => array('Googlebot', ''),
1833 6847 acydburn
                'Heise IT-Markt [Crawler]'        => array('heise-IT-Markt-Crawler', ''),
1834 6847 acydburn
                'Heritrix [Crawler]'                => array('heritrix/1.', ''),
1835 6847 acydburn
                'IBM Research [Bot]'                => array('ibm.com/cs/crawler', ''),
1836 6847 acydburn
                'ICCrawler - ICjobs'                => array('ICCrawler - ICjobs', ''),
1837 6847 acydburn
                'ichiro [Crawler]'                        => array('ichiro/2', ''),
1838 6847 acydburn
                'Majestic-12 [Bot]'                        => array('MJ12bot/', ''),
1839 6847 acydburn
                'Metager [Bot]'                                => array('MetagerBot/', ''),
1840 6847 acydburn
                'MSN NewsBlogs'                                => array('msnbot-NewsBlogs/', ''),
1841 6847 acydburn
                'MSN [Bot]'                                        => array('msnbot/', ''),
1842 6847 acydburn
                'MSNbot Media'                                => array('msnbot-media/', ''),
1843 6847 acydburn
                'NG-Search [Bot]'                        => array('NG-Search/', ''),
1844 6847 acydburn
                'Nutch [Bot]'                                => array('http://lucene.apache.org/nutch/', ''),
1845 6847 acydburn
                'Nutch/CVS [Bot]'                        => array('NutchCVS/', ''),
1846 6847 acydburn
                'OmniExplorer [Bot]'                => array('OmniExplorer_Bot/', ''),
1847 6847 acydburn
                'Online link [Validator]'        => array('online link validator', ''),
1848 6847 acydburn
                'psbot [Picsearch]'                        => array('psbot/0', ''),
1849 6847 acydburn
                'Seekport [Bot]'                        => array('Seekbot/', ''),
1850 6847 acydburn
                'Sensis [Crawler]'                        => array('Sensis Web Crawler', ''),
1851 6847 acydburn
                'SEO Crawler'                                => array('SEO search Crawler/', ''),
1852 6847 acydburn
                'Seoma [Crawler]'                        => array('Seoma [SEO Crawler]', ''),
1853 6847 acydburn
                'SEOSearch [Crawler]'                => array('SEOsearch/', ''),
1854 6847 acydburn
                'Snappy [Bot]'                                => array('Snappy/1.1 ( http://www.urltrends.com/ )', ''),
1855 6847 acydburn
                'Steeler [Crawler]'                        => array('http://www.tkl.iis.u-tokyo.ac.jp/~crawler/', ''),
1856 6847 acydburn
                'Synoo [Bot]'                                => array('SynooBot/', ''),
1857 6847 acydburn
                'Telekom [Bot]'                                => array('crawleradmin.t-info@telekom.de', ''),
1858 6847 acydburn
                'TurnitinBot [Bot]'                        => array('TurnitinBot/', ''),
1859 6847 acydburn
                'Voyager [Bot]'                                => array('voyager/1.0', ''),
1860 6847 acydburn
                'W3 [Sitesearch]'                        => array('W3 SiteSearch Crawler', ''),
1861 6847 acydburn
                'W3C [Linkcheck]'                        => array('W3C-checklink/', ''),
1862 6847 acydburn
                'W3C [Validator]'                        => array('W3C_*Validator', ''),
1863 6847 acydburn
                'WiseNut [Bot]'                                => array('http://www.WISEnutbot.com', ''),
1864 6956 acydburn
                'YaCy [Bot]'                                => array('yacybot', ''),
1865 6847 acydburn
                'Yahoo MMCrawler [Bot]'                => array('Yahoo-MMCrawler/', ''),
1866 6847 acydburn
                'Yahoo Slurp [Bot]'                        => array('Yahoo! DE Slurp', ''),
1867 6847 acydburn
                'Yahoo [Bot]'                                => array('Yahoo! Slurp', ''),
1868 6847 acydburn
                'YahooSeeker [Bot]'                        => array('YahooSeeker/', ''),
1869 6847 acydburn
        );
1870 6847 acydburn
1871 6855 acydburn
        if (!function_exists('user_add'))
1872 6855 acydburn
        {
1873 6855 acydburn
                include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
1874 6855 acydburn
        }
1875 6855 acydburn
1876 6847 acydburn
        foreach ($bots as $bot_name => $bot_ary)
1877 6847 acydburn
        {
1878 6854 acydburn
                $user_row = array(
1879 6854 acydburn
                        'user_type'                                => USER_IGNORE,
1880 6854 acydburn
                        'group_id'                                => $group_id,
1881 6854 acydburn
                        'username'                                => $bot_name,
1882 6854 acydburn
                        'user_regdate'                        => time(),
1883 6854 acydburn
                        'user_password'                        => '',
1884 6854 acydburn
                        'user_colour'                        => '9E8DA7',
1885 6854 acydburn
                        'user_email'                        => '',
1886 6854 acydburn
                        'user_lang'                                => $config['default_lang'],
1887 6854 acydburn
                        'user_style'                        => 1,
1888 6854 acydburn
                        'user_timezone'                        => 0,
1889 6854 acydburn
                        'user_allow_massemail'        => 0,
1890 6847 acydburn
                );
1891 6847 acydburn
1892 6855 acydburn
                $user_id = user_add($user_row);
1893 6847 acydburn
1894 6855 acydburn
                if ($user_id)
1895 6855 acydburn
                {
1896 6855 acydburn
                        $sql = 'INSERT INTO ' . BOTS_TABLE . ' ' . $db->sql_build_array('INSERT', array(
1897 6855 acydburn
                                'bot_active'        => 1,
1898 6855 acydburn
                                'bot_name'                => $bot_name,
1899 6855 acydburn
                                'user_id'                => $user_id,
1900 6855 acydburn
                                'bot_agent'                => $bot_ary[0],
1901 6855 acydburn
                                'bot_ip'                => $bot_ary[1])
1902 6855 acydburn
                        );
1903 6855 acydburn
                        $db->sql_query($sql);
1904 6855 acydburn
                }
1905 6847 acydburn
        }
1906 6847 acydburn
}
1907 6847 acydburn
1908 6847 acydburn
/**
1909 6847 acydburn
* Update any dynamic configuration variables after the conversion is finished
1910 6847 acydburn
* @todo Confirm that this updates all relevant values since it has not necessarily been kept in sync with all changes
1911 6847 acydburn
*/
1912 6847 acydburn
function update_dynamic_config()
1913 6847 acydburn
{
1914 6847 acydburn
        global $db, $config;
1915 6847 acydburn
1916 6847 acydburn
        // Get latest username
1917 6847 acydburn
        $sql = 'SELECT user_id, username, user_colour
1918 6847 acydburn
                FROM ' . USERS_TABLE . '
1919 7040 acydburn
                WHERE user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')';
1920 7040 acydburn
1921 7040 acydburn
        if (!empty($config['increment_user_id']))
1922 7040 acydburn
        {
1923 7040 acydburn
                $sql .= ' AND user_id <> ' . $config['increment_user_id'];
1924 7040 acydburn
        }
1925 7040 acydburn
1926 7040 acydburn
        $sql .= ' ORDER BY user_id DESC';
1927 7040 acydburn
1928 6847 acydburn
        $result = $db->sql_query_limit($sql, 1);
1929 6847 acydburn
        $row = $db->sql_fetchrow($result);
1930 6847 acydburn
        $db->sql_freeresult($result);
1931 6847 acydburn
1932 6847 acydburn
        if ($row)
1933 6847 acydburn
        {
1934 6847 acydburn
                set_config('newest_user_id', $row['user_id'], true);
1935 6847 acydburn
                set_config('newest_username', $row['username'], true);
1936 6847 acydburn
                set_config('newest_user_colour', $row['user_colour'], true);
1937 6847 acydburn
        }
1938 6847 acydburn
1939 7608 acydburn
//        Also do not reset record online user/date. There will be old data or the fresh data from the schema.
1940 7608 acydburn
//        set_config('record_online_users', 1, true);
1941 7608 acydburn
//        set_config('record_online_date', time(), true);
1942 6847 acydburn
1943 8133 acydburn
        $sql = 'SELECT COUNT(post_id) AS stat
1944 6847 acydburn
                FROM ' . POSTS_TABLE . '
1945 6847 acydburn
                WHERE post_approved = 1';
1946 6847 acydburn
        $result = $db->sql_query($sql);
1947 6847 acydburn
        $row = $db->sql_fetchrow($result);
1948 6847 acydburn
        $db->sql_freeresult($result);
1949 6847 acydburn
1950 6847 acydburn
        set_config('num_posts', (int) $row['stat'], true);
1951 6847 acydburn
1952 6847 acydburn
        $sql = 'SELECT COUNT(topic_id) AS stat
1953 6847 acydburn
                FROM ' . TOPICS_TABLE . '
1954 6847 acydburn
                WHERE topic_approved = 1';
1955 6847 acydburn
        $result = $db->sql_query($sql);
1956 6847 acydburn
        $row = $db->sql_fetchrow($result);
1957 6847 acydburn
        $db->sql_freeresult($result);
1958 6847 acydburn
1959 6847 acydburn
        set_config('num_topics', (int) $row['stat'], true);
1960 6847 acydburn
1961 6847 acydburn
        $sql = 'SELECT COUNT(user_id) AS stat
1962 6847 acydburn
                FROM ' . USERS_TABLE . '
1963 6847 acydburn
                WHERE user_type IN (' . USER_NORMAL . ',' . USER_FOUNDER . ')';
1964 6847 acydburn
        $result = $db->sql_query($sql);
1965 6847 acydburn
        $row = $db->sql_fetchrow($result);
1966 6847 acydburn
        $db->sql_freeresult($result);
1967 6847 acydburn
1968 6847 acydburn
        set_config('num_users', (int) $row['stat'], true);
1969 6847 acydburn
1970 6847 acydburn
        $sql = 'SELECT COUNT(attach_id) as stat
1971 6847 acydburn
                FROM ' . ATTACHMENTS_TABLE . '
1972 6847 acydburn
                WHERE is_orphan = 0';
1973 6847 acydburn
        $result = $db->sql_query($sql);
1974 6847 acydburn
        set_config('num_files', (int) $db->sql_fetchfield('stat'), true);
1975 6847 acydburn
        $db->sql_freeresult($result);
1976 6847 acydburn
1977 6847 acydburn
        $sql = 'SELECT SUM(filesize) as stat
1978 6847 acydburn
                FROM ' . ATTACHMENTS_TABLE . '
1979 6847 acydburn
                WHERE is_orphan = 0';
1980 6847 acydburn
        $result = $db->sql_query($sql);
1981 8876 acydburn
        set_config('upload_dir_size', (float) $db->sql_fetchfield('stat'), true);
1982 6847 acydburn
        $db->sql_freeresult($result);
1983 6847 acydburn
1984 7516 acydburn
        /**
1985 7516 acydburn
        * We do not resync users post counts - this can be done by the admin after conversion if wanted.
1986 6847 acydburn
        $sql = 'SELECT COUNT(post_id) AS num_posts, poster_id
1987 6847 acydburn
                FROM ' . POSTS_TABLE . '
1988 6847 acydburn
                WHERE post_postcount = 1
1989 6847 acydburn
                GROUP BY poster_id';
1990 6847 acydburn
        $result = $db->sql_query($sql);
1991 6847 acydburn
1992 6847 acydburn
        while ($row = $db->sql_fetchrow($result))
1993 6847 acydburn
        {
1994 6847 acydburn
                $db->sql_query('UPDATE ' . USERS_TABLE . " SET user_posts = {$row['num_posts']} WHERE user_id = {$row['poster_id']}");
1995 6847 acydburn
        }
1996 6847 acydburn
        $db->sql_freeresult($result);
1997 7516 acydburn
        */
1998 6847 acydburn
}
1999 6847 acydburn
2000 6847 acydburn
/**
2001 6847 acydburn
* Updates topics_posted entries
2002 6847 acydburn
*/
2003 6847 acydburn
function update_topics_posted()
2004 6847 acydburn
{
2005 6847 acydburn
        global $db, $config;
2006 6847 acydburn
2007 6954 davidmj
        switch ($db->sql_layer)
2008 6954 davidmj
        {
2009 6954 davidmj
                case 'sqlite':
2010 6954 davidmj
                case 'firebird':
2011 6954 davidmj
                        $db->sql_query('DELETE FROM ' . TOPICS_POSTED_TABLE);
2012 6954 davidmj
                break;
2013 6847 acydburn
2014 6954 davidmj
                default:
2015 6954 davidmj
                        $db->sql_query('TRUNCATE TABLE ' . TOPICS_POSTED_TABLE);
2016 6954 davidmj
                break;
2017 6954 davidmj
        }
2018 6954 davidmj
2019 6847 acydburn
        // This can get really nasty... therefore we only do the last six months
2020 6847 acydburn
        $get_from_time = time() - (6 * 4 * 7 * 24 * 60 * 60);
2021 6847 acydburn
2022 6847 acydburn
        // Select forum ids, do not include categories
2023 6847 acydburn
        $sql = 'SELECT forum_id
2024 6847 acydburn
                FROM ' . FORUMS_TABLE . '
2025 6847 acydburn
                WHERE forum_type <> ' . FORUM_CAT;
2026 6847 acydburn
        $result = $db->sql_query($sql);
2027 6847 acydburn
2028 6847 acydburn
        $forum_ids = array();
2029 6847 acydburn
        while ($row = $db->sql_fetchrow($result))
2030 6847 acydburn
        {
2031 6847 acydburn
                $forum_ids[] = $row['forum_id'];
2032 6847 acydburn
        }
2033 6847 acydburn
        $db->sql_freeresult($result);
2034 6847 acydburn
2035 6847 acydburn
        // Any global announcements? ;)
2036 6847 acydburn
        $forum_ids[] = 0;
2037 6847 acydburn
2038 6847 acydburn
        // Now go through the forums and get us some topics...
2039 6847 acydburn
        foreach ($forum_ids as $forum_id)
2040 6847 acydburn
        {
2041 6847 acydburn
                $sql = 'SELECT p.poster_id, p.topic_id
2042 6847 acydburn
                        FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t
2043 6847 acydburn
                        WHERE t.forum_id = ' . $forum_id . '
2044 6847 acydburn
                                AND t.topic_moved_id = 0
2045 6847 acydburn
                                AND t.topic_last_post_time > ' . $get_from_time . '
2046 6847 acydburn
                                AND t.topic_id = p.topic_id
2047 6847 acydburn
                                AND p.poster_id <> ' . ANONYMOUS . '
2048 6847 acydburn
                        GROUP BY p.poster_id, p.topic_id';
2049 6847 acydburn
                $result = $db->sql_query($sql);
2050 6847 acydburn
2051 6847 acydburn
                $posted = array();
2052 6847 acydburn
                while ($row = $db->sql_fetchrow($result))
2053 6847 acydburn
                {
2054 6847 acydburn
                        $posted[$row['poster_id']][] = $row['topic_id'];
2055 6847 acydburn
                }
2056 6847 acydburn
                $db->sql_freeresult($result);
2057 6847 acydburn
2058 6847 acydburn
                $sql_ary = array();
2059 6847 acydburn
                foreach ($posted as $user_id => $topic_row)
2060 6847 acydburn
                {
2061 6847 acydburn
                        foreach ($topic_row as $topic_id)
2062 6847 acydburn
                        {
2063 6847 acydburn
                                $sql_ary[] = array(
2064 7608 acydburn
                                        'user_id'                => (int) $user_id,
2065 7608 acydburn
                                        'topic_id'                => (int) $topic_id,
2066 6847 acydburn
                                        'topic_posted'        => 1,
2067 6847 acydburn
                                );
2068 6847 acydburn
                        }
2069 6847 acydburn
                }
2070 6847 acydburn
                unset($posted);
2071 6847 acydburn
2072 7118 acydburn
                if (sizeof($sql_ary))
2073 7118 acydburn
                {
2074 7118 acydburn
                        $db->sql_multi_insert(TOPICS_POSTED_TABLE, $sql_ary);
2075 7118 acydburn
                }
2076 6847 acydburn
        }
2077 6847 acydburn
}
2078 6847 acydburn
2079 6847 acydburn
/**
2080 6847 acydburn
* Ensure that all users have a default group specified and update related information such as their colour
2081 6847 acydburn
*/
2082 6847 acydburn
function fix_empty_primary_groups()
2083 6847 acydburn
{
2084 6847 acydburn
        global $db;
2085 6847 acydburn
2086 6847 acydburn
        // Set group ids for users not already having it
2087 6847 acydburn
        $sql = 'UPDATE ' . USERS_TABLE . ' SET group_id = ' . get_group_id('registered') . '
2088 6847 acydburn
                WHERE group_id = 0 AND user_type = ' . USER_INACTIVE;
2089 6847 acydburn
        $db->sql_query($sql);
2090 6847 acydburn
2091 6847 acydburn
        $sql = 'UPDATE ' . USERS_TABLE . ' SET group_id = ' . get_group_id('registered') . '
2092 6847 acydburn
                WHERE group_id = 0 AND user_type = ' . USER_NORMAL;
2093 6847 acydburn
        $db->sql_query($sql);
2094 6847 acydburn
2095 6847 acydburn
        $db->sql_query('UPDATE ' . USERS_TABLE . ' SET group_id = ' . get_group_id('guests') . ' WHERE user_id = ' . ANONYMOUS);
2096 6847 acydburn
2097 6847 acydburn
        $sql = 'SELECT user_id FROM ' . USER_GROUP_TABLE . ' WHERE group_id = ' . get_group_id('administrators');
2098 6847 acydburn
        $result = $db->sql_query($sql);
2099 6847 acydburn
2100 6847 acydburn
        $user_ids = array();
2101 6847 acydburn
        while ($row = $db->sql_fetchrow($result))
2102 6847 acydburn
        {
2103 6847 acydburn
                $user_ids[] = $row['user_id'];
2104 6847 acydburn
        }
2105 6847 acydburn
        $db->sql_freeresult($result);
2106 6847 acydburn
2107 6847 acydburn
        if (sizeof($user_ids))
2108 6847 acydburn
        {
2109 6847 acydburn
                $db->sql_query('UPDATE ' . USERS_TABLE . ' SET group_id = ' . get_group_id('administrators') . '
2110 7952 kellanved
                        WHERE group_id = 0 AND ' . $db->sql_in_set('user_id', $user_ids));
2111 6847 acydburn
        }
2112 6847 acydburn
2113 6847 acydburn
        $sql = 'SELECT user_id FROM ' . USER_GROUP_TABLE . ' WHERE group_id = ' . get_group_id('global_moderators');
2114 6847 acydburn
2115 6847 acydburn
        $user_ids = array();
2116 6847 acydburn
        while ($row = $db->sql_fetchrow($result))
2117 6847 acydburn
        {
2118 6847 acydburn
                $user_ids[] = $row['user_id'];
2119 6847 acydburn
        }
2120 6847 acydburn
        $db->sql_freeresult($result);
2121 6847 acydburn
2122 6847 acydburn
        if (sizeof($user_ids))
2123 6847 acydburn
        {
2124 6847 acydburn
                $db->sql_query('UPDATE ' . USERS_TABLE . ' SET group_id = ' . get_group_id('global_moderators') . '
2125 7952 kellanved
                        WHERE group_id = 0 AND ' . $db->sql_in_set('user_id', $user_ids));
2126 6847 acydburn
        }
2127 6847 acydburn
2128 6847 acydburn
        // Set user colour
2129 6847 acydburn
        $sql = 'SELECT group_id, group_colour FROM ' . GROUPS_TABLE . "
2130 6847 acydburn
                WHERE group_colour <> ''";
2131 6847 acydburn
        $result = $db->sql_query($sql);
2132 6847 acydburn
2133 6847 acydburn
        while ($row = $db->sql_fetchrow($result))
2134 6847 acydburn
        {
2135 6847 acydburn
                $db->sql_query('UPDATE ' . USERS_TABLE . " SET user_colour = '{$row['group_colour']}' WHERE group_id = {$row['group_id']}");
2136 6847 acydburn
        }
2137 6847 acydburn
        $db->sql_freeresult($result);
2138 6847 acydburn
}
2139 6847 acydburn
2140 7180 acydburn
/**
2141 7180 acydburn
* Cleanly remove invalid user entries after converting the users table...
2142 7180 acydburn
*/
2143 7180 acydburn
function remove_invalid_users()
2144 7180 acydburn
{
2145 7772 kellanved
        global $convert, $db, $phpEx, $phpbb_root_path;
2146 7180 acydburn
2147 7180 acydburn
        // username_clean is UNIQUE
2148 7180 acydburn
        $sql = 'SELECT user_id
2149 7180 acydburn
                FROM ' . USERS_TABLE . "
2150 7180 acydburn
                WHERE username_clean = ''";
2151 7180 acydburn
        $result = $db->sql_query($sql);
2152 7180 acydburn
        $row = $db->sql_fetchrow($result);
2153 7180 acydburn
        $db->sql_freeresult($result);
2154 7180 acydburn
2155 7180 acydburn
        if ($row)
2156 7180 acydburn
        {
2157 7180 acydburn
                if (!function_exists('user_delete'))
2158 7180 acydburn
                {
2159 7180 acydburn
                        include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
2160 7180 acydburn
                }
2161 7180 acydburn
2162 7180 acydburn
                user_delete('remove', $row['user_id']);
2163 7180 acydburn
        }
2164 7180 acydburn
}
2165 7180 acydburn
2166 6847 acydburn
function convert_bbcode($message, $convert_size = true, $extended_bbcodes = false)
2167 6847 acydburn
{
2168 6847 acydburn
        static $orig, $repl, $origx, $replx, $str_from, $str_to;
2169 6847 acydburn
2170 6847 acydburn
        if (empty($orig))
2171 6847 acydburn
        {
2172 6847 acydburn
                $orig = $repl = array();
2173 6847 acydburn
2174 6847 acydburn
                $orig[] = '#\[(php|sql)\](.*?)\[/(php|sql)\]#is';
2175 6847 acydburn
                $repl[] = '[code]\2[/code]';
2176 6847 acydburn
2177 6847 acydburn
                $orig[] = '#\[font=[^\]]+\](.*?)\[/font\]#is';
2178 6847 acydburn
                $repl[] = '\1';
2179 6847 acydburn
2180 6847 acydburn
                $orig[] = '#\[align=[a-z]+\](.*?)\[/align\]#is';
2181 6847 acydburn
                $repl[] = '\1';
2182 6847 acydburn
2183 6847 acydburn
                $orig[] = '#\[/list=.*?\]#is';
2184 6847 acydburn
                $repl[] = '[/list]';
2185 6847 acydburn
2186 6847 acydburn
                $origx = array(
2187 6847 acydburn
                        '#\[glow[^\]]+\](.*?)\[/glow\]#is',
2188 6847 acydburn
                        '#\[shadow[^\]]+\](.*?)\[/shadow\]#is',
2189 6847 acydburn
                        '#\[flash[^\]]+\](.*?)\[/flash\]#is'
2190 6847 acydburn
                );
2191 6847 acydburn
2192 6847 acydburn
                $replx = array(
2193 6847 acydburn
                        '\1',
2194 6847 acydburn
                        '\1',
2195 6847 acydburn
                        '[url=\1]Flash[/url]'
2196 6847 acydburn
                );
2197 6847 acydburn
2198 6847 acydburn
                $str_from = array(
2199 6847 acydburn
                        '[ftp]',        '[/ftp]',
2200 6847 acydburn
                        '[ftp=',        '[/ftp]',
2201 6847 acydburn
                        '[pre]',        '[/pre]',
2202 6847 acydburn
                        '[table]',        '[/table]',
2203 6847 acydburn
                        '[td]',                '[/td]',
2204 6847 acydburn
                        '[tr]',                '[/tr]',
2205 6847 acydburn
                        '[s]',                '[/s]',
2206 6847 acydburn
                        '[left]',        '[/left]',
2207 6847 acydburn
                        '[right]',        '[/right]',
2208 6847 acydburn
                        '[center]',        '[/center]',
2209 6847 acydburn
                        '[sub]',        '[/sub]',
2210 6847 acydburn
                        '[sup]',        '[/sup]',
2211 6847 acydburn
                        '[tt]',                '[/tt]',
2212 6847 acydburn
                        '[move]',        '[/move]',
2213 6847 acydburn
                        '[hr]'
2214 6847 acydburn
                );
2215 6847 acydburn
2216 6847 acydburn
                $str_to = array(
2217 6847 acydburn
                        '[url]',        '[/url]',
2218 6847 acydburn
                        '[url=',        '[/url]',
2219 6847 acydburn
                        '[code]',        '[/code]',
2220 6847 acydburn
                        "\n",                '',
2221 6847 acydburn
                        '',                        '',
2222 6847 acydburn
                        "\n",                '',
2223 6847 acydburn
                        '',                        '',
2224 6847 acydburn
                        '',                        '',
2225 6847 acydburn
                        '',                        '',
2226 6847 acydburn
                        '',                        '',
2227 6847 acydburn
                        '',                        '',
2228 6847 acydburn
                        '',                        '',
2229 6847 acydburn
                        '',                        '',
2230 6847 acydburn
                        '',                        '',
2231 6847 acydburn
                        "\n\n"
2232 6847 acydburn
                );
2233 6847 acydburn
2234 6847 acydburn
                for ($i = 0; $i < sizeof($str_from); ++$i)
2235 6847 acydburn
                {
2236 6847 acydburn
                        $origx[] = '#\\' . str_replace(']', '\\]', $str_from[$i]) . '#is';
2237 6847 acydburn
                        $replx[] = $str_to[$i];
2238 6847 acydburn
                }
2239 6847 acydburn
        }
2240 6847 acydburn
2241 6847 acydburn
        if (preg_match_all('#\[email=([^\]]+)\](.*?)\[/email\]#i', $message, $m))
2242 6847 acydburn
        {
2243 6847 acydburn
                for ($i = 0; $i < sizeof($m[1]); ++$i)
2244 6847 acydburn
                {
2245 6847 acydburn
                        if ($m[1][$i] == $m[2][$i])
2246 6847 acydburn
                        {
2247 6847 acydburn
                                $message = str_replace($m[0][$i], '[email]' . $m[1][$i] . '[/email]', $message);
2248 6847 acydburn
                        }
2249 6847 acydburn
                        else
2250 6847 acydburn
                        {
2251 6847 acydburn
                                $message = str_replace($m[0][$i], $m[2][$i] . ' ([email]' . $m[1][$i] . '[/email])', $message);
2252 6847 acydburn
                        }
2253 6847 acydburn
                }
2254 6847 acydburn
        }
2255 6847 acydburn
2256 6847 acydburn
        if ($convert_size && preg_match('#\[size=[0-9]+\].*?\[/size\]#i', $message))
2257 6847 acydburn
        {
2258 6847 acydburn
                $size = array(9, 9, 12, 15, 18, 24, 29, 29, 29, 29);
2259 6847 acydburn
                $message = preg_replace('#\[size=([0-9]+)\](.*?)\[/size\]#i', '[size=\1]\2[/size]', $message);
2260 6847 acydburn
                $message = preg_replace('#\[size=[0-9]{2,}\](.*?)\[/size\]#i', '[size=29]\1[/size]', $message);
2261 6847 acydburn
2262 6847 acydburn
                for ($i = sizeof($size); $i; )
2263 6847 acydburn
                {
2264 6847 acydburn
                        $i--;
2265 6847 acydburn
                        $message = str_replace('[size=' . $i . ']', '[size=' . $size[$i] . ']', $message);
2266 6847 acydburn
                }
2267 6847 acydburn
        }
2268 6847 acydburn
2269 6847 acydburn
        if ($extended_bbcodes)
2270 6847 acydburn
        {
2271 6847 acydburn
                $message = preg_replace($origx, $replx, $message);
2272 6847 acydburn
        }
2273 6847 acydburn
2274 6847 acydburn
        $message = preg_replace($orig, $repl, $message);
2275 6847 acydburn
        return $message;
2276 6847 acydburn
}
2277 6847 acydburn
2278 6847 acydburn
2279 6847 acydburn
function copy_file($src, $trg, $overwrite = false, $die_on_failure = true, $source_relative_path = true)
2280 6847 acydburn
{
2281 6847 acydburn
        global $convert, $phpbb_root_path, $config, $user, $db;
2282 7393 kellanved
2283 6847 acydburn
        if (substr($trg, -1) == '/')
2284 6847 acydburn
        {
2285 9905 acydburn
                $trg .= utf8_basename($src);
2286 6847 acydburn
        }
2287 6847 acydburn
        $src_path = relative_base($src, $source_relative_path, __LINE__, __FILE__);
2288 6847 acydburn
        $trg_path = $trg;
2289 6847 acydburn
2290 6847 acydburn
        if (!$overwrite && @file_exists($trg_path))
2291 6847 acydburn
        {
2292 6847 acydburn
                return true;
2293 6847 acydburn
        }
2294 7393 kellanved
2295 6847 acydburn
        if (!@file_exists($src_path))
2296 6847 acydburn
        {
2297 6847 acydburn
                return;
2298 6847 acydburn
        }
2299 6847 acydburn
2300 6847 acydburn
        $path = $phpbb_root_path;
2301 6847 acydburn
        $parts = explode('/', $trg);
2302 6847 acydburn
        unset($parts[sizeof($parts) - 1]);
2303 6847 acydburn
2304 6847 acydburn
        for ($i = 0; $i < sizeof($parts); ++$i)
2305 6847 acydburn
        {
2306 6847 acydburn
                $path .= $parts[$i] . '/';
2307 6847 acydburn
2308 6847 acydburn
                if (!is_dir($path))
2309 6847 acydburn
                {
2310 6847 acydburn
                        @mkdir($path, 0777);
2311 6847 acydburn
                }
2312 6847 acydburn
        }
2313 6847 acydburn
2314 10757 git-gate
        if (!phpbb_is_writable($path))
2315 6847 acydburn
        {
2316 6847 acydburn
                @chmod($path, 0777);
2317 6847 acydburn
        }
2318 6847 acydburn
2319 6847 acydburn
        if (!@copy($src_path, $phpbb_root_path . $trg_path))
2320 6847 acydburn
        {
2321 7392 kellanved
                $convert->p_master->error(sprintf($user->lang['COULD_NOT_COPY'], $src_path, $phpbb_root_path . $trg_path), __LINE__, __FILE__, !$die_on_failure);
2322 6847 acydburn
                return;
2323 6847 acydburn
        }
2324 6847 acydburn
2325 6847 acydburn
        if ($perm = @fileperms($src_path))
2326 6847 acydburn
        {
2327 6847 acydburn
                @chmod($phpbb_root_path . $trg_path, $perm);
2328 6847 acydburn
        }
2329 6847 acydburn
2330 6847 acydburn
        return true;
2331 6847 acydburn
}
2332 6847 acydburn
2333 6847 acydburn
function copy_dir($src, $trg, $copy_subdirs = true, $overwrite = false, $die_on_failure = true, $source_relative_path = true)
2334 6847 acydburn
{
2335 6847 acydburn
        global $convert, $phpbb_root_path, $config, $user, $db;
2336 6847 acydburn
2337 6847 acydburn
        $dirlist = $filelist = $bad_dirs = array();
2338 6847 acydburn
        $src = path($src, $source_relative_path);
2339 6847 acydburn
        $trg = path($trg);
2340 6847 acydburn
        $src_path = relative_base($src, $source_relative_path, __LINE__, __FILE__);
2341 6847 acydburn
        $trg_path = $phpbb_root_path . $trg;
2342 6847 acydburn
2343 6847 acydburn
        if (!is_dir($trg_path))
2344 6847 acydburn
        {
2345 6847 acydburn
                @mkdir($trg_path, 0777);
2346 6847 acydburn
                @chmod($trg_path, 0777);
2347 6847 acydburn
        }
2348 6847 acydburn
2349 10757 git-gate
        if (!phpbb_is_writable($trg_path))
2350 6847 acydburn
        {
2351 6847 acydburn
                $bad_dirs[] = path($config['script_path']) . $trg;
2352 6847 acydburn
        }
2353 6847 acydburn
2354 6847 acydburn
        if ($handle = @opendir($src_path))
2355 6847 acydburn
        {
2356 6847 acydburn
                while ($entry = readdir($handle))
2357 6847 acydburn
                {
2358 6851 acydburn
                        if ($entry[0] == '.' || $entry == 'CVS' || $entry == 'index.htm')
2359 6847 acydburn
                        {
2360 6847 acydburn
                                continue;
2361 6847 acydburn
                        }
2362 6847 acydburn
2363 6847 acydburn
                        if (is_dir($src_path . $entry))
2364 6847 acydburn
                        {
2365 6847 acydburn
                                $dirlist[] = $entry;
2366 6847 acydburn
                        }
2367 6847 acydburn
                        else
2368 6847 acydburn
                        {
2369 6847 acydburn
                                $filelist[] = $entry;
2370 6847 acydburn
                        }
2371 6847 acydburn
                }
2372 6847 acydburn
                closedir($handle);
2373 6847 acydburn
        }
2374 6847 acydburn
        else if ($dir = @dir($src_path))
2375 6847 acydburn
        {
2376 6847 acydburn
                while ($entry = $dir->read())
2377 6847 acydburn
                {
2378 6851 acydburn
                        if ($entry[0] == '.' || $entry == 'CVS' || $entry == 'index.htm')
2379 6847 acydburn
                        {
2380 6847 acydburn
                                continue;
2381 6847 acydburn
                        }
2382 6847 acydburn
2383 6847 acydburn
                        if (is_dir($src_path . $entry))
2384 6847 acydburn
                        {
2385 6847 acydburn
                                $dirlist[] = $entry;
2386 6847 acydburn
                        }
2387 6847 acydburn
                        else
2388 6847 acydburn
                        {
2389 6847 acydburn
                                $filelist[] = $entry;
2390 6847 acydburn
                        }
2391 6847 acydburn
                }
2392 6847 acydburn
                $dir->close();
2393 6847 acydburn
        }
2394 6847 acydburn
        else
2395 6847 acydburn
        {
2396 6847 acydburn
                $convert->p_master->error(sprintf($user->lang['CONV_ERROR_COULD_NOT_READ'], relative_base($src, $source_relative_path)), __LINE__, __FILE__);
2397 6847 acydburn
        }
2398 6847 acydburn
2399 6847 acydburn
        if ($copy_subdirs)
2400 6847 acydburn
        {
2401 6847 acydburn
                for ($i = 0; $i < sizeof($dirlist); ++$i)
2402 6847 acydburn
                {
2403 6847 acydburn
                        $dir = $dirlist[$i];
2404 6847 acydburn
2405 6847 acydburn
                        if ($dir == 'CVS')
2406 6847 acydburn
                        {
2407 6847 acydburn
                                continue;
2408 6847 acydburn
                        }
2409 6847 acydburn
2410 6847 acydburn
                        if (!is_dir($trg_path . $dir))
2411 6847 acydburn
                        {
2412 6847 acydburn
                                @mkdir($trg_path . $dir, 0777);
2413 6847 acydburn
                                @chmod($trg_path . $dir, 0777);
2414 6847 acydburn
                        }
2415 6847 acydburn
2416 10757 git-gate
                        if (!phpbb_is_writable($trg_path . $dir))
2417 6847 acydburn
                        {
2418 6847 acydburn
                                $bad_dirs[] = $trg . $dir;
2419 6847 acydburn
                                $bad_dirs[] = $trg_path . $dir;
2420 6847 acydburn
                        }
2421 6847 acydburn
2422 6847 acydburn
                        if (!sizeof($bad_dirs))
2423 6847 acydburn
                        {
2424 6847 acydburn
                                copy_dir($src . $dir, $trg . $dir, true, $overwrite, $die_on_failure, $source_relative_path);
2425 6847 acydburn
                        }
2426 6847 acydburn
                }
2427 6847 acydburn
        }
2428 6847 acydburn
2429 6847 acydburn
        if (sizeof($bad_dirs))
2430 6847 acydburn
        {
2431 6847 acydburn
                $str = (sizeof($bad_dirs) == 1) ? $user->lang['MAKE_FOLDER_WRITABLE'] : $user->lang['MAKE_FOLDERS_WRITABLE'];
2432 6847 acydburn
                sort($bad_dirs);
2433 6847 acydburn
                $convert->p_master->error(sprintf($str, implode('<br />', $bad_dirs)), __LINE__, __FILE__);
2434 6847 acydburn
        }
2435 6847 acydburn
2436 6847 acydburn
        for ($i = 0; $i < sizeof($filelist); ++$i)
2437 6847 acydburn
        {
2438 6847 acydburn
                copy_file($src . $filelist[$i], $trg . $filelist[$i], $overwrite, $die_on_failure, $source_relative_path);
2439 6847 acydburn
        }
2440 6847 acydburn
}
2441 6847 acydburn
2442 6847 acydburn
function relative_base($path, $is_relative = true, $line = false, $file = false)
2443 6847 acydburn
{
2444 6847 acydburn
        global $convert, $phpbb_root_path, $config, $user, $db;
2445 6847 acydburn
2446 6847 acydburn
        if (!$is_relative)
2447 6847 acydburn
        {
2448 6847 acydburn
                return $path;
2449 6847 acydburn
        }
2450 6847 acydburn
2451 6872 acydburn
        if (empty($convert->options['forum_path']) && $is_relative)
2452 6847 acydburn
        {
2453 6847 acydburn
                $line = $line ? $line : __LINE__;
2454 6847 acydburn
                $file = $file ? $file : __FILE__;
2455 6847 acydburn
2456 6847 acydburn
                $convert->p_master->error($user->lang['CONV_ERROR_NO_FORUM_PATH'], $line, $file);
2457 6847 acydburn
        }
2458 6847 acydburn
2459 6872 acydburn
        return $convert->options['forum_path'] . '/' . $path;
2460 6847 acydburn
}
2461 6847 acydburn
2462 7692 kellanved
function get_smiley_display()
2463 7692 kellanved
{
2464 7692 kellanved
        static $smiley_count = 0;
2465 7692 kellanved
        $smiley_count++;
2466 7692 kellanved
        return ($smiley_count < 50) ? 1 : 0;
2467 7692 kellanved
}
2468 7692 kellanved
2469 7806 kellanved
2470 7806 kellanved
function fill_dateformat($user_dateformat)
2471 7806 kellanved
{
2472 7806 kellanved
        global $config;
2473 8667 acydburn
2474 7806 kellanved
        return ((empty($user_dateformat)) ? $config['default_dateformat'] : $user_dateformat);
2475 7806 kellanved
}
2476 7806 kellanved
2477 7806 kellanved
2478 7806 kellanved
2479 6847 acydburn
?>