Универсальный парсер

Универсальный парсер 0.7.2

Exile

Администратор
Ress Kent у вас идет три переменные подряд, которые разумеется переопределяются.
PHP:
$text = preg_replace("#<a href=\"http://www.imdb.com/title/(.*?)\".*?>.*?</a>#si", "[imdb]http://www.imdb.com/title/\\1[/imdb]", $text);
$text = preg_replace("#<a href=\"http://www.kinopoisk.ru/film/(.*?)\".*?>.*?</a>#si", "[kp]http://www.kinopoisk.ru/film/\\1[/kp]", $text);
Так сделайте.
 

Ress Kent

Пользователь
Exile Так пробывал, они вообще перестают работать, в общем для себя решил проблему.
Просто заменил оригинальную строчку на свои две в таком порядке

PHP:
    $text = preg_replace("#<a href=\"http://www.imdb.com/title/(.*?)\".*?>.*?</a>#si", "[imdb]http://www.imdb.com/title/\\1[/imdb]", $copy_release);
    $text = preg_replace("#<a href=\"http://www.kinopoisk.ru/film/(.*?)\".*?>.*?</a>#si", "[kp]http://www.kinopoisk.ru/film/\\1[/kp]", $copy_release);

Во всех релизах на руторе первым идет рейтинг imdb и за ним кинопоиск, в итоге обе строчки работают в такой последовательности. Остальные ссылки не парсяться, но они мне не нужны.
 

dexer7

Пользователь
Найти:
PHP:
$text = preg_replace("#<hr />#si", "[hr]", $text);
чуть поправив:
PHP:
$text = preg_replace("#<hr />#si", "[hr]", $copy_release);
переместить и вставить после:
PHP:
$copy_release = $copy_post[1];
и уже ниже этого:
PHP:
$text = preg_replace("#<hr />#si", "[hr]", $copy_release);
добавляем:
PHP:
 $text = preg_replace("#<a href=\"http://www.imdb.com/title/(.*?)\".*?>.*?</a>#si", "[imdb]http://www.imdb.com/title/\\1[/imdb]", $text);
$text = preg_replace("#<a href=\"http://www.kinopoisk.ru/film/(.*?)\".*?>.*?</a>#si", "[kp]http://www.kinopoisk.ru/film/\\1[/kp]", $text);
и все работает.
 

dexer7

Пользователь
Да еще забыл
найти:
PHP:
 $text = preg_replace("#<a href=\"(.*?)\".*?>(.*?)</a>#si", "[url=\\1]\\2[/url]", $copy_release);
и исправть на
PHP:
 $text = preg_replace("#<a href=\"(.*?)\".*?>(.*?)</a>#si", "[url=\\1]\\2[/url]", $text);
 
Последнее редактирование:

Ress Kent

Пользователь
Покажите как в итоге должно выглядеть
Сделал как написано, картинки и ссылки перестало парсить
Код с вашими изменениями
PHP:
    $copy_release = $copy_post[1];

    $text = preg_replace("#<a href=\"(.*?)\".*?>(.*?)</a>#si", "[url=\\1]\\2[/url]", $text);
    $text = preg_replace("#<img src=\"(\S*?)\" style=\"float:(.*?);\" />#si", "[img=\\2]\\1[/img]", $text);
    $text = preg_replace("#<img src=\"(\S*?)\" />#si", "[img]\\1[/img]", $text);
    $text = preg_replace("#<hr />#si", "[hr]", $copy_release);
    $copy_release = $copy_post[1];
    $text = preg_replace("#<hr />#si", "[hr]", $copy_release);
    $text = preg_replace("#<a href=\"http://www.imdb.com/title/(.*?)\".*?>.*?</a>#si", "[imdb]http://www.imdb.com/title/\\1[/imdb]", $text);
    $text = preg_replace("#<a href=\"http://www.kinopoisk.ru/film/(.*?)\".*?>.*?</a>#si", "[kp]http://www.kinopoisk.ru/film/\\1[/kp]", $text);

Мой рабочий на данный момент выглядит так

PHP:
    $copy_release = $copy_post[1];

    $text = preg_replace("#<a href=\"http://www.imdb.com/title/(.*?)\".*?>.*?</a>#si", "[imdb]http://www.imdb.com/title/\\1[/imdb]", $copy_release);
    $text = preg_replace("#<a href=\"http://www.kinopoisk.ru/film/(.*?)\".*?>.*?</a>#si", "[kp]http://www.kinopoisk.ru/film/\\1[/kp]", $copy_release);
    $text = preg_replace("#<img src=\"(\S*?)\" style=\"float:(.*?);\" />#si", "[img=\\2]\\1[/img]", $text);
    $text = preg_replace("#<img src=\"(\S*?)\" />#si", "[img]\\1[/img]", $text);
    $text = preg_replace("#<hr />#si", "[hr]", $text);
 
Последнее редактирование:

dexer7

Пользователь
Вот так:
PHP:
    $copy_release = $copy_post[1];
    $text = preg_replace("#<hr />#si", "[hr]", $copy_release);
    $text = preg_replace("#<a href=\"http://www.imdb.com/title/(.*?)\".*?>.*?</a>#si", "[imdb]\\1[/imdb]", $text);
    $text = preg_replace("#<a href=\"http://www.kinopoisk.ru/film/(.*?)\".*?>.*?</a>#si", "[kp]\\1[/kp]", $text);
    $text = preg_replace("#<a href=\"http://www.kinopoisk.ru/level/1/film/(.*?)\".*?>.*?</a>#si", "[kp]\\1[/kp]", $text);
    $text = preg_replace("#<a href=\"(.*?)\".*?>(.*?)</a>#si", "[url=\\1]\\2[/url]", $text);
    $text = preg_replace("#<img src=\"(\S*?)\" style=\"float:(.*?);\" />#si", "[img=\\2]\\1[/img]", $text);
    $text = preg_replace("#<img src=\"(\S*?)\" />#si", "[img]\\1[/img]", $text);
$copy_release должно быть в начале и одно.
 
Последнее редактирование:

Nikita11

Пользователь
Аналогичная проблема. Все сделал по инструкции. Но вместо написанного в инструкции
copy library/ajax/parser.php to library/ajax/parser.php скопировал в папку /ajax/ потому что нету папки library
так же и с copy library/includes/functions_parser.php, скопировал просто в папку includes

Все остальное сделал по инструкции.

Файлы прилагаю.:
<?php

define('BB_SCRIPT', 'ajax');
define('IN_AJAX', true);

$ajax = new ajax_common();

require('./common.php');

$ajax->init();

// Init userdata
$user->session_start();

// Exit if board is disabled via ON/OFF trigger or by admin
if ($ajax->action != 'manage_admin')
{
if ($bb_cfg['board_disable'])
{
$ajax->ajax_die($lang['BOARD_DISABLE']);
}
else if (file_exists(BB_DISABLED))
{
$ajax->ajax_die($lang['BOARD_DISABLE_CRON']);
}
}

// Load actions required modules
switch ($ajax->action)
{
case 'chat':
case 'view_post':
require(INC_DIR .'bbcode.php');
break;

case 'update_peers':
require(BB_ROOT .'mult/config.php');
require(BB_ROOT .'mult/func.php');
require(BB_ROOT .'mult/class.remote.php');
require(BB_ROOT .'mult/class.fbenc.php');
require(BB_ROOT .'mult/class.bittorrent.php');
require(BB_ROOT .'mult/class.getpeers.php');
break;

case 'posts':
case 'post_mod_comment':
require(INC_DIR . 'bbcode.php');
require(INC_DIR . 'functions_post.php');
require(INC_DIR . 'functions_admin.php');
break;

case 'view_torrent':
case 'mod_action':
case 'change_tor_status':
case 'gen_passkey':
require(ATTACH_DIR . 'attachment_mod.php');
require(INC_DIR . 'functions_torrent.php');
break;

case 'change_torrent':
require(ATTACH_DIR . 'attachment_mod.php');
require(INC_DIR . 'functions_torrent.php');
break;

case 'user_register':
require(INC_DIR . 'functions_validate.php');
break;

case 'manage_user':
case 'manage_admin':
require(INC_DIR . 'functions_admin.php');
break;

case 'group_membership':
case 'manage_group':
require(INC_DIR . 'functions_group.php');
break;

case 'sitemap';
require(INC_DIR .'class.sitemap.php');
break;

case 'pars':
require(INC_DIR . 'functions_parser.php');
break;

case 'autoparser':
require(INC_DIR .'class.snoopy.php');
break;
}

