Сделал решение для anycode
Решение: convert_forum_url
хук №1: po_form_submitted
код хука:
define('FORUM_CONVERT_URL', 1);
хук №2: ps_handle_url_tag_end
код хука:
/*
* Convert forum url solution for PunBB 1.3
* (c) 2010 hcs
*
*/
// We are not smarter than the user!
if ( defined( 'FORUM_CONVERT_URL' ) && $full_url == $link ){
global $base_url, $forum_config, $forum_db, $forum_user, $forum_rewrite_rules;
// It's own forum!
if ( strpos($full_url, $base_url) !== false ) {
static $keys;
if ( !isset($keys) ) {
$keys = array();
if ( isset($forum_rewrite_rules) ) {
$keys['post'] = str_replace(array('/^', '$/i'),array('/','/i'), array_search('viewtopic.php?pid=$1', $forum_rewrite_rules));
$keys['topic-forum'] = str_replace(array('/^', '$/i'),array('/','/i'), array_search('view$1.php?id=$2', $forum_rewrite_rules));
$keys['topic-forum-p'] = str_replace(array('/^', '$/i'),array('/','/i'), array_search('view$1.php?id=$2&p=$4', $forum_rewrite_rules));
$keys['profile'] = str_replace(array('/^', '$/i',),array('/','/i'), array_search('profile.php?id=$1', $forum_rewrite_rules));
}
else {
$keys['post'] = '/viewtopic\.php\?pid=([0-9]+)/i';
$keys['topic-forum'] = '/view(forum|topic)\.php\?id=([0-9]+)/i';
$keys['topic-forum-p'] = '/view(forum|topic)\.php\?id=([0-9]+)&p=([0-9]+)/i';
$keys['profile'] = '/profile\.php\?id=([0-9]+)/i';
}
}
// Find param (post? topic? forum? profile?)
foreach ( $keys as $key_name => $rule )
{
// We have a match!
if ( preg_match($rule, $full_url ,$matches) )
{
switch ($key_name) {
case 'post':
$query = array(
'SELECT' => 'p.topic_id',
'FROM' => 'posts AS p',
'WHERE' => 'p.id='.intval($matches[1])
);
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
if ($forum_db->num_rows($result)) {
$topic_id = $forum_db->result($result);
// Fetch some info about the topic
$query = array(
'SELECT' => 't.subject',
'FROM' => 'topics AS t',
'JOINS' => array(
array(
'INNER JOIN' => 'forums AS f',
'ON' => 'f.id=t.forum_id'
),
array(
'LEFT JOIN' => 'forum_perms AS fp',
'ON' => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
)
),
'WHERE' => '(fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$topic_id.' AND t.moved_to IS NULL'
);
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
if ($forum_db->num_rows($result))
$link = forum_htmlencode($forum_db->result($result));
}
break;
case 'topic-forum':
case 'topic-forum-p':
if ($matches[1] == 'topic'){
// Fetch some info about the topic
$query = array(
'SELECT' => 't.subject',
'FROM' => 'topics AS t',
'JOINS' => array(
array(
'INNER JOIN' => 'forums AS f',
'ON' => 'f.id=t.forum_id'
),
array(
'LEFT JOIN' => 'forum_perms AS fp',
'ON' => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
)
),
'WHERE' => '(fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.intval($matches[2]).' AND t.moved_to IS NULL'
);
}
elseif($matches[1] == 'forum'){
// Fetch some info about the forum
$query = array(
'SELECT' => 'f.forum_name',
'FROM' => 'forums AS f',
'JOINS' => array(
array(
'LEFT JOIN' => 'forum_perms AS fp',
'ON' => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
)
),
'WHERE' => '(fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.intval($matches[2])
);
}
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
if ($forum_db->num_rows($result))
$link = forum_htmlencode($forum_db->result($result));
break;
case 'profile':
// Fetch info about the user whose profile we're viewing
$query = array(
'SELECT' => 'u.username',
'FROM' => 'users AS u',
'WHERE' => 'u.id='.intval($matches[1])
);
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
if ($forum_db->num_rows($result))
$link = forum_htmlencode($forum_db->result($result));
break;
}
}
}
}
}
Добавлено спустя 1 минуту 25 секунд:
Если будет работать без ошибок, оформлю в расширение.