Posts: 12
Threads: 4
Joined: Apr 2010
Reputation:
0
Hi,
I converted my phpbb forum to mybb.
Many links are broken now, they look like this:
<!-- m --><a class="postlink" href="http://www.megaupload.com/?d=IB6RPFUN" onclick="window.open(this.href);return false;">http://www.megaupload.com/?d=IB6RPFUN</a><!-- m -->
Is there a way to change these links at once to normal?
Posts: 1,245
Threads: 215
Joined: Jul 2009
Reputation:
20
Wrong Section. Post in MyBB Merge Support.
Posts: 2
Threads: 0
Joined: May 2010
Reputation:
0
2010-05-21, 02:49 PM
(This post was last modified: 2010-05-22, 03:09 AM by MAGZine.)
(2010-05-18, 01:18 PM)RickR86 Wrote: Hi,
I converted my phpbb forum to mybb.
Many links are broken now, they look like this:
<!-- m --><a class="postlink" href="http://www.megaupload.com/?d=IB6RPFUN" onclick="window.open(this.href);return false;">http://www.megaupload.com/?d=IB6RPFUN</a><!-- m -->
Is there a way to change these links at once to normal?
Nobody replied, so I guess I will.
I don't know what caused the problem, but I wrote a script to fix the issue.
Copy the text below into a file called testreplace.php, and upload it to the same place as the root of your forums. (Wherever the forum install is located, along with announcements.php, attachment.php, calander.php, etc)
I'm assuming it's a mostly default install with all of the tables prefixed with mybb_
After you've changed the information, upload it to your server. Visit the file, and it should start processing your posts immediately.
Goodluck!
Note that this is an unoffical fix.
<?php
include ("inc/config.php");
//thanks to [email protected] for the regex script. [php.net]
function escape_string_for_regex($str)
{
$patterns = array('/\//', '/\^/', '/\./', '/\$/', '/\|/',
'/\(/', '/\)/', '/\[/', '/\]/', '/\*/', '/\+/',
'/\?/', '/\{/', '/\}/', '/\,/');
$replace = array('\/', '\^', '\.', '\$', '\|', '\(', '\)',
'\[', '\]', '\*', '\+', '\?', '\{', '\}', '\,');
return preg_replace($patterns,$replace, $str);
}
mysql_connect($config['database']['hostname'], $config['database']['username'], $config['database']['password']);
mysql_select_db($config['database']['database']);
$limit = 100;
$total=0;
$query = mysql_query("SELECT message,pid FROM mybb_posts LIMIT ".$_GET['start'].", ".($_GET['start'] + $limit));
while ($row = mysql_fetch_assoc($query)) :
$post = $row['message'];
$pid = $row['pid'];
if(preg_match_all('/<!-- m --><a class=\"postlink\" href=\"(.*)\" onclick=\"window.open\(this.href\);return false;\">(.*)<\/a><!-- m -->/iU', $post, $result, PREG_SET_ORDER)) :
$altered = 1;
endif;
$max = count($result) - 1;
$count = 0;
while ($count <= $max) {
$post = preg_replace('/(<!-- m --><a class=\"postlink\" href=\"'.escape_string_for_regex($result[$count][1]).'\" onclick=\"window.open\(this.href\);return false;\">(.*)<\/a><!-- m -->)/iU', '[url='.$result[$count][1].']'.$result[$count][2].'[/url]', $post);
$count++;
$total = $total + 1;
}
if ($altered == 1) :
$altered = 0;
mysql_query("UPDATE mybb_posts SET message='".mysql_real_escape_string($post)."' WHERE pid='".$pid."'");
if (mysql_affected_rows() == 0) :
die(":(");
endif;
endif;
endwhile;
echo '<meta HTTP-EQUIV="REFRESH" content="0; url=testreplace.php?start='.($_GET['start']+$limit).'">';
echo "completed posts ".$_GET['start']." to ". ($_GET['start'] + $limit).". moving on."
?>
Posts: 5,286
Threads: 195
Joined: Sep 2009
Reputation:
108
That script however only works for MySQL databases. Instead of including config.php you should require global.php and use the $db object for all your database calls.
Posts: 2
Threads: 0
Joined: May 2010
Reputation:
0
2010-05-22, 03:03 AM
(This post was last modified: 2010-05-22, 03:22 AM by MAGZine.)
(2010-05-22, 02:31 AM)ralgith Wrote: That script however only works for MySQL databases. Instead of including config.php you should require global.php and use the $db object for all your database calls.
Ah. I'm unfamiliar with myBB, so I just went about it for my own purpose. While the whole 'what if they're not using MySQL(/i)?' though did cross my mind, but I like to think it to be a pretty safe bet that a healthy percentage of other users are using MySQL databases, and decided against writing it for other databases.
It is something I could do, though. If you point me in the direction of documentation for the database class, I'll be more than happy to update my script for more general use. I'm just bit confused of the syntax of db->update_query. I did a quick search through global.php, and it looked like update_query("tablename", "valuestoset", "WHEREstatement").
Posts: 17
Threads: 4
Joined: May 2010
Reputation:
0
I just imported from PHPBB3 and had this issue as well using the latest Merge. I tried running the PHP (I updated the script with my details) and it throws these errors:
Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/kizza42/rcflyingclub.com/parramatta/mybb/testreplace.php on line 15
Warning: mysql_select_db() [function.mysql-select-db]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/kizza42/rcflyingclub.com/parramatta/mybb/testreplace.php on line 16
Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in /home/kizza42/rcflyingclub.com/parramatta/mybb/testreplace.php on line 16
Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/kizza42/rcflyingclub.com/parramatta/mybb/testreplace.php on line 22
Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/kizza42/rcflyingclub.com/parramatta/mybb/testreplace.php on line 22
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/kizza42/rcflyingclub.com/parramatta/mybb/testreplace.php on line 24
I can access PHPMyAdmin, what would be the query to run direct from there to resolve this issue?
Posts: 34
Threads: 11
Joined: Jun 2010
Reputation:
0
Hello. I have the same problem and I'm currently running your script. It is running but I'm not sure if it's doing what you intended it to do, as there are only about 30K posts on my forum and the script just keeps going and going. It's been running for about and hour now and is around 2 million posts?
Posts: 1
Threads: 0
Joined: Jul 2010
Reputation:
1
2010-07-08, 04:03 AM
(This post was last modified: 2010-07-08, 04:04 AM by SinStereo.)
(2010-06-24, 11:55 PM)allbordercollies Wrote: Hello. I have the same problem and I'm currently running your script. It is running but I'm not sure if it's doing what you intended it to do, as there are only about 30K posts on my forum and the script just keeps going and going. It's been running for about and hour now and is around 2 million posts?
Ok, you need to run the following script in the PHPMyAdmin site:
Replace mybbdatabase with the right database name for your site:
update `mybbdatabase`.`mybb_posts` SET `message` = REPLACE(`message`, '<!-- e --><a href="mailto:', '[email=');
update `mybbdatabase`.`mybb_posts` SET `message` = REPLACE(`message`,'</a><!-- e -->', '[/email]');
update `mybbdatabase`.`mybb_posts` SET `message` = REPLACE(`message`, '<!-- l --><a class="postlink-local" href="', '[url=');
update `mybbdatabase`.`mybb_posts` SET `message` = REPLACE(`message`, '</a><!-- l -->', '[/url]');
update `mybbdatabase`.`mybb_posts` SET `message` = REPLACE(`message`, '<!-- w --><a class="postlink" href="', '[url=');
update `mybbdatabase`.`mybb_posts` SET `message` = REPLACE(`message`, '</a><!-- w -->', '[/url]');
update `mybbdatabase`.`mybb_posts` SET `message` = REPLACE(`message`, '<!-- m --><a class="postlink" href="', '[url=');
update `mybbdatabase`.`mybb_posts` SET `message` = REPLACE(`message`, '</a><!-- m -->', '[/url]');
update `mybbdatabase`.`mybb_posts` SET `message` = REPLACE(`message`, '">', ']');
Then, you need to fix you private message too, and for this you need to run the following script:
update `mybbdatabase`.`mybb_privatemessages` SET `message` = REPLACE(`message`, '<!-- e --><a href="mailto:', '[email=');
update `mybbdatabase`.`mybb_privatemessages` SET `message` = REPLACE(`message`,'</a><!-- e -->', '[/email]');
update `mybbdatabase`.`mybb_privatemessages` SET `message` = REPLACE(`message`, '<!-- l --><a class="postlink-local" href="', '[url=');
update `mybbdatabase`.`mybb_privatemessages` SET `message` = REPLACE(`message`, '</a><!-- l -->', '[/url]');
update `mybbdatabase`.`mybb_privatemessages` SET `message` = REPLACE(`message`, '<!-- w --><a class="postlink" href="', '[url=');
update `mybbdatabase`.`mybb_privatemessages` SET `message` = REPLACE(`message`, '</a><!-- w -->', '[/url]');
update `mybbdatabase`.`mybb_privatemessages` SET `message` = REPLACE(`message`, '<!-- m --><a class="postlink" href="', '[url=');
update `mybbdatabase`.`mybb_privatemessages` SET `message` = REPLACE(`message`, '</a><!-- m -->', '[/url]');
update `mybbdatabase`.`mybb_privatemessages` SET `message` = REPLACE(`message`, '">', ']');
Let me know if it works, I built that for my forum
|