// Position in $ajax->valid_actions['xxx']
define('AJAX_AUTH', 0); // 'guest', 'user', 'mod', 'admin', 'super_admin'

$ajax->exec();

//
// Ajax
//
class ajax_common
{
var $request = array();
var $response = array();

var $valid_actions = array(
// ACTION NAME AJAX_AUTH
'edit_user_profile' => array('admin'),
'change_user_rank' => array('admin'),
'change_user_opt' => array('admin'),
'manage_user' => array('admin'),
'manage_admin' => array('admin'),
'sitemap' => array('admin'),
'autoparser' => array('admin'),

'mod_action' => array('mod'),
'topic_tpl' => array('mod'),
'group_membership' => array('mod'),
'post_mod_comment' => array('mod'),
'update_peers' => array('mod'),

'avatar' => array('user'),
'gen_passkey' => array('user'),
'change_torrent' => array('user'),
'change_tor_status' => array('user'),
'manage_group' => array('user'),
'pars' => array('user'),
'user_stats' => array('user'),
'users_today' => array('user'),

'view_post' => array('guest'),
'view_torrent' => array('guest'),
'user_register' => array('guest'),
'posts' => array('guest'),
'index_data' => array('guest'),
'chat' => array('guest'),
);

var $action = null;

/**
* Constructor
*/
function ajax_common()
{
ob_start(array(&$this, 'ob_handler'));
header('Content-Type: text/plain');
}

/**
* Perform action
*/
function exec()
{
global $lang;

// Exit if we already have errors
if (!empty($this->response['error_code']))
{
$this->send();
}

// Check that requested action is valid
$action = $this->action;

if (!$action || !is_string($action))
{
$this->ajax_die('no action specified');
}
elseif (!$action_params =& $this->valid_actions[$action])
{
$this->ajax_die('invalid action: ' . $action);
}

// Auth check
switch ($action_params[AJAX_AUTH])
{
// GUEST
case 'guest':
break;

// USER
case 'user':
if (IS_GUEST)
{
$this->ajax_die($lang['NEED_TO_LOGIN_FIRST']);
}
break;

// MOD
case 'mod':
if (!IS_AM)
{
$this->ajax_die($lang['ONLY_FOR_MOD']);
}
$this->check_admin_session();
break;

// ADMIN
case 'admin':
if (!IS_ADMIN)
{
$this->ajax_die($lang['ONLY_FOR_ADMIN']);
}
$this->check_admin_session();
break;

// SUPER_ADMIN
case 'super_admin':
if (!IS_SUPER_ADMIN)
{
$this->ajax_die($lang['ONLY_FOR_SUPER_ADMIN']);
}
$this->check_admin_session();
break;

default:
trigger_error("invalid auth type for $action", E_USER_ERROR);
}

// Run action
$this->$action();

// Send output
$this->send();
}

/**
* Exit on error
*/
function ajax_die($error_msg, $error_code = E_AJAX_GENERAL_ERROR)
{
$this->response['error_code'] = $error_code;
$this->response['error_msg'] = $error_msg;

$this->send();
}

/**
* Initialization
*/
function init()
{
$this->request = $_POST;
$this->action =& $this->request['action'];
}

/**
* Send data
*/
function send()
{
$this->response['action'] = $this->action;

if (DBG_USER && SQL_DEBUG && !empty($_COOKIE['sql_log']))
{
$this->response['sql_log'] = get_sql_log();
}

// sending output will be handled by $this->ob_handler()
exit();
}

/**
* OB Handler
*/
function ob_handler($contents)
{
if (DBG_USER)
{
if ($contents)
{
$this->response['raw_output'] = $contents;
}
}

$response_js = bb_json_encode($this->response);

if (GZIP_OUTPUT_ALLOWED && !defined('NO_GZIP'))
{
if (UA_GZIP_SUPPORTED && strlen($response_js) > 2000)
{
header('Content-Encoding: gzip');
$response_js = gzencode($response_js, 1);
}
}

return $response_js;
}

/**
* Admin session
*/
function check_admin_session()
{
global $user;

if (!$user->data['session_admin'])
{
if (empty($this->request['user_password']))
{
$this->prompt_for_password();
}
else
{
$login_args = array(
'login_username' => $user->data['username'],
'login_password' => $_POST['user_password'],
);
if (!$user->login($login_args, true))
{
$this->ajax_die('Wrong password');
}
}
}
}

/**
* Prompt for password
*/
function prompt_for_password()
{
$this->response['prompt_password'] = 1;
$this->send();
}

/**
* Prompt for confirmation
*/
function prompt_for_confirm($confirm_msg)
{
if (empty($confirm_msg)) $this->ajax_die('false');

$this->response['prompt_confirm'] = 1;
$this->response['confirm_msg'] = $confirm_msg;
$this->send();
}

/**
* Verify mod rights
*/
function verify_mod_rights($forum_id)
{
global $userdata, $lang;

$is_auth = auth(AUTH_MOD, $forum_id, $userdata);

if (!$is_auth['auth_mod'])
{
$this->ajax_die($lang['ONLY_FOR_MOD']);
}
}

function edit_user_profile()
{
require(AJAX_DIR . 'edit_user_profile.php');
}

function change_user_rank()
{
require(AJAX_DIR . 'change_user_rank.php');
}

function change_user_opt()
{
require(AJAX_DIR . 'change_user_opt.php');
}

function gen_passkey()
{
require(AJAX_DIR . 'gen_passkey.php');
}

function group_membership()
{
require(AJAX_DIR . 'group_membership.php');
}

function manage_group()
{
require(AJAX_DIR . 'edit_group_profile.php');
}

function pars()
{
require(AJAX_DIR . 'parser.php');
}

function post_mod_comment()
{
require(AJAX_DIR . 'post_mod_comment.php');
}

function view_post()
{
require(AJAX_DIR . 'view_post.php');
}

function change_tor_status()
{
require(AJAX_DIR . 'change_tor_status.php');
}

function change_torrent()
{
require(AJAX_DIR . 'change_torrent.php');
}

function view_torrent()
{
require(AJAX_DIR . 'view_torrent.php');
}

function user_register()
{
require(AJAX_DIR . 'user_register.php');
}

function mod_action()
{
require(AJAX_DIR . 'mod_action.php');
}

function posts()
{
require(AJAX_DIR . 'posts.php');
}

function manage_user()
{
require(AJAX_DIR . 'manage_user.php');
}

function manage_admin()
{
require(AJAX_DIR . 'manage_admin.php');
}

function topic_tpl()
{
require(AJAX_DIR . 'topic_tpl.php');
}

function index_data()
{
require(AJAX_DIR . 'index_data.php');
}

function avatar()
{
require(AJAX_DIR . 'avatar.php');
}

function sitemap()
{
require(AJAX_DIR .'sitemap.php');
}

function user_stats()
{
global $bb_cfg, $lang;
$user_id = (int) $this->request['user_id'];
$btu = get_bt_userdata($user_id);

$ratio = get_bt_ratio($btu);
$u_up_total = humn_size($btu['u_up_total']);
$u_up_bonus = humn_size($btu['u_up_bonus']);
$u_up_release = humn_size($btu['u_up_release']);
$u_down_total = humn_size($btu['u_down_total']);
if ($btu['u_down_total'] < MIN_DL_FOR_RATIO) $ratio = '---';
############ Закончили ###################
############ Выводим данные ##############
$this->response['post_id'] = (int) $this->request['post_id'];
$this->response['html'] = '
<table class="ratio1 table-wrap bCenter borderless w100" cellspacing="1" style="border-style: inset;">
<tr class="row6 tCenter">
<td colspan="2" class="bold">Статистика</td>
</tr>
<tr class="row5 seed">
<td class="med tLeft">&nbsp;'.$lang['USER_RATIO'].':</p></td>
<td class="bold tLeft">&nbsp;'.$ratio.'</td>
</tr>
<tr class="row5 leech">
<td class="med tLeft">&nbsp;<a class="leechsmall" href="search.php?dlu='.$user_id.'&dlc=1#results">'.$lang['DOWNLOADED'].'</a>:&nbsp;</td>
<td class="bold tLeft">&nbsp;'.$u_down_total.'</td>
</tr>
<tr class="row1 seed">
<td class="med tLeft">&nbsp;'.$lang['UPLOADED'].':&nbsp;</p></td>
<td class="bold tLeft">&nbsp;'.$u_up_total.'</td>
</tr>
<tr class="row5 seed">
<td class="med tLeft">&nbsp;<i><a class="seedsmall" href="tracker.php?rid='.$user_id.'#results">'.$lang['RELEASED'].'</a>:</i>&nbsp;</td>
<td class="tLeft">&nbsp;<i>'.$u_up_release.'</i></td>
</tr>
<tr class="row1 dlWill">
<td class="med tLeft">&nbsp;<i><a class="small dlWill" href="viewtopic.php?t=5">'.$lang['BONUS'].'</a>:</i>&nbsp;</td>
<td class="tLeft">&nbsp;<i>'.$u_up_bonus.'</i></td>
</tr>
</table>
';
}

function users_today()
{
require(AJAX_DIR .'users_today.php');
}

function update_peers()
{
global $db, $cfg_ann, $lang;
$seed = $leech = 0;
$topic_id = (int) $this->request['topic_id'];
$row = DB()->fetch_row("SELECT info_hash FROM ".BB_BT_TORRENTS." WHERE topic_id = ".$topic_id." LIMIT 1");
if($row && $info_hash = $row['info_hash'])
{
$gp = new getpeers();
$data = $gp->get_peers(1, serialize($cfg_ann), bin2hex($info_hash), false);
foreach($data['peers'] as $announce)
{
$seed = (int) $seed + $announce[0];
$leech = (int) $leech + $announce[1];
}
//DB()->query("UPDATE ".BB_BT_TORRENTS." SET last_update = ".$data['last_update'].", ext_seeder = ".$seed.", ext_leecher = ".$leech." WHERE info_hash = '".DB()->escape($info_hash)."'");
DB()->query("UPDATE ".BB_BT_TORRENTS." SET last_update = ".$data['last_update'].", ext_seeder = ".$seed.", ext_leecher = ".$leech." WHERE topic_id = $topic_id");
$html = '<div class="mrg_4 pad_4">';
$html .= '<span class="seed">'. $lang['SEEDERS'] .':&nbsp; <b>'. $seed .'</b> &nbsp;[&nbsp; 0 KB/s &nbsp;]</span> &nbsp;';
$html .= '<span class="leech">'. $lang['LEECHERS'] .':&nbsp; <b>'. $leech .'</b> &nbsp;[&nbsp; 0 KB/s &nbsp;]</span> &nbsp;';
$html .= '</div>';
}
$this->response['html'] = $html;
$this->response['topic_id'] = $topic_id;
}

function autoparser()
{
global $lang, $bb_cfg;

$mode = (string) $this->request['mode'];

if($mode == 'cookie')
{
$login = (string) DB()->escape($this->request['login']);
@$cookie = (string) urldecode($this->request['cookie']);
$id = (int) $this->request['id'];

$row = DB()->fetch_row("SELECT * FROM parser_users WHERE login = '$login'");
if(!$row) bb_die('Такой учетки нет в базе');

$snoopy = new Snoopy;
$snoopy->host = "rutracker.org";
$snoopy->agent = "opera";
$snoopy->referer = "

Please Login or Register to view hidden text.

";
$snoopy->rawheaders["Pragma"] = "no-cache";

$snoopy->cookies['bb_data'] = $cookie;
$snoopy->fetch("

Please Login or Register to view hidden text.

");

if(preg_match('#privmsg#', $snoopy->results))
{
if($cookie != $row['cookie'])
{
DB()->query("UPDATE parser_users SET cookie = '$cookie', time = ". TIMENOW ." WHERE login = '$login' AND id = $id");
}
$this->response['html'] = '<img src="'. make_url('images/good.gif') .'">';
$this->response['time'] = '<span class="tr_tm">только что</span>';
}
else
{
$this->response['html'] = '<img src="'. make_url('images/bad.gif') .'">';
}

$this->response['cookie'] = $cookie;
$this->response['login'] = $login;
}
elseif($mode == 'pass')
{
$login = (string) DB()->escape($this->request['login']);
$id = (int) $this->request['id'];
$pass = (string) $this->request['pass'];
$row = DB()->fetch_row("SELECT * FROM parser_users WHERE login = '$login' AND id = $id");
if(!$row) $this->ajax_die('Такой учетки нет в базе');

DB()->query("UPDATE parser_users SET pass = '$pass' WHERE login = '$login' AND id = $id");
}
elseif($mode == 'user_del')
{
$login = (string) DB()->escape($this->request['login']);
$id = (int) $this->request['id'];

if(!IS_SUPER_ADMIN) $this->ajax_die($lang['ONLY_FOR_SUPER_ADMIN']);
if (empty($this->request['confirmed'])) $this->prompt_for_confirm($lang['USER_DELETE_CONFIRM']);

DB()->query("DELETE FROM parser_users WHERE login = '$login' AND id = $id");

$this->response['id'] = $id;
}
elseif($mode == 'forum_del')
{
$from_url = (string) urldecode($this->request['from_url']);

DB()->query("DELETE FROM parser_from_urls WHERE from_url = '$from_url'");
}
elseif($mode == 'change_user_id')
{
$new_user = (string) $this->request['user'];
$url = (string) $this->request['url'];

if(!$url || !$new_user) $this->ajax_die('false id');
if(($new_user != BOT_UID) && !$new = get_userdata($new_user)) $this->ajax_die($lang['NO_USER_ID_SPECIFIED']);
if($new) $new_user = $new['user_id'];

DB()->query("UPDATE parser_from_urls SET user_id = $new_user WHERE from_url = '$url'");

$this->response['user'] = ($new) ? profile_url($new) : 'Bot';
$this->response['url'] = md5($url);
}
elseif($mode == 'all_status')
{
$from_url = (string) urldecode($this->request['from_url']);
if(!$from_url) $this->ajax_die('false id');

$row = DB()->fetch_row("SELECT * FROM parser_from_urls WHERE from_url = '$from_url'");
if(!$row) $this->ajax_die('Такой записи нет в базе');

$all_status = (int) !$row['all_status'];

DB()->query("UPDATE parser_from_urls SET all_status = $all_status WHERE from_url = '$from_url'");
}
elseif($mode == 'all_forum')
{
$from_url = (string) urldecode($this->request['from_url']);
if(!$from_url) $this->ajax_die('false id');

$row = DB()->fetch_row("SELECT * FROM parser_from_urls WHERE from_url = '$from_url'");
if(!$row) $this->ajax_die('Такой записи нет в базе');

$all_forum = (int) !$row['all_forum'];

DB()->query("UPDATE parser_from_urls SET all_forum = $all_forum WHERE from_url = '$from_url'");
}
elseif($mode == 'active')
{
$from_url = (string) urldecode($this->request['from_url']);
if(!$from_url) $this->ajax_die('false id');

$row = DB()->fetch_row("SELECT * FROM parser_from_urls WHERE from_url = '$from_url'");
if(!$row) $this->ajax_die('Такой записи нет в базе');

$active = (int) !$row['active'];

DB()->query("UPDATE parser_from_urls SET active = $active WHERE from_url = '$from_url'");
}

$this->response['mode'] = $mode;
}

function chat()
{
require(AJAX_DIR .'chat.php');
}
}

<?php

define('IN_FORUM', true);
define('BB_SCRIPT', 'posting');
define('BB_ROOT', './');
require(BB_ROOT ."common.php");
require(INC_DIR .'bbcode.php');
require(INC_DIR .'functions_post.php');
require(ATTACH_DIR .'attachment_mod.php');

$page_cfg['load_tpl_vars'] = array('post_icons');

$submit = (bool) @$_REQUEST['post'];
$preview = (bool) @$_REQUEST['preview'];
$delete = (bool) @$_REQUEST['delete'];

$forum_id = (int) @$_REQUEST[POST_FORUM_URL];
$topic_id = (int) @$_REQUEST[POST_TOPIC_URL];
$post_id = (int) @$_REQUEST[POST_POST_URL];

$mode = (string) @$_REQUEST['mode'];

$confirm = isset($_POST['confirm']);

$refresh = $preview;
$orig_word = $replacement_word = array();

// Set topic type
$topic_type = (@$_POST['topictype']) ? (int) $_POST['topictype'] : POST_NORMAL;
$topic_type = in_array($topic_type, array(POST_NORMAL, POST_STICKY, POST_ANNOUNCE)) ? $topic_type : POST_NORMAL;

$selected_rg = 0;
$switch_rg_sig = 0;
$switch_poster_rg_sig = 0;

if ($mode == 'smilies')
{
generate_smilies('window');
exit;
}

$tracking_topics = get_tracks('topic');
$tracking_forums = get_tracks('forum');

// Start session management
$user->session_start();

set_die_append_msg($forum_id, $topic_id);

// What auth type do we need to check?
$is_auth = array();
switch ($mode)
{
case 'newtopic':
case 'new_rel':
if (bf($userdata['user_opt'], 'user_opt', 'dis_topic'))
{
bb_die($lang['RULES_POST_CANNOT']);
}
if ($topic_type == POST_ANNOUNCE)
{
$is_auth_type = 'auth_announce';
}
elseif ($topic_type == POST_STICKY)
{
$is_auth_type = 'auth_sticky';
}
else
{
$is_auth_type = 'auth_post';
}
break;

case 'reply':
case 'quote':
if (bf($userdata['user_opt'], 'user_opt', 'dis_post'))
{
bb_die($lang['RULES_REPLY_CANNOT']);
}
$is_auth_type = 'auth_reply';
break;

case 'editpost':
if (bf($userdata['user_opt'], 'user_opt', 'dis_post_edit'))
{
bb_die($lang['RULES_EDIT_CANNOT']);
}
$is_auth_type = 'auth_edit';
break;

case 'delete':
$is_auth_type = 'auth_delete';
break;

default:
bb_die($lang['NO_POST_MODE']);
break;
}

// Here we do various lookups to find topic_id, forum_id, post_id etc.
// Doing it here prevents spoofing (eg. faking forum_id, topic_id or post_id
$error_msg = '';
$post_data = array();
switch ($mode)
{
case 'newtopic':
case 'new_rel':
if (!$forum_id)
{
bb_die($lang['FORUM_NOT_EXIST']);
}
$sql = "SELECT * FROM ". BB_FORUMS ." WHERE forum_id = $forum_id LIMIT 1";
break;

case 'reply':
if (!$topic_id)
{
bb_die($lang['NO_TOPIC_ID']);
}
$sql = "SELECT f.*, t.*
FROM ". BB_FORUMS ." f, ". BB_TOPICS ." t
WHERE t.topic_id = $topic_id
AND f.forum_id = t.forum_id
LIMIT 1";
break;

case 'quote':
case 'editpost':
case 'delete':
if (!$post_id)
{
bb_die($lang['NO_POST_ID']);
}

$select_sql = 'SELECT f.*, t.*, p.*';
$select_sql .= (!$submit) ? ', pt.*, u.username, u.user_id' : '';

$from_sql = "FROM ". BB_POSTS ." p, ". BB_TOPICS ." t, ". BB_FORUMS ." f";
$from_sql .= (!$submit) ? ", " . BB_POSTS_TEXT . " pt, " . BB_USERS . " u" : '';

$where_sql = "
WHERE p.post_id = $post_id
AND t.topic_id = p.topic_id
AND f.forum_id = p.forum_id
";
$where_sql .= (!$submit) ? "
AND pt.post_id = p.post_id
AND u.user_id = p.poster_id
" : '';

$sql = "$select_sql $from_sql $where_sql LIMIT 1";
break;

default:
bb_die($lang['NO_VALID_MODE']);
}

if ($post_info = DB()->fetch_row($sql))
{
$forum_id = $post_info['forum_id'];
$forum_name = $post_info['forum_name'];

$is_auth = auth(AUTH_ALL, $forum_id, $userdata, $post_info);

if ($post_info['forum_status'] == FORUM_LOCKED && !$is_auth['auth_mod'])
{
bb_die($lang['FORUM_LOCKED']);
}
elseif ($mode != 'newtopic' && $mode != 'new_rel' && $post_info['topic_status'] == TOPIC_LOCKED && !$is_auth['auth_mod'])
{
bb_die($lang['TOPIC_LOCKED']);
}

if ($mode == 'editpost' || $mode == 'delete')
{
$topic_id = $post_info['topic_id'];

$post_data['poster_post'] = ($post_info['poster_id'] == $userdata['user_id']);
$post_data['first_post'] = ($post_info['topic_first_post_id'] == $post_id);
$post_data['last_post'] = ($post_info['topic_last_post_id'] == $post_id);
$post_data['last_topic'] = ($post_info['forum_last_post_id'] == $post_id);
$post_data['topic_type'] = $post_info['topic_type'];
$post_data['poster_id'] = $post_info['poster_id'];

$selected_rg = $post_info['poster_rg_id'];
$switch_rg_sig = ($post_info['attach_rg_sig']) ? true : false;

// Can this user edit/delete the post?
if ($post_info['poster_id'] != $userdata['user_id'] && !$is_auth['auth_mod'])
{
$auth_err = ($delete || $mode == 'delete') ? $lang['DELETE_OWN_POSTS'] : $lang['EDIT_OWN_POSTS'];
}
elseif (!$post_data['last_post'] && !$is_auth['auth_mod'] && ($mode == 'delete' || $delete))
{
$auth_err = $lang['CANNOT_DELETE_REPLIED'];
}

if (isset($auth_err)) bb_die($auth_err);
}
else
{
if ($mode == 'quote')
{
$topic_id = $post_info['topic_id'];
}
if ($mode == 'newtopic')
{
$post_data['topic_type'] = POST_NORMAL;
}
$post_data['first_post'] = ($mode == 'newtopic');
$post_data['last_post'] = false;
}
}
else
{
bb_die($lang['NO_SUCH_POST']);
}

// The user is not authed, if they're not logged in then redirect
// them, else show them an error message
if (!$is_auth[$is_auth_type])
{
if (!IS_GUEST)
{
bb_die(sprintf($lang['SORRY_'. strtoupper($is_auth_type)], $is_auth[$is_auth_type .'_type']));
}

switch ($mode)
{
case 'newtopic':
$redirect = "mode=newtopic&f=$forum_id";
break;
case 'new_rel':
$redirect = "mode=new_rel&f=$forum_id";
break;
case 'reply':
$redirect = "mode=reply&t=$topic_id";
break;
case 'quote':
case 'editpost':
$redirect = "mode=quote&p=$post_id";
break;
default:
$redirect = '';
}
redirect(LOGIN_URL . "?redirect=/". POSTING_URL ."?$redirect");
}

if ($mode == 'new_rel')
{
if ($tor_status = join(',', $bb_cfg['tor_cannot_new']))
{
$sql = DB()->fetch_rowset("SELECT t.topic_title, t.topic_id, tor.tor_status
FROM ". BB_BT_TORRENTS ." tor, ". BB_TOPICS ." t
WHERE poster_id = {$userdata['user_id']}
AND tor.topic_id = t.topic_id
AND tor.tor_status IN ($tor_status)
ORDER BY tor.reg_time
");

$topics = '';
foreach($sql as $row)
{
$topics .= $bb_cfg['tor_icons'][$row['tor_status']] .'<a href="'. TOPIC_URL . $row['topic_id'] .'">'. $row['topic_title'] .'</a><div class="spacer_12"></div>';
}
if ($topics) bb_die($topics . $lang['UNEXECUTED_RELEASE']);
}
require(INC_DIR .'posting_tpl.php');
exit;
}

// Notify
if ($submit || $refresh)
{
$notify_user = (int) !empty($_POST['notify']);
}
else
{
$notify_user = bf($userdata['user_opt'], 'user_opt', 'user_notify');

if (!IS_GUEST && $mode != 'newtopic' && !$notify_user)
{
$notify_user = (int) DB()->fetch_row("SELECT topic_id FROM ". BB_TOPICS_WATCH ." WHERE topic_id = $topic_id AND user_id = ". $userdata['user_id']);
}
}

$update_post_time = !empty($_POST['update_post_time']);

execute_posting_attachment_handling();

// если за время пока вы писали ответ, в топике появились новые сообщения, перед тем как ваше сообщение будет отправлено, выводится предупреждение с обзором этих сообщений
$topic_has_new_posts = false;

if (!IS_GUEST && $mode != 'newtopic' && ($submit || $preview || $mode == 'quote' || $mode == 'reply') && isset($_COOKIE[COOKIE_TOPIC]))
{
if ($topic_last_read = max(intval(@$tracking_topics[$topic_id]), intval(@$tracking_forums[$forum_id])))
{
$sql = "SELECT p.*, pt.post_text, u.username, u.user_rank
FROM ". BB_POSTS ." p, ". BB_POSTS_TEXT ." pt, ". BB_USERS ." u
WHERE p.topic_id = ". (int) $topic_id ."
AND u.user_id = p.poster_id
AND pt.post_id = p.post_id
AND p.post_time > $topic_last_read
ORDER BY p.post_time
LIMIT ". $bb_cfg['posts_per_page'];

if ($rowset = DB()->fetch_rowset($sql))
{
$topic_has_new_posts = true;

foreach ($rowset as $i => $row)
{
$template->assign_block_vars('new_posts', array(
'ROW_CLASS' => !($i % 2) ? 'row1' : 'row2',
'POSTER' => profile_url($row),
'POSTER_NAME_JS' => addslashes($row['username']),
'POST_DATE' => bb_date($row['post_time'], $bb_cfg['post_date_format']),
'MESSAGE' => get_parsed_post($row),
));
}
$template->assign_vars(array(
'TPL_SHOW_NEW_POSTS' => true,
));

set_tracks(COOKIE_TOPIC, $tracking_topics, $topic_id);
unset($rowset);
}
}
}

// --------------------
// What shall we do?
//
if ( ( $delete || $mode == 'delete' ) && !$confirm )
{
if (isset($_POST['cancel']))
{
redirect(POST_URL . "$post_id#$post_id");
}
//
// Confirm deletion
//
$hidden_fields = array(
'p' => $post_id,
'mode' => 'delete',
);

print_confirmation(array(
'QUESTION' => $lang['CONFIRM_DELETE'],
'FORM_ACTION' => POSTING_URL,
'HIDDEN_FIELDS' => build_hidden_fields($hidden_fields),
));
}
elseif ( ($submit || $confirm) && !$topic_has_new_posts )
{
//
// Submit post (newtopic, edit, reply, etc.)
//
$return_message = '';
$return_meta = '';

switch ($mode)
{
case 'editpost':
case 'newtopic':
case 'reply':
$username = ( !empty($_POST['username']) ) ? clean_username($_POST['username']) : '';
$subject = ( !empty($_POST['subject']) ) ? clean_title($_POST['subject']) : '';
$message = ( !empty($_POST['message']) ) ? prepare_message($_POST['message']) : '';
$attach_rg_sig = (isset($_POST['attach_rg_sig']) && isset($_POST['poster_rg']) && $_POST['poster_rg'] != -1) ? 1 : 0;
$poster_rg_id = (isset($_POST['poster_rg']) && $_POST['poster_rg'] != -1) ? (int) $_POST['poster_rg'] : 0;

prepare_post($mode, $post_data, $error_msg, $username, $subject, $message);

if (!$error_msg)
{
$topic_type = ( isset($post_data['topic_type']) && $topic_type != $post_data['topic_type'] && !$is_auth['auth_sticky'] && !$is_auth['auth_announce'] ) ? $post_data['topic_type'] : $topic_type;

submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $topic_type, DB()->escape($username), DB()->escape($subject), DB()->escape($message), $update_post_time, $poster_rg_id, $attach_rg_sig);

$post_url = POST_URL ."$post_id#$post_id";
$post_msg = ($mode == 'editpost') ? $lang['EDITED']: $lang['STORED'];
$onclick = ($mode == 'editpost') ? 'onclick="return post2url(this.href);"': '';
$return_message .= $post_msg .'<br /><br />
<a '. $onclick .' href="'. $post_url .'" >'. $lang['POST_RETURN'] .'</a>
';
}
break;

case 'delete':
require_once(INC_DIR .'functions_admin.php');
delete_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id);
break;
}

if (!$error_msg)
{
if (!in_array($mode, array('editpost', 'delete')))
{
$user_id = ( $mode == 'reply' || $mode == 'newtopic' ) ? $userdata['user_id'] : $post_data['poster_id'];
update_post_stats($mode, $post_data, $forum_id, $topic_id, $post_id, $user_id);
}
$attachment_mod['posting']->insert_attachment($post_id);

if (!$error_msg)
{
user_notification($mode, $post_data, $post_info['topic_title'], $forum_id, $topic_id, $notify_user);
}

if ($mode == 'newtopic' || $mode == 'reply')
{
set_tracks(COOKIE_TOPIC, $tracking_topics, $topic_id);
}

// Постеры раздач
if ($bb_cfg['last_added'])
{
if ($mode == 'newtopic' && defined('TORRENT_ATTACH_ID') || defined('TORRENT_ATTACH_ID') && $bb_cfg['bt_newtopic_auto_reg'] && !$error_msg)
{
$row = DB()->fetch_row("SELECT post_text FROM ". BB_POSTS_TEXT ." WHERE post_id = $post_id");
preg_match_all('/\[gposter=right\](.*?)\[\/gposter\]/i', $row['post_text'], $poster7, PREG_SET_ORDER);
preg_match_all('/\[gposter=left\](.*?)\[\/gposter\]/i', $row['post_text'], $poster6, PREG_SET_ORDER);
preg_match_all('/\[gposter\](.*?)\[\/gposter\]/i', $row['post_text'], $poster5, PREG_SET_ORDER);
preg_match_all('/\[poster\](.*?)\[\/poster\]/i', $row['post_text'], $poster4, PREG_SET_ORDER);
preg_match_all('/\[img=right\](.*?)\[\/img\]/i', $row['post_text'], $poster3, PREG_SET_ORDER);
preg_match_all('/\[img=left\](.*?)\[\/img\]/i', $row['post_text'], $poster2, PREG_SET_ORDER);
preg_match_all('/\[img\](.*?)\[\/img\]/i', $row['post_text'], $poster1, PREG_SET_ORDER);
$url = '';
if (isset($poster7[0][1])) $url = $poster7[0][1];
elseif (isset($poster6[0][1])) $url = $poster6[0][1];
elseif (isset($poster5[0][1])) $url = $poster5[0][1];
elseif (isset($poster4[0][1])) $url = $poster4[0][1];
elseif (isset($poster3[0][1])) $url = $poster3[0][1];
elseif (isset($poster2[0][1])) $url = $poster2[0][1];
elseif (isset($poster1[0][1])) $url = $poster1[0][1];
DB()->query("UPDATE ". BB_TOPICS ." SET topic_image = '$url' WHERE topic_id = $topic_id ");
CACHE('lenta')->rm();
}
}

if (defined('TORRENT_ATTACH_ID') && $bb_cfg['bt_newtopic_auto_reg'] && !$error_msg)
{
include(INC_DIR .'functions_torrent.php');
if (!DB()->fetch_row("SELECT attach_id FROM ". BB_BT_TORRENTS ." WHERE attach_id = ". TORRENT_ATTACH_ID))
{
if ($bb_cfg['premod'])
{
// Получение списка id форумов начиная с parent
$forum_parent = $forum_id;
if ($post_info['forum_parent']) $forum_parent = $post_info['forum_parent'];
$count_rowset = DB()->fetch_rowset("SELECT forum_id FROM ". BB_FORUMS ." WHERE forum_parent = $forum_parent");
$sub_forums = array();
foreach ($count_rowset as $count_row)
{
if ($count_row['forum_id'] != $forum_id) $sub_forums[] = $count_row['forum_id'];
}
$sub_forums[] = $forum_id;
$sub_forums = join(',', $sub_forums);
// Подсчет проверенных релизов в форумах раздела
$count_checked_releases = DB()->fetch_row("
SELECT COUNT(*) AS checked_releases
FROM ". BB_BT_TORRENTS ."
WHERE poster_id = ". $userdata['user_id'] ."
AND forum_id IN($sub_forums)
AND tor_status IN(". TOR_APPROVED .",". TOR_DOUBTFUL .",". TOR_TMP .")
LIMIT 1
", 'checked_releases');
if ($count_checked_releases || IS_AM)
{
tracker_register(TORRENT_ATTACH_ID, 'newtopic', TOR_NOT_APPROVED);
}
else
{
tracker_register(TORRENT_ATTACH_ID, 'newtopic', TOR_PREMOD);
}
}
else tracker_register(TORRENT_ATTACH_ID, 'newtopic', TOR_NOT_APPROVED);
}
}

// Update atom feed
update_atom('topic', $topic_id);

if ($mode == 'reply' && $post_info['topic_status'] == TOPIC_LOCKED)
{
$locked_warn = '
<div class="warnColor1">
<b>'. $lang['LOCKED_WARN'] .'</b>
</div>
<br /><hr /><br />
';
$return_message = $locked_warn . $return_message;
}

bb_die($return_message);
}
}

if ($refresh || $error_msg || ($submit && $topic_has_new_posts))
{
$username = ( !empty($_POST['username']) ) ? clean_username($_POST['username']) : '';
$subject = ( !empty($_POST['subject']) ) ? clean_title($_POST['subject']) : '';
$message = ( !empty($_POST['message']) ) ? prepare_message($_POST['message']) : '';

if ($preview)
{
$preview_subject = $subject;
$preview_username = $username;
$preview_message = htmlCHR($message, false, ENT_NOQUOTES);
$preview_message = bbcode2html($preview_message);

$template->assign_vars(array(
'TPL_PREVIEW_POST' => true,
'TOPIC_TITLE' => wbr($preview_subject),
'POST_SUBJECT' => $preview_subject,
'POSTER_NAME' => $preview_username,
'POST_DATE' => bb_date(TIMENOW),
'PREVIEW_MSG' => $preview_message,
));
}
}
else
{
// User default entry point
if ( $mode == 'newtopic' )
{
$username = ($userdata['session_logged_in']) ? $userdata['username'] : '';
$subject = $message = '';
}
elseif ( $mode == 'reply' )
{
$username = ( $userdata['session_logged_in'] ) ? $userdata['username'] : '';
$subject = $message = '';
}
elseif ( $mode == 'quote' || $mode == 'editpost' )
{
$subject = ( $post_data['first_post'] ) ? $post_info['topic_title'] : '';
$message = $post_info['post_text'];

if ( $mode == 'quote' )
{
if (!defined('WORD_LIST_OBTAINED'))
{
$orig_word = array();
$replace_word = array();
obtain_word_list($orig_word, $replace_word);
define('WORD_LIST_OBTAINED', TRUE);
}

if ($post_info['post_attachment'] && !IS_AM) $message = $post_info['topic_title'];
$quote_username = ($post_info['post_username'] != '') ? $post_info['post_username'] : $post_info['username'];
$message = '';

// hide user passkey
$message = preg_replace('#(?<=\?uk=)[a-zA-Z0-9]{10}(?=&)#', 'passkey', $message);
// hide sid
$message = preg_replace('#(?<=[\?&;]sid=)[a-zA-Z0-9]{12}#', 'sid', $message);

if (!empty($orig_word))
{
$subject = (!empty($subject)) ? preg_replace($orig_word, $replace_word, $subject) : '';
$message = (!empty($message)) ? preg_replace($orig_word, $replace_word, $message) : '';
}

if ( !preg_match('/^Re:/', $subject) && strlen($subject) > 0 )
{
$subject = 'Re: ' . $subject;
}

$mode = 'reply';
}
else
{
$username = ( $post_info['user_id'] == GUEST_UID && !empty($post_info['post_username']) ) ? $post_info['post_username'] : '';
}
}
}

if ($error_msg)
{
$template->assign_vars(array(
'ERROR_MESSAGE' => $error_msg,
));
}

if (IS_GUEST || ($mode == 'editpost' && $post_info['poster_id'] == GUEST_UID))
{
$template->assign_var('POSTING_USERNAME');
}

// Notify checkbox
if (!IS_GUEST)
{
if ($mode != 'editpost' || ($mode == 'editpost' && $post_info['poster_id'] != GUEST_UID))
{
$template->assign_var('SHOW_NOTIFY_CHECKBOX');
}
}

// Topic type selection
$topic_type_toggle = '';
if ( $mode == 'newtopic' || ( $mode == 'editpost' && $post_data['first_post'] ) )
{
$template->assign_block_vars('switch_type_toggle', array());

if( $is_auth['auth_sticky'] )
{
$topic_type_toggle .= '<label><input type="radio" name="topictype" value="' . POST_STICKY . '"';
if ( isset($post_data['topic_type']) && ($post_data['topic_type'] == POST_STICKY || $topic_type == POST_STICKY) )
{
$topic_type_toggle .= ' checked="checked"';
}
$topic_type_toggle .= ' /> ' . $lang['POST_STICKY'] . '</label>&nbsp;&nbsp;';
}

if( $is_auth['auth_announce'] )
{
$topic_type_toggle .= '<label><input type="radio" name="topictype" value="' . POST_ANNOUNCE . '"';
if ( isset($post_data['topic_type']) && ($post_data['topic_type'] == POST_ANNOUNCE || $topic_type == POST_ANNOUNCE) )
{
$topic_type_toggle .= ' checked="checked"';
}
$topic_type_toggle .= ' /> ' . $lang['POST_ANNOUNCEMENT'] . '</label>&nbsp;&nbsp;';
}

if ( $topic_type_toggle != '' )
{
$topic_type_toggle = $lang['POST_TOPIC_AS'] . ': <label><input type="radio" name="topictype" value="' . POST_NORMAL .'"' . ( (!isset($post_data['topic_type']) || $post_data['topic_type'] == POST_NORMAL || $topic_type == POST_NORMAL) ? ' checked="checked"' : '' ) . ' /> ' . $lang['POST_NORMAL'] . '</label>&nbsp;&nbsp;' . $topic_type_toggle;
}
}
//bt
$topic_dl_type = (isset($post_info['topic_dl_type'])) ? $post_info['topic_dl_type'] : 0;

if ($post_info['allow_reg_tracker'] && $post_data['first_post'] && ($topic_dl_type || $is_auth['auth_mod']))
{
$sql = "
SELECT tor.attach_id
FROM ". BB_POSTS ." p
LEFT JOIN ". BB_BT_TORRENTS ." tor ON (p.post_id = tor.post_id)
WHERE p.post_id = $post_id
";
$result = DB()->fetch_row($sql);
if (!empty($result['attach_id']))
{
if (!$topic_type_toggle)
{
$topic_type_toggle = $lang['POST_TOPIC_AS'] . ': ';
}

$dl_ds = $dl_ch = $dl_hid = '';
$dl_type_name = 'topic_dl_type';
$dl_type_val = ($topic_dl_type) ? 1 : 0;

if (!$post_info['allow_reg_tracker'] && !$is_auth['auth_mod'])
{
$dl_ds = ' disabled="disabled" ';
$dl_hid = '<input type="hidden" name="topic_dl_type" value="'. $dl_type_val .'" />';
$dl_type_name = '';
}

$dl_ch = ($mode == 'editpost' && $post_data['first_post'] && $topic_dl_type) ? ' checked="checked" ' : '';

$topic_type_toggle .= '<nobr><input type="checkbox" name="'. $dl_type_name .'" id="topic_dl_type_id" '. $dl_ds . $dl_ch .' /><label for="topic_dl_type_id"> '.$lang['POST_DOWNLOAD'].'</label></nobr>';
$topic_type_toggle .= $dl_hid;
}
}
//bt end

// Get poster release group data
if ($userdata['user_level'] == GROUP_MEMBER || IS_AM)
{
$poster_rgroups = '';

$sql = "SELECT ug.group_id, g.group_name, g.release_group
FROM ". BB_USER_GROUP ." ug
INNER JOIN ". BB_GROUPS ." g ON(g.group_id = ug.group_id)
WHERE ug.user_id = {$userdata['user_id']}
AND g.release_group = 1
ORDER BY g.group_name";

foreach (DB()->fetch_rowset($sql) as $row)
{
$selected_opt = ($row['group_id'] == $selected_rg) ? 'selected' : '';
$poster_rgroups .= '<option value="'. $row['group_id'] .'" '. $selected_opt .'>'. $row['group_name'] .'</option>';
}
}

$hidden_form_fields = '<input type="hidden" name="mode" value="' . $mode . '" />';

switch( $mode )
{
case 'newtopic':
$page_title = $lang['POST_A_NEW_TOPIC'];
$hidden_form_fields .= '<input type="hidden" name="' . POST_FORUM_URL . '" value="' . $forum_id . '" />';
break;

case 'reply':
$page_title = $lang['POST_A_REPLY'];
$hidden_form_fields .= '<input type="hidden" name="' . POST_TOPIC_URL . '" value="' . $topic_id . '" />';
break;

case 'editpost':
$page_title = $lang['EDIT_POST'];
$hidden_form_fields .= '<input type="hidden" name="' . POST_POST_URL . '" value="' . $post_id . '" />';
break;
}

// Generate smilies listing for page output
generate_smilies('inline');

$template->set_filenames(array(
'body' => 'posting.tpl',
));

// Output the data to the template
$template->assign_vars(array(
'FORUM_NAME' => htmlCHR($forum_name),
'PAGE_TITLE' => $page_title,
'POSTING_TYPE_TITLE' => $page_title,
'POSTING_TOPIC_ID' => ($mode != 'newtopic') ? $topic_id : '',
'POSTING_TOPIC_TITLE' => ($mode != 'newtopic') ? wbr($post_info['topic_title']) : '',
'U_VIEW_FORUM' => "viewforum.php?" . POST_FORUM_URL . "=$forum_id",

'USERNAME' => @$username,
'CAPTCHA_HTML' => (IS_GUEST) ? CAPTCHA()->get_html() : '',
'SUBJECT' => $subject,
'MESSAGE' => $message,

'POSTER_RGROUPS' => isset($poster_rgroups) && !empty($poster_rgroups) ? $poster_rgroups : '',
'ATTACH_RG_SIG' => ($switch_rg_sig) ? $switch_rg_sig : false,

'U_VIEWTOPIC' => ($mode == 'reply') ? "viewtopic.php?" . POST_TOPIC_URL . "=$topic_id&amp;postorder=desc" : '',

'S_NOTIFY_CHECKED' => ($notify_user) ? 'checked="checked"' : '',
'S_TYPE_TOGGLE' => $topic_type_toggle,
'S_TOPIC_ID' => $topic_id,
'S_POST_ACTION' => POSTING_URL,
'S_HIDDEN_FORM_FIELDS' => $hidden_form_fields,
));

if ($mode == 'newtopic' || $post_data['first_post'])
{
$template->assign_var('POSTING_SUBJECT');
}
if (!$bb_cfg['parsmod_disable'] && ($mode == 'newtopic' || $post_data['first_post']))
{
$template->assign_var('PARSMOD_ON');
}

// Update post time
if ($mode == 'editpost' && $post_data['last_post'] && !$post_data['first_post'])
{
$template->assign_vars(array(
'SHOW_UPDATE_POST_TIME' => ($is_auth['auth_mod'] || ($post_data['poster_post'] && $post_info['post_time'] + 3600*3 > TIMENOW)),
'UPDATE_POST_TIME_CHECKED' => ($post_data['poster_post'] && ($post_info['post_time'] + 3600*2 > TIMENOW)),
));
}

// Topic review
if( $mode == 'reply' && $is_auth['auth_read'] )
{
topic_review($topic_id);
}

require(PAGE_HEADER);

$template->pparse('body');

require(PAGE_FOOTER);

<div class="menu-sub" id="pars-opt">
<table cellspacing="1" cellpadding="4">
<tr><th>{L_PARS_OPT_TITLE}</th></tr>
<tr><td>
<fieldset id="p_tor">
<legend>{L_PARS_OPT_TOR}</legend>
<div class="pad_4">
<label><input id="dwnld_tor" name="pars_tor" type="checkbox" <!-- IF DOWNLOAD_TORRENT_ON -->{CHECKED}<!-- ENDIF -->
onclick="return checkmeman(this, {DOWNLOAD_TORRENT});" />{L_PARS_OPT_DWNLD}
</label><label>
<input id="not_dwnld_tor" name="pars_tor" type="checkbox" <!-- IF NOT_DOWNLOAD_TORRENT_ON -->{CHECKED}<!-- ENDIF -->
onclick="return checkmeman(this, {NOT_DOWNLOAD_TORRENT});" />{L_PARS_OPT_NO_DWNLD}
</label></div>
</fieldset>
<fieldset id="p_view">
<legend>{L_PARS_OPT_VIEW}</legend>
<div class="pad_4">
<label>
<input id="p_no_view" name="pars_view" type="checkbox" <!-- IF PARS_NO_VIEW_ON -->{CHECKED}<!-- ENDIF -->
onclick="return checkmeman(this, {PARS_NO_VIEW});" />{L_PARS_OPT_NO_VIEW}
</label><label>
<input id="p_view_mess" name="pars_view" type="checkbox" <!-- IF PARS_VIEW_MESSAGE_ON -->{CHECKED}<!-- ENDIF -->
onclick="return checkmeman(this, {PARS_VIEW_MESSAGE});" />{L_PARS_OPT_QVIEW}
</label><label>
<input id="p_preview_mess" name="pars_view" type="checkbox" <!-- IF PARS_PREVIEW_MESSAGE_ON -->{CHECKED}<!-- ENDIF -->
onclick="return checkmeman(this, {PARS_PREVIEW_MESSAGE});" />{L_PARS_OPT_PREVIEW}
</label><label>
<input id="p_post_topic" name="pars_view" type="checkbox" <!-- IF PARS_POST_TOPIC_ON -->{CHECKED}<!-- ENDIF -->
onclick="return checkmeman(this, {PARS_POST_TOPIC});" />{L_PARS_OPT_POST}
</label></div>
</fieldset>
</td></tr>
</table>
</div>

<div class="spacer_12"></div>

<!-- IF TPL_SHOW_NEW_POSTS -->
<!--========================================================================-->

<table class="topic" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2" class="catTitle td2">{L_NEW_POSTS_PREVIEW}</td>
</tr>
<tr>
<th class="thHead td1">{L_AUTHOR}</th>
<th class="thHead td2">{L_MESSAGE}</th>
</tr>
<!-- BEGIN new_posts -->
<tr class="{new_posts.ROW_CLASS}">
<td width="120" class="poster_info td1">
<p class="nick" onclick="bbcode.onclickPoster('{new_posts.POSTER_NAME_JS}');">
<a href="#" onclick="return false;">{new_posts.POSTER}</a>
</p>
<p><img src="{SPACER}" width="120" height="10" alt="" /></p>
</td>
<td class="message td2">
<div class="post_head pad_4">{MINIPOST_IMG_NEW} {new_posts.POST_DATE}</div>
<div class="post_wrap post_body">{new_posts.MESSAGE}</div>
</td>
</tr>
<!-- END new_posts -->

</table>

<div class="spacer_12"></div>

<!--========================================================================-->
<!-- ENDIF / TPL_SHOW_NEW_POSTS -->

<!-- IF TPL_PREVIEW_POST -->
<!--========================================================================-->

<table class="forumline">
<tr>
<th>{L_PREVIEW}</th>
</tr>
<tr>
<td class="row1"><div class="post_wrap post_body">{PREVIEW_MSG}</div></td>
</tr>
</table>

<div class="spacer_12"></div>

<!--========================================================================-->
<!-- ENDIF / TPL_PREVIEW_POST -->

<p class="nav">
<a href="{U_INDEX}">{T_INDEX}</a>
<!-- IF U_VIEW_FORUM --><em>&raquo;</em> <a href="{U_VIEW_FORUM}">{FORUM_NAME}</a><!-- ENDIF -->
<!-- IF POSTING_TOPIC_ID --><em>&raquo;</em> <a class="normal" href="{TOPIC_URL}{POSTING_TOPIC_ID}">{POSTING_TOPIC_TITLE}</a><!-- ENDIF -->
</p>

<form action="{S_POST_ACTION}" method="post" name="post" onsubmit="if(checkForm(this)){ dis_submit_btn(); }else{ return false; }" {S_FORM_ENCTYPE}>
{S_HIDDEN_FORM_FIELDS}
{ADD_ATTACH_HIDDEN_FIELDS}
{POSTED_ATTACHMENTS_HIDDEN_FIELDS}

<table class="bordered">
<col class="row1">
<col class="row2">

<tbody class="pad_4">

<!-- IF PARSMOD_ON -->
<tbody class="pad_4">
<tr>
<th colspan="2" class="thHead"><b>{L_PARS_NEW_RELEASE}</b><div class="floatR med bold"><a class="menu-root" style="color:white;" href="#pars-opt">{L_PARS_OPT}</a></div></th>
</tr>
<tr>
<td style="vertical-align:top;">
<div title="{L_PARS_ALLOWED_SOURCES}" style="float: right;vertical-align:top;">
<img src="./templates/default/images/p/rutracker.ico" alt="Rutracker" title="{L_PARS_RUTRACKER_SOURCES}">
<img src="./templates/default/images/p/nnm-club.ico" alt="nnm-club" title="{L_PARS_NNM_SOURCES}">
<img src="./templates/default/images/p/rutor.ico" alt="Rutor" title="{L_PARS_RUTOR_SOURCES}"><br>
</div>
<b>{L_PARS_SOURCE}</b> <br>
</td>
<td>
<input id="release_url" type="url" size=60 placeholder="{l_PARS_PASTE_SOURCE_URL}"> <input type="button" value="{L_SUBMIT}" name="Send" id="pars">


<div id="hida"></div>
</td>


</tr>
<script type="text/javascript">

function checkmeman(e, val){
var ptag = $(e).attr('name');
user.set(ptag, ( $(e).is(":checked") ? val : 0 ), 365, false);
$("input[name="+ptag+"]:checked").attr('checked', false);
$(e).attr('checked', true);
}

$('#pars').click(function(){
var fileid = [0,0];
var gettorrent = (($( "input[name='pars_tor']:checked" ).attr('id')) == 'dwnld_tor') ? 1:0;
var filename = $(".gen:contains('torrent')" ).text();
var mode = $("input[name|=mode]" ).val();

if (filename && gettorrent && mode == 'editpost') gettorrent = confirm("ѕерезаписать торрент?")? 1:0;
if (filename && gettorrent) {
var attach_url = $("a:contains("+filename+")").attr('href');
if (fileid = attach_url.match(/dl\.php\?id=(\d+)/)) {
††††††††var tmp_str = $("input[name|='update_attachment["+fileid[1]+"]']" ).next("input" ).attr("name");
††††††††var phys_name = tmp_str.match(/del_attachment\[(.*)\]/);
††††††††$( "input[value|='"+fileid[1]+"']" ).remove();
}else{
††††††††††††††††var phys_name = attach_url.match(/.*\/(.*)/);
var fileid = [0,0];
}

††††††††$( "input[value|='"+filename+"']" ).remove();
††††††††$( "input[value|='"+phys_name[1]+"']" ).remove();
††††††††$("a:contains("+filename+")").attr({href:" "});
$("a:contains("+filename+")").text(' ');
}

ajax.exec({action: 'pars', pars_url: $('#release_url').val(), gettorrent:gettorrent, tor_id:fileid[1]});
ajax.callback.pars = function(data) {
$( "#hida" ).html(data.hid);
$( "input[name='subject']" ).val(data.title);
$('textarea#message').val(data.bbcode)
var p_view = $("input[name='pars_view']:checked").attr('id');
switch (p_view) {
case 'p_view_mess': ajax.exec({ action: 'posts', type: 'view_message', message: $('textarea#message').val()});break
case 'p_preview_mess': $('#post-preview-btn').click();break
case 'p_post_topic': $('#post-submit-btn').click();break
}
};
});

</script>
<!-- ENDIF -->

<tr>
<th colspan="2" class="thHead"><b>{POSTING_TYPE_TITLE}</b></th>
</tr>
<tr id="view_message" class="hidden">
<td colspan="2">
<div class="view-message"></div>
</td>
</tr>
<!-- IF POSTING_USERNAME -->
<tr>
<td><b>{L_USERNAME}</b></td>
<td>
<input type="text" name="username" size="25" maxlength="25" tabindex="1" value="{USERNAME}" />&nbsp;
<input type="submit" name="usersubmit" class="lite" value="{L_FIND_USERNAME}" onclick="window.open('{U_SEARCH_USER}', '_bbsearch', IWP_US);return false;" />
</td>
</tr>
<!-- ENDIF -->
<!-- IF POSTING_SUBJECT -->
<tr>
<td><b>{L_SUBJECT}</b></td>
<td><input type="text" name="subject" size="90" tabindex="2" value="{SUBJECT}" maxlength="250" style="width: 98%;" /></td>
</tr>
<!-- ENDIF -->
</tbody>

<tr>
<td class="vTop pad_4">
<p><b>{L_MESSAGE}</b></p>
<table id="smilies" class="smilies borderless mrg_16">
<!-- BEGIN smilies_row -->
<tr>
<!-- BEGIN smilies_col -->
<td><a href="#" onclick="bbcode && bbcode.emoticon('{smilies_row.smilies_col.SMILEY_CODE}'); return false;"><img src="{smilies_row.smilies_col.SMILEY_IMG}" alt="" title="{smilies_row.smilies_col.SMILEY_DESC}" /></a></td>
<!-- END smilies_col -->
</tr>
<!-- END smilies_row -->
<!-- BEGIN switch_smilies_extra -->
<tr>
<td colspan="{S_SMILIES_COLSPAN}"><a href="{U_MORE_SMILIES}" onclick="window.open('{U_MORE_SMILIES}', '_bbsmilies', IWP_SM); return false;" target="_bbsmilies" class="med">{L_MORE_EMOTICONS}</a></td>
</tr>
<!-- END switch_smilies_extra -->
</table><!--/smilies-->
</td>
<td class="vTop pad_0 w100"><!-- INCLUDE posting_editor.tpl --></td>
</tr>
<!-- IF IN_PM -->
<!-- ELSEIF LOGGED_IN -->
<tr>
<td class="vTop pad_4" valign="top">
<p><b>{L_OPTIONS}</b></p>
</td>
<td>
<div class="floatL">
<table class="borderless inline">
<!-- IF SHOW_UPDATE_POST_TIME -->
<tr>
<td><input type="checkbox" id="update_post_time" name="update_post_time" <!-- IF UPDATE_POST_TIME_CHECKED -->checked="checked"<!-- ENDIF --> /></td>
<td><label for="update_post_time">{L_UPDATE_POST_TIME}</label></td>
</tr>
<!-- ENDIF -->
<!-- IF SHOW_NOTIFY_CHECKBOX -->
<tr>
<td><input type="checkbox" id="notify" name="notify" {S_NOTIFY_CHECKED} /></td>
<td><label for="notify">{L_NOTIFY}</label></td>
</tr>
<!-- ENDIF -->
</table>
</div>
</td>
</tr>
<!-- IF ATTACHBOX && POSTER_RGROUPS -->
<tr>
<td class="vTop pad_4" valign="top"><b>{L_POST_RELEASE_FROM_GROUP}</b></td>
<td>
<select name="poster_rg">
<option value="-1">{L_CHOOSE_RELEASE_GROUP}</option>
{POSTER_RGROUPS}
</select>
<label><input type="checkbox" name="attach_rg_sig" <!-- IF ATTACH_RG_SIG -->checked<!-- ENDIF -->/> {L_ATTACH_RG_SIG}</label>
</td>
</tr>
<!-- ENDIF -->
<!-- ENDIF / LOGGED_IN -->
<!-- BEGIN switch_type_toggle -->
<tr>
<td colspan="2" class="row2 tCenter pad_6">{S_TYPE_TOGGLE}</td>
</tr>
<!-- END switch_type_toggle -->
<!-- IF ATTACHBOX --><!-- INCLUDE posting_attach.tpl --><!-- ENDIF -->
</table>

</form>

<!-- IF TPL_TOPIC_REVIEW -->
<!--========================================================================-->

<div class="spacer_12"></div>

<table class="topic" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2" class="catTitle td2">{L_TOPIC_REVIEW}</td>
</tr>
<tr>
<th class="thHead td1">{L_AUTHOR}</th>
<th class="thHead td2">{L_MESSAGE}</th>
</tr>
<!-- BEGIN review -->
<tr class="{review.ROW_CLASS}">
<td width="120" class="poster_info td1">
<p class="nick" onclick="bbcode.onclickPoster('{review.POSTER_NAME_JS}');">
<a href="#" onclick="return false;">{review.POSTER}</a>
</p>
<p><img src="{SPACER}" width="120" height="10" alt="" /></p>
</td>
<td class="message td2">
<div class="post_head pad_4">{MINIPOST_IMG} {review.POST_DATE}</div>
<div class="post_wrap post_body">{review.MESSAGE}</div>
</td>
</tr>
<!-- END review -->

</table>

<div class="spacer_12"></div>

<!--========================================================================-->
<!-- ENDIF / TPL_TOPIC_REVIEW -->

Заранее спасибо за помощь.
Данные сервера:
Apache 2.2.15 (CentOS )
PHP/5.3.29
TP: 2.1.1

такая же проблема! есть решение?
 

votanumu

Пользователь
Последние несколько дней при парсинге с rutracker.org перестал регистрироваться торрент-файл. Выдается сообщение: "Не удалось зарегистрировать торрент на трекере".
http://s005.*******.host/i212/1509/be/18f467a2be87.jpg
До этого все парсилось нормально. Может какие изменения на rutracker.org произошли?

В движке ничего не менял.
Версия TorrentPier II: 2.1.5 [ALPHA]
 
Сверху