desi6.tv
02-03-2010, 12:02 AM
Hello,
I have been running this code from version 3.6.x through 3.8.x. It has been running fine with a few modifications here and there.
function xbt_attachdata_postsave($dm)
{
require_once('benc.php');
global $vbulletin;
if ($dm->attach['extension'] != 'torrent')
return;
$torrent = bdec(empty($dm->info['filedata']) ? file_get_contents(fetch_attachment_path($dm->attach['userid'], $dm->attach['attachmentid'])) : $dm->info['filedata']);
if (!isset($torrent))
return;
$bt_info_hash = pack('H*', sha1($torrent['value']['info']['string']));
$bt_name = $torrent['value']['info']['value']['name']['value'];
$bt_tracker = $torrent['value']['announce']['value'];
$vbulletin->db->query_write(sprintf("delete from xbt_sub_files where info_hash = '%s'", addslashes($bt_info_hash)));
if ($torrent['value']['info']['value']['length'])
{
$name = $torrent['value']['info']['value']['name']['value'];
$size = $torrent['value']['info']['value']['length']['value'];
$vbulletin->db->query_write(sprintf("insert into xbt_sub_files (info_hash, name, size) values ('%s', '%s', '%.0f')",
addslashes($bt_info_hash), addslashes($name), $size));
$bt_size = $size;
}
else
{
$bt_size = 0;
foreach ($torrent['value']['info']['value']['files']['value'] as $file)
{
$name = '';
foreach ($file['value']['path']['value'] as $a)
$name .= '/' . $a['value'];
$size = $file['value']['length']['value'];
$vbulletin->db->query_write(sprintf("insert into xbt_sub_files (info_hash, name, size) values ('%s', '%s', '%.0f')",
addslashes($bt_info_hash), addslashes($name), $size));
$bt_size += (float)$size;
}
}
$vbulletin->db->query_write(sprintf("update %sattachment set bt_info_hash = '%s', bt_name = '%s', bt_size = '%.0f', bt_tracker = '%s' where attachmentid = %d",
TABLE_PREFIX, addslashes($bt_info_hash), addslashes($bt_name), $bt_size, addslashes($bt_tracker), $dm->attach['attachmentid']));
}
It basically extracts information from the torrent uploaded and stores it into respective tables in the database. This info is later used to generate and assign the torrent with a unique passkey.
I had this function running on the attachdata_postsave hook. For some reason, it does not seem to be working with vB 4. Can anyone help me with this piece of code ? I think the attachments are handeled differently in vB4. Please explain if possible.
Secondly, attachdata_delete hook is missing. What to do if I want to run some code in its place ?
--------------- Added 1265187247 at 1265187247 ---------------
i want to know how the attachment array is handled in vbulletin 4
I have been running this code from version 3.6.x through 3.8.x. It has been running fine with a few modifications here and there.
function xbt_attachdata_postsave($dm)
{
require_once('benc.php');
global $vbulletin;
if ($dm->attach['extension'] != 'torrent')
return;
$torrent = bdec(empty($dm->info['filedata']) ? file_get_contents(fetch_attachment_path($dm->attach['userid'], $dm->attach['attachmentid'])) : $dm->info['filedata']);
if (!isset($torrent))
return;
$bt_info_hash = pack('H*', sha1($torrent['value']['info']['string']));
$bt_name = $torrent['value']['info']['value']['name']['value'];
$bt_tracker = $torrent['value']['announce']['value'];
$vbulletin->db->query_write(sprintf("delete from xbt_sub_files where info_hash = '%s'", addslashes($bt_info_hash)));
if ($torrent['value']['info']['value']['length'])
{
$name = $torrent['value']['info']['value']['name']['value'];
$size = $torrent['value']['info']['value']['length']['value'];
$vbulletin->db->query_write(sprintf("insert into xbt_sub_files (info_hash, name, size) values ('%s', '%s', '%.0f')",
addslashes($bt_info_hash), addslashes($name), $size));
$bt_size = $size;
}
else
{
$bt_size = 0;
foreach ($torrent['value']['info']['value']['files']['value'] as $file)
{
$name = '';
foreach ($file['value']['path']['value'] as $a)
$name .= '/' . $a['value'];
$size = $file['value']['length']['value'];
$vbulletin->db->query_write(sprintf("insert into xbt_sub_files (info_hash, name, size) values ('%s', '%s', '%.0f')",
addslashes($bt_info_hash), addslashes($name), $size));
$bt_size += (float)$size;
}
}
$vbulletin->db->query_write(sprintf("update %sattachment set bt_info_hash = '%s', bt_name = '%s', bt_size = '%.0f', bt_tracker = '%s' where attachmentid = %d",
TABLE_PREFIX, addslashes($bt_info_hash), addslashes($bt_name), $bt_size, addslashes($bt_tracker), $dm->attach['attachmentid']));
}
It basically extracts information from the torrent uploaded and stores it into respective tables in the database. This info is later used to generate and assign the torrent with a unique passkey.
I had this function running on the attachdata_postsave hook. For some reason, it does not seem to be working with vB 4. Can anyone help me with this piece of code ? I think the attachments are handeled differently in vB4. Please explain if possible.
Secondly, attachdata_delete hook is missing. What to do if I want to run some code in its place ?
--------------- Added 1265187247 at 1265187247 ---------------
i want to know how the attachment array is handled in vbulletin 4