Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
<?php
/*
+---------------------------------------------------------------------------
| Invision Power Dynamic v1.0.0
| ========================================
| by Matthew Mecham
| (c) 2004 Invision Power Services
| http://nulled.cc
| ========================================
+---------------------------------------------------------------------------
| INVISION POWER DYNAMIC IS NOT FREE SOFTWARE!
| http://nulled.cc
+---------------------------------------------------------------------------
| > $Id$
| > $Revision: 4 $
| > $Date: 2005-10-10 14:21:32 +0100 (Mon, 10 Oct 2005) $
+---------------------------------------------------------------------------
|
| > ATTACH FUNCTIONS
| > Script written by Matt Mecham
| > Date started: Monday 19th December 2005, 13:53
|
+---------------------------------------------------------------------------
*/
/**
* Attach Class
* Handles various uploading functions
*
* <code>
* Possible Error strings:
* - upload_no_file (No file was selected to upload)
* - upload_failed (Upload failed for unspecified reason)
* - upload_too_big (Upload is bigger than space left)
* - invalid_mime_type (Upload is not allowed)
* - no_upload_dir (Upload dir is not installed)
* - no_upload_dir_perms (Upload dir is not writeable)
* </code>
*/
if ( ! defined( 'IN_IPB' ) )
{
print "<h1>Некорректный адрес</h1>Вы не имеете доступа к этому файлу напрямую. Если вы недавно обновляли форум, вы должны обновить все соответствующие файлы.";
exit();
}
class class_attach
{
/**
* Global ipsclass
* @var object
*/
var $ipsclass;
/**
* Global html class
* @var object
*/
var $html;
/**
* Plugin Class
* @var object
*/
var $type = '';
/**
* Plugin Class
* @var object
*/
var $plugin = '';
/**
* Post key
* @var string
*/
var $attach_post_key = '';
/**
* Relationship ID
* @var string
*/
var $attach_rel_id = '';
/**
* Return variables
* @var array [ 'allow_uploads', 'space_allowed', 'space_allowed_human', 'space_used', 'space_used_human', 'space_left', 'space_left_human' ]
*/
var $attach_stats = array();
/**
* Lang array
* Internal language array
* @var array
*/
var $language = array( 'unlimited' => 'Неограничено',
'not_allowed' => 'Загрузка запрещена' );
/**
* Error array
* @var string
*/
var $error = "";
/**
* Full upload path
*/
var $upload_path = '';
/**
* Upload part part (from /uploads)
*/
var $upload_dir = '';
/**
* Extra upload form url
*/
var $extra_upload_form_url = '';
/**
* Custom settings
*/
var $settings = array( 'siu_thumb' => 0,
'siu_height' => 0,
'siu_width' => 0,
'allow_monthly_upload_dirs' => 0,
'upload_dir' => '' );
// INIT
/**
* Initiates class
*/
function init()
{
//-----------------------------------------
// Start the settings
//-----------------------------------------
$this->settings['siu_thumb'] = $this->ipsclass->vars['siu_thumb'];
$this->settings['siu_height'] = $this->ipsclass->vars['siu_height'];
$this->settings['siu_width'] = $this->ipsclass->vars['siu_width'];
$this->settings['allow_monthly_upload_dirs'] = SAFE_MODE_ON ? 0 : ( $this->ipsclass->vars['safe_mode_skins'] ? 0 : 1 );
$this->settings['upload_dir'] = $this->ipsclass->vars['upload_dir'];
//-----------------------------------------
// Load plug in
//-----------------------------------------
if ( $this->type )
{
$this->load_plugin();
}
//-----------------------------------------
// Finalize the settings
//-----------------------------------------
foreach( $this->settings as $item => $value )
{
$this->settings[ $item ] = ( isset( $this->plugin->settings[ $item ] ) ) ? $this->plugin->settings[ $item ] : $value;
}
//-----------------------------------------
// Got a different upload dir?
//-----------------------------------------
/*if ( $this->settings['upload_dir'] != $this->ipsclass->vars['upload_dir'] )
{
$this->settings['allow_monthly_upload_dirs'] = 0;
}*/
//-----------------------------------------
// Fix up URL tokens
//-----------------------------------------
foreach( $this->ipsclass->input as $k => $v )
{
if ( preg_match( "#^--ff--#", $k ) )
{
$this->ipsclass->input[ str_replace( '--ff--', '', $k ) ] = $v;
}
}
//-----------------------------------------
// Sort out upload dir
//-----------------------------------------
$this->upload_path = $this->settings['upload_dir'];
# Preserve original path
$this->_upload_path = $this->upload_path;
}
// Show Attachment
/**
* Show the attachment (or force download)
*
* @param int Attachment ID (The main attach id)
* @return void
*/
function show_attachment( $attach_id )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$sql_data = array();
//-----------------------------------------
// Get attach data...
//-----------------------------------------
$attachment = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*',
'from' => 'attachments',
'where' => 'attach_id='.intval( $attach_id ) ) );
if ( ! $attachment['attach_id'] )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'missing_files' ) );
}
//-----------------------------------------
// Load correct plug in...
//-----------------------------------------
$this->type = $attachment['attach_rel_module'];
$this->load_plugin();
//-----------------------------------------
// Get SQL data from plugin
//-----------------------------------------
$attach = $this->plugin->show_attachment_get_sql_data( $attach_id );
//-----------------------------------------
// Got a reply?
//-----------------------------------------
if ( $attach === FALSE OR ! is_array( $attach ) )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission' ) );
}
//-----------------------------------------
// Got a rel id?
//-----------------------------------------
if ( ! $attach['attach_rel_id'] AND $attach['attach_member_id'] != $this->ipsclass->member['id'] )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'err_attach_not_attached' ) );
}
if ( is_array( $attach ) AND count( $attach ) )
{
//-----------------------------------------
// Got attachment types?
//-----------------------------------------
if ( ! is_array( $this->ipsclass->cache['attachtypes'] ) )
{
$this->ipsclass->cache['attachtypes'] = array();
$this->ipsclass->DB->simple_construct( array( 'select' => 'atype_extension,atype_mimetype', 'from' => 'attachments_type' ) );
$this->ipsclass->DB->simple_exec();
while ( $r = $this->ipsclass->DB->fetch_row() )
{
$this->ipsclass->cache['attachtypes'][ $r['atype_extension'] ] = $r;
}
}
//-----------------------------------------
// Show attachment
//-----------------------------------------
$this->_upload_path = ( isset( $this->plugin->settings[ 'upload_dir' ] ) ) ? $this->plugin->settings[ 'upload_dir' ] : $this->settings[ 'upload_dir' ];
$file = $this->_upload_path."/".$attach['attach_location'];
if ( file_exists( $file ) and ( $this->ipsclass->cache['attachtypes'][ $attach['attach_ext'] ]['atype_mimetype'] != "" ) )
{
//-----------------------------------------
// Update the "hits"..
//-----------------------------------------
$this->ipsclass->DB->build_and_exec_query( array( 'update' => 'attachments',
'set' => "attach_hits=attach_hits+1",
'where' => "attach_id=".$attach_id ) );
//-----------------------------------------
// Open and display the file..
//-----------------------------------------
header( "Content-Type: ".$this->ipsclass->cache['attachtypes'][ $attach['attach_ext'] ]['atype_mimetype'] );
header( "Content-Disposition: inline; filename=\"".$attach['attach_file']."\"" );
header( "Content-Length: ".(string)(filesize( $file ) ) );
/*
+--------------------------------------------------------------------------
| IPBTracker v2.x
| =============================================
| by Jaggi
| (c) 2002 - 2007 IPBTracker.eu.
| =============================================
+---------------------------------------------------------------------------
+---------------------------------------------------------------------------
|
| > This code will edit the torrent on download
| > Adds passkey
| > Automatically changes announce url to one set in admincp.
| > benc.php is a GPL licenced and may be used freely, this doesn't apply
| - to the rest of the code in this script.
+--------------------------------------------------------------------------
*/
if ( $attach['attach_ext'] == 'torrent' && !empty( $attach['torrent_id'] ) )
{
require ROOT_PATH."sources/lib/func_benc.php";
$this->lib = new func_benc( $this );
$this->lib->ipsclass =& $this->ipsclass;
$dict = $this->lib->bdec_file( $file, filesize( $file ) );
//-------------------------------------------------
// Does Member Exist
//-------------------------------------------------
$rsql = $this->ipsclass->DB->query("SELECT torrent_pass
FROM users
WHERE uid='" . intval( $this->ipsclass->member['id'] ) . "'
LIMIT 1
");
$this->ipsclass->DB->simple_exec();
$r = $this->ipsclass->DB->fetch_row( $rsql );
if ( !$this->ipsclass->DB->get_num_rows() )
{
//-------------------------------------------------
// Store passkey and create members tracker details
//-------------------------------------------------
$r['torrent_pass'] = $this->ipsclass->generate_torrent_pass();
$this->ipsclass->DB->query("INSERT INTO users (uid, name, email, added, peers_limit, torrent_pass)
VALUES ('" . $this->ipsclass->member['id'] . "',
'" . $this->ipsclass->member['name'] . "',
'" . $this->ipsclass->member['email'] . "',
'" . time() . "',
'1',
'" . $r['torrent_pass'] . "' )
");
}
else if ( $r['torrent_pass'] == '' )
{
//-------------------------------------------------
// No passkey? give them one!
//-------------------------------------------------
$r['torrent_pass'] = $this->ipsclass->generate_torrent_pass();
$ssql = $this->ipsclass->DB->query("UPDATE users
SET torrent_pass ='" . $r['torrent_pass'] . "'
WHERE uid='" . intval( $this->ipsclass->member['id'] ) . "'
");
}
if ( $this->ipsclass->vars['add_passkey'] )
{
//-------------------------------------------------
// Compile passkey and announce URL.
//-------------------------------------------------
$announce_url = preg_replace( "/^(http:\/\/.*?:\d+)(\/announce)/is", "$1/{$r['torrent_pass']}$2", $this->ipsclass->vars['announce_url'] );
}
if ( !$this->ipsclass->member['id'] || !$this->ipsclass->vars['add_passkey'] )
{
$r['torrent_pass'] = '';
$announce_url = $this->ipsclass->vars['announce_url'];
}
//-------------------------------------------------
// Add passkey URL.
//-------------------------------------------------
$dict['value']['announce']['value'] = $announce_url;
$dict['value']['announce']['string'] = strlen( $dict['value']['announce']['value'] ) . ":" . $dict['value']['announce']['value'];
$dict['value']['announce']['strlen'] = strlen( $dict['value']['announce']['string'] );
//-------------------------------------------------
// End and wrap everything up.
//-------------------------------------------------
$fn = $this->lib->benc($dict);
header( "Content-Type: ".$this->ipsclass->cache['attachtypes'][ $attach['attach_ext'] ]['atype_mimetype'] );
header( "Content-Disposition: inline; filename=\"".$attach['attach_file']."\"" );
header( "Content-Length: ".(string)(strlen( $fn ) ) );
print $fn;
exit();
}
//-------------------------------------------------
// End of IPBTracker Modification.
//-------------------------------------------------
//print $contents;
//readfile( $file );
@ob_end_clean();
if( $fh = fopen( $file, 'rb' ) )
{
while( !feof($fh) )
{
echo fread( $fh, 4096 );
flush();
@ob_flush();
}
@fclose( $fh );
}
exit();
}
else
{
//-----------------------------------------
// File does not exist..
//-----------------------------------------
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'missing_files' ) );
}
}
else
{
//-----------------------------------------
// No permission?
//-----------------------------------------
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission' ) );
}
}
// Render attachments
/**
* Swaps the HTML for the nice attachments.
*
* @param array Array of HTML blocks to convert: [ rel_id => $html ]
* @return array Array of converted HTML blocks and attach code: [ id => array[ html => '', attach_html => '' ] ]
*/
function render_attachments( $html, $rel_ids=array(), $skin_name='skin_topic' )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$attach_ids = array();
$map_attach_id_to_rel_id = array();
$final_out = array();
$final_blocks = array();
$_seen = 0;
//-----------------------------------------
// Check..
//-----------------------------------------
if ( ! is_array( $rel_ids ) AND isset( $rel_ids ) )
{
$rel_ids = array( $rel_ids );
}
//-----------------------------------------
// Parse HTML blocks for attach ids
// [attachment=32:attachFail.gif]
//-----------------------------------------
preg_match_all( "#\[attachment=(\d+?)\:(?:[^\]]+?)\]#is", $html, $match );
if ( is_array( $match[0] ) and count( $match[0] ) )
{
for ( $i = 0 ; $i < count( $match[0] ) ; $i++ )
{
if ( intval($match[1][$i]) == $match[1][$i] )
{
$attach_ids[ $match[1][$i] ] = $match[1][$i];
}
}
}
//-----------------------------------------
// Get data from the plug in
//-----------------------------------------
$rows = $this->plugin->render_attachment_get_sql_data( $attach_ids, $rel_ids, $this->attach_post_key );
//-----------------------------------------
// Got anything?
//-----------------------------------------
if ( is_array( $rows ) AND count( $rows ) )
{
//-----------------------------------------
// Got attachment types?
//-----------------------------------------
if ( ! is_array( $this->ipsclass->cache['attachtypes'] ) )
{
$this->ipsclass->cache['attachtypes'] = array();
$this->ipsclass->DB->simple_construct( array( 'select' => 'atype_extension,atype_mimetype,atype_img', 'from' => 'attachments_type' ) );
$outer = $this->ipsclass->DB->simple_exec();
while ( $r = $this->ipsclass->DB->fetch_row( $outer ) )
{
$this->ipsclass->cache['attachtypes'][ $r['atype_extension'] ] = $r;
}
}
$_seen_rows = 0;
//preg_match_all( "#\[attachment=(\d+)\:(?:[^\]]+?)[\n|\]]#is", $html, $matches );
foreach( $rows as $_attach_id => $row )
//foreach( $matches[1] as $html_attachid )
{
//-----------------------------------------
// INIT
//-----------------------------------------
//$_attach_id = $html_attachid;
$row = $rows[ $_attach_id ];
if( $this->attach_rel_id != $row['attach_rel_id'] )
{
// Reset if we are onto a new post..
$_seen_rows = 0;
$_seen = 0;
}
$this->attach_rel_id = $row['attach_rel_id'];
if ( ! isset( $final_blocks[ $row['attach_rel_id'] ] ) )
{
$final_blocks[ $row['attach_rel_id'] ] = array( 'attach' => '', 'thumb' => '', 'image' => '' );
}
//-----------------------------------------
// Is it an image, and are we viewing the image in the post?
//-----------------------------------------
if ( $this->ipsclass->vars['show_img_upload'] and $row['attach_is_image'] )
{
if ( $this->settings['siu_thumb'] AND $row['attach_thumb_location'] AND $row['attach_thumb_width'] )
{
//-----------------------------------------
// Make sure we've not seen this ID
//-----------------------------------------
$row['_attach_id'] = $row['attach_id'] . '-' . preg_replace( "#[\.\s]#", "-", microtime() );
$not_inline = $_seen_rows > 0 ? $_seen_rows%$this->ipsclass->vars['topic_attach_no_per_row'] : 1;
$tmp = $this->ipsclass->compiled_templates[ $skin_name ]->Show_attachments_img_thumb( array( 't_location' => $row['attach_thumb_location'],
't_width' => $row['attach_thumb_width'],
't_height' => $row['attach_thumb_height'],
'o_width' => $row['attach_img_width'],
'o_height' => $row['attach_img_height'],
'attach_id' => $row['attach_id'],
'_attach_id' => $row['_attach_id'],
'file_size' => $this->ipsclass->size_format( $row['attach_filesize'] ),
'attach_hits' => $row['attach_hits'],
'location' => $row['attach_file'],
'type' => $this->type,
'notinline' => $not_inline,
) );
//-----------------------------------------
// Convert HTML
//-----------------------------------------
$_count = substr_count( $html, '[attachment='.$row['attach_id'].':' );
if ( $_count > 1 )
{
# More than 1 of the same thumbnail to show?
$this->_current = array( 'type' => $this->type,
'row' => $row,
'skin_name' => $skin_name );
$html = preg_replace_callback( "#\[attachment=".$row['attach_id']."\:(?:[^\]]+?)[\n|\]]#is", array( &$this, '_parse_thumbnail_inline' ), $html );
}
else if ( $_count )
{
# Just the one, then?
$html = preg_replace( "#\[attachment=".$row['attach_id']."\:(?:[^\]]+?)[\n|\]]#is", $tmp, $html );
}
else
{
# None. :(
$_seen++;
if ( $_seen == $this->ipsclass->vars['topic_attach_no_per_row'] )
{
$tmp .= "\n<br />\n";
$_seen = 0;
}
$final_blocks[ $row['attach_rel_id'] ]['thumb'] .= $tmp . ' ';
}
}
else
{
//-----------------------------------------
// Standard size..
//-----------------------------------------
$tmp = $this->ipsclass->compiled_templates[ $skin_name ]->Show_attachments_img( $row['attach_location'] );
if ( strstr( $html, '[attachment='.$row['attach_id'].':' ) )
{
$html = preg_replace( "#\[attachment=".$row['attach_id']."\:(?:[^\]]+?)[\n|\]]#is", $tmp, $html );
}
else
{
$final_blocks[ $row['attach_rel_id'] ]['image'] .= $tmp . ' ';
}
}
}
else
{
//-----------------------------------------
// Full attachment thingy
//-----------------------------------------
/*
+--------------------------------------------------------------------------
| IPBTracker v2.x
| =============================================
| by Jaggi
| (c) 2002 - 2007 IPBTracke.eu.
| =============================================
+---------------------------------------------------------------------------
+---------------------------------------------------------------------------
|
| > This Code Displays Files and Statistics and Member Statistics.
| > Date started: 17/02/07
+--------------------------------------------------------------------------
*/
//-------------------------------------------------
// Start the Member Info Mod
//-------------------------------------------------
if ( $row['attach_ext'] == 'torrent' && !empty( $row['torrent_id'] ) )
{
$row['fsize'] = $this->ipsclass->size_format( $row['fullsize'] ); // Fix Size
//-------------------------------------------------
// All in good health?
//-------------------------------------------------
if ( $row['leechers'] == 0 )
{
$row['health'] = ( $row['seeders'] == 0 ) ? 0 : 5;
}
else
{
$row['health'] = round( $row['seeders'] / $row['leechers'] * 10 );
$row['health'] = ceil( $row['health'] / 20 );
if ( $row['health'] < 0 ) $row['health'] = 0;
if ( $row['health'] > 5 ) $row['health'] = 5;
}
$row['health'] = $this->ipsclass->vars['img_url'] . '/h' . $row['health'] .'.gif';
$details = $this->ipsclass->compiled_templates[ $skin_name ]->details_box( $row );
//-------------------------------------------------
// Unserialize the files data and make purdy...
//-------------------------------------------------
$files = $this->ipsclass->compiled_templates[ $skin_name ]->torrent_files_start( $row ); // Start Rows
$attach_files = unserialize( $this->ipsclass->txt_stripslashes( $row['attach_files'] ) );
if ( $attach_files )
{
foreach ( $attach_files as $k => $v )
{
$row['filename'] = $v[0];
$row['size'] = $this->ipsclass->size_format( $v[1] ); // Fix Size
$files .= $this->ipsclass->compiled_templates[ $skin_name ]->torrent_files_rows( $row ); // Start Data
}
}
$files .= $this->ipsclass->compiled_templates[ $skin_name ]->torrent_files_end(); // End Rows
//-------------------------------------------------
// End Of Files Statistics Modification
//-------------------------------------------------
/*
+--------------------------------------------------------------------------
| > This code displays user statistics under torrents in thread.
| > Date started: 17/12/2005
+--------------------------------------------------------------------------
*/
//-----------------------------------------
// Another Super Query
// Queries For Statistics Table.
//-----------------------------------------
$ssql = $this->ipsclass->DB->query("SELECT x.*, t.fid, x.fid, t.filename, t.size, u.uid, u.name, m.id, m.name, m.mgroup, m.members_display_name
FROM xbt_files_users x
LEFT JOIN torrents t ON (x.fid=t.fid)
LEFT JOIN users u ON (x.uid=u.uid)
LEFT JOIN ".SQL_PREFIX."members m ON (m.id=u.uid)
WHERE t.fid = '".$row['torrent_id']."' AND x.active=1
ORDER BY x.left ASC
");
$this->ipsclass->DB->simple_exec();
$stats = $this->ipsclass->compiled_templates[ $skin_name ]->torrent_stats_start( $row ); // Start Rows
while ( $data = $this->ipsclass->DB->fetch_row( $ssql ) )
{
//-----------------------------------------
// Tell It How To Make A Ratio
//-----------------------------------------
$data['ratio'] = $this->ipsclass->ratio( $data['uploaded'], $data['downloaded'] ); // Make Ratio
$data['downloaded'] = $this->ipsclass->size_format( $data['downloaded'] ); // Fix Size
$data['uploaded'] = $this->ipsclass->size_format( $data['uploaded'] ); // Fix Size
$data['members_display_name'] = $this->ipsclass->make_name_formatted( $data['members_display_name'], $data['mgroup'] );
//-------------------------------------------------
// Code The Percentage Bar
//-------------------------------------------------
$data['progress'] = round( 100 * ( 1 -($data['left'] / $data['size'] ) ), 2 );
$percent = sprintf( '%.2f', $data['progress'] );
$data['width'] = $data['progress'] > 0 ? intval( $data['progress'] ) : 0;
//-----------------------------------------
// Sort Seeders and Leechers
//-----------------------------------------
if ( $data['left'] == 0 ) //Seeders
{
$data['downloaded'] = "<font color=#008000>" . $data['downloaded'] . '</font>';
$data['uploaded'] = "<font color=#008000>" . $data['uploaded'] . "</font>";
$data['ratio'] = "<font color=#008000>" . $data['ratio'] . "</font>";
$data['connected'] = "<font color=#008000>" . $this->ipsclass->get_date( $data['mtime'], 'LONG' ) . "</font>";
}
else //Leechers
{
$data['downloaded'] = "<font color=#0000FF>" . $data['downloaded'] . '</font>';
$data['uploaded'] = "<font color=#0000FF>" . $data['uploaded'] . "</font>";
$data['ratio'] = "<font color=#0000FF>" . $data['ratio'] . "</font>";
$data['connected'] = "<font color=#0000FF>" . $this->ipsclass->get_date( $data['mtime'], 'LONG' ) . "</font>";
}
//-----------------------------------------
// Parse Output
//-----------------------------------------
$stats .= $this->ipsclass->compiled_templates[ $skin_name ]->torrent_stats_rows( $data, $width, $progress );
}
$stats .= $this->ipsclass->compiled_templates[ $skin_name ]->torrent_stats_end();
}
else
{
unset( $details, $files, $stats );
}
//-------------------------------------------------
// End Of IPBTracker Modification
//-------------------------------------------------
$tmp = $this->ipsclass->compiled_templates[ $skin_name ]->Show_attachments( array (
'attach_hits' => $row['attach_hits'],
'mime_image' => $this->ipsclass->cache['attachtypes'][ $row['attach_ext'] ]['atype_img'],
'attach_file' => $row['attach_file'],
'attach_id' => $row['attach_id'],
'type' => $this->type,
'file_size' => $this->ipsclass->size_format( $row['attach_filesize'] ),
) );
//-------------------------------------------------
// Start Of IPBTracker Modification
// - Send output
//-------------------------------------------------
$tmp .= $details;
$tmp .= $stats;
//-------------------------------------------------
// End Of IPBTracker Modification
//-------------------------------------------------
if ( strstr( $html, '[attachment='.$row['attach_id'].':' ) )
{
$html = preg_replace( "#\[attachment=".$row['attach_id']."\:(?:[^\]]+?)[\n|\]]#is", $tmp, $html );
}
else
{
$final_blocks[ $row['attach_rel_id'] ]['attach'] .= $tmp . ' ';
}
}
$_seen_rows++;
}
//-----------------------------------------
// Anthing to add?
//-----------------------------------------
if ( count( $final_blocks ) )
{
foreach( $final_blocks as $rel_id => $type )
{
$temp_out = "";
if ( $final_blocks[ $rel_id ]['thumb'] )
{
$temp_out .= $this->ipsclass->compiled_templates[ $skin_name ]->show_attachment_title( $this->ipsclass->lang['attach_thumbs'], $final_blocks[ $rel_id ]['thumb'] );
}
if ( $final_blocks[ $rel_id ]['image'] )
{
$temp_out .= $this->ipsclass->compiled_templates[ $skin_name ]->show_attachment_title( $this->ipsclass->lang['attach_images'], $final_blocks[ $rel_id ]['image'] );
}
if ( $final_blocks[ $rel_id ]['attach'] )
{
$temp_out .= $this->ipsclass->compiled_templates[ $skin_name ]->show_attachment_title( $this->ipsclass->lang['attach_normal'], $final_blocks[ $rel_id ]['attach'] );
}
if ( $temp_out )
{
$html = str_replace( "<!--IBF.ATTACHMENT_". $rel_id. "-->", $temp_out, $html );
}
}
}
}
return $html;
}
// Remove uploaded file (BULK)
/**
* Removes an attachment.
*/
function bulk_remove_attachment( $attach_rel_ids=array() )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$attachments = array();
//-----------------------------------------
// Got an ID?
//-----------------------------------------
if ( ! is_array( $attach_rel_ids ) or ! count( $attach_rel_ids ) )
{
return FALSE;
}
//-----------------------------------------
// Make sure we've got permission
//-----------------------------------------
if ( $this->plugin->return_bulk_remove_permission( $attach_rel_ids ) === TRUE )
{
//-----------------------------------------
// Get stuff
//-----------------------------------------
$this->ipsclass->DB->build_query( array( 'select' => '*',
'from' => 'attachments',
'where' => 'attach_rel_id IN ('.implode(",",$attach_rel_ids).") AND attach_rel_module='".$this->type."'" ) );
$this->ipsclass->DB->exec_query();
while( $_row = $this->ipsclass->DB->fetch_row() )
{
$attachments[ $_row['attach_id'] ] = $_row;
}
foreach( $attachments as $attach_id => $attachment )
{
//-----------------------------------------
// Remove from the filesystem
//-----------------------------------------
if ( $attachment['attach_location'] )
{
@unlink( $this->_upload_path."/".$attachment['attach_location'] );
}
if ( $attachment['attach_thumb_location'] )
{
@unlink( $this->_upload_path."/".$attachment['attach_thumb_location'] );
}
//-----------------------------------------
// Allow the module to clean up any items
//-----------------------------------------
$this->plugin->remove_attachment_clean_up( $attachment );
}
//-----------------------------------------
// Remove from the DB
//-----------------------------------------
$this->ipsclass->DB->build_and_exec_query( array( 'delete' => 'attachments',
'where' => 'attach_rel_id IN ('.implode(",",$attach_rel_ids).") AND attach_rel_module='".$this->type."'" ) );
return TRUE;
}
else
{
return FALSE;
}
}
// Remove uploaded file
/**
* Removes an attachment.
*/
function remove_attachment()
{
//-----------------------------------------
// Got an ID?
//-----------------------------------------
if ( ! $this->attach_id )
{
return FALSE;
}
//-----------------------------------------
// Get DB row
//-----------------------------------------
$attachment = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*',
'from' => 'attachments',
'where' => 'attach_id='.$this->attach_id." AND attach_rel_module='".$this->type."'" ) );
if ( ! $attachment['attach_id'] )
{
return FALSE;
}
//-----------------------------------------
// Make sure we've got permission
//-----------------------------------------
if ( $this->plugin->return_remove_permission( $attachment ) === TRUE )
{
//-----------------------------------------
// Remove from the DB
//-----------------------------------------
$this->ipsclass->DB->build_and_exec_query( array( 'delete' => 'attachments',
'where' => 'attach_id='.$attachment['attach_id'] ) );
//-----------------------------------------
// Remove from the filesystem
//-----------------------------------------
if ( $attachment['attach_location'] )
{
@unlink( $this->_upload_path."/".$attachment['attach_location'] );
}
if ( $attachment['attach_thumb_location'] )
{
@unlink( $this->_upload_path."/".$attachment['attach_thumb_location'] );
}
//-----------------------------------------
// Allow the module to clean up any items
//-----------------------------------------
$this->plugin->remove_attachment_clean_up( $attachment );
return TRUE;
}
else
{
return FALSE;
}
}
// Post Process upload
/**
* Converts post-key attachments into rel_id / rel_module attachments
* by adding in the correct ID, etc
*/
function post_process_upload( $args=array() )
{
if ( ! $this->attach_post_key or ! $this->attach_rel_id )
{
return FALSE;
}
//-----------------------------------------
// Got any to update?
//-----------------------------------------
$this->ipsclass->DB->do_update( 'attachments', array( 'attach_rel_id' => $this->attach_rel_id,
'attach_rel_module' => $this->type ), "attach_post_key='". $this->attach_post_key ."'" );
//-----------------------------------------
// Update module specific?
//-----------------------------------------
return $this->plugin->post_process_upload( $this->attach_post_key, $this->attach_rel_id, $args );
}
// Process upload
/**
* Uploads and saves file
*/
function process_upload()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$this->error = '';
$this->get_upload_form_settings();
//-----------------------------------------
// Check upload dir
//-----------------------------------------
if ( ! $this->check_upload_dir() )
{
if ( $this->error )
{
return;
}
}
//-----------------------------------------
// Got attachment types?
//-----------------------------------------
if ( ! isset( $this->ipsclass->cache['attachtypes'] ) OR ! is_array( $this->ipsclass->cache['attachtypes'] ) )
{
$this->ipsclass->cache['attachtypes'] = array();
$this->ipsclass->DB->simple_construct( array( 'select' => 'atype_extension,atype_mimetype,atype_post,atype_photo,atype_img',
'from' => 'attachments_type',
'where' => "atype_photo=1 OR atype_post=1" ) );
$this->ipsclass->DB->simple_exec();
while ( $r = $this->ipsclass->DB->fetch_row() )
{
$this->ipsclass->cache['attachtypes'][ $r['atype_extension'] ] = $r;
}
}
//-----------------------------------------
// Can upload?
//-----------------------------------------
if ( ! $this->attach_stats['allow_uploads'] )
{
$this->error = 'no_upload_permission';
return;
}
//-----------------------------------------
// Set up array
//-----------------------------------------
$attach_data = array(
'attach_ext' => "",
'attach_file' => "",
'attach_location' => "",
'attach_thumb_location' => "",
'attach_hits' => 0,
'attach_date' => time(),
'attach_temp' => 0,
'attach_post_key' => $this->attach_post_key,
'attach_member_id' => $this->ipsclass->member['id'],
'attach_rel_id' => $this->attach_rel_id,
'attach_rel_module' => $this->type,
'attach_filesize' => 0,
'attach_files' => "",
'torrent_id' => "",
);
//-----------------------------------------
// Load the library
//-----------------------------------------
require_once( KERNEL_PATH.'class_upload.php' );
$upload = new class_upload();
//-----------------------------------------
// Set up the variables
//-----------------------------------------
$upload->out_file_name = $this->type.'-'.$this->ipsclass->member['id'].'-'.time();
$upload->out_file_dir = $this->upload_path;
$upload->max_file_size = $this->attach_stats['max_single_upload'] ? $this->attach_stats['max_single_upload'] : 1000000000;
$upload->make_script_safe = 1;
$upload->force_data_ext = 'ipb';
//-----------------------------------------
// Populate allowed extensions
//-----------------------------------------
if ( is_array( $this->ipsclass->cache['attachtypes'] ) and count( $this->ipsclass->cache['attachtypes'] ) )
{
foreach( $this->ipsclass->cache['attachtypes'] as $idx => $data )
{
if ( $data['atype_post'] )
{
$upload->allowed_file_ext[] = $data['atype_extension'];
}
}
}
//-----------------------------------------
// Upload...
//-----------------------------------------
$upload->upload_process();
//-----------------------------------------
// Error?
//-----------------------------------------
if ( $upload->error_no )
{
switch( $upload->error_no )
{
case 1:
// No upload
$this->error = 'upload_no_file';
return $attach_data;
break;
case 2:
// Invalid file ext
$this->error = 'invalid_mime_type';
return $attach_data;
break;
case 3:
// Too big...
$this->error = 'upload_too_big';
return $attach_data;
break;
case 4:
// Cannot move uploaded file
$this->error = 'upload_failed';
return $attach_data;
break;
case 5:
// Possible XSS attack (image isn't an image)
$this->error = 'upload_failed';
return $attach_data;
break;
}
}
//-----------------------------------------
// Still here?
//-----------------------------------------
if ( $upload->saved_upload_name and @file_exists( $upload->saved_upload_name ) )
{
//-----------------------------------------
// Strip off { } and [ ]
//-----------------------------------------
$upload->original_file_name = preg_replace( "#[\[\]\{\}]#", "", $upload->original_file_name );
$attach_data['attach_filesize'] = @filesize( $upload->saved_upload_name );
$attach_data['attach_location'] = $this->upload_dir . $upload->parsed_file_name;
$attach_data['attach_file'] = $upload->original_file_name;
$attach_data['attach_is_image'] = $upload->is_image;
$attach_data['attach_ext'] = $upload->real_file_extension;
if ( $attach_data['attach_is_image'] == 1 )
{
require_once( KERNEL_PATH.'class_image.php' );
$image = new class_image();
$image->in_type = 'file';
$image->out_type = 'file';
$image->in_file_dir = $this->upload_path;
$image->in_file_name = $upload->parsed_file_name;
$image->desired_width = $this->settings['siu_width'];
$image->desired_height = $this->settings['siu_height'];
$image->gd_version = $this->ipsclass->vars['gd_version'];
if ( $this->settings['siu_thumb'] )
{
$thumb_data = $image->generate_thumbnail();
}
if ( $thumb_data['thumb_location'] )
{
$attach_data['attach_img_width'] = $thumb_data['original_width'];
$attach_data['attach_img_height'] = $thumb_data['original_height'];
$attach_data['attach_thumb_width'] = $thumb_data['thumb_width'];
$attach_data['attach_thumb_height'] = $thumb_data['thumb_height'];
$attach_data['attach_thumb_location'] = $this->upload_dir . $thumb_data['thumb_location'];
}
}
/*
+------------------------------------------------------------------------------
| IPBTracker v2.x
| =============================================
| by Jaggi
| (c) 2002 - 2007 IPBTracker.eu.
| =============================================
+-------------------------------------------------------------------------------
+-------------------------------------------------------------------------------
|
| > This code will upload a torrent onto a XBT Tracker
| > Only works with anonymous_connect = 0
| > Date Started: 15/02/07
| > benc.php is a GPL licenced and may be used freely, some of the decoding
| - array is also GPL licenced and may be used freely, gain permission if unsure
| - as the rest of the script is NOT GPL licenced.
+--------------------------------------------------------------------------------
*/
if ( $attach_data['attach_ext'] == 'torrent' )
{
require ROOT_PATH."sources/lib/func_benc.php";
$this->lib = new func_benc($this);
$this->lib->ipsclass =& $this->ipsclass;
//-----------------------------------------
// Gather Torrent Information
//-----------------------------------------
$torrent = $this->lib->bdec_file($upload->saved_upload_name, 1 << 20);
if ( !isset( $torrent ) )
{
$this->error = 'missing_length';
return $attach;
}
$attach['info_hash'] = pack('H*', sha1($torrent['value']['info']['string']));
$attach['name'] = str_replace('.torrent', '', $attach_data['attach_file'] );
$piece_count = $torrent['value']['info']['value']['pieces']['strlen'] / 20;
$piece_length = $torrent['value']['info']['value']['piece length']['value'];
$attach['size'] = $piece_count * $piece_length;
$attach['tracker'] = $torrent['value']['announce']['value'];
$attach['announce_list'] = $torrent['value']['announce-list']['value'];
if ( $attach['announce_list'] )
{
$this->error = 'invalid_announce_list';
return;
}
if ( $attach['tracker'] != $this->ipsclass->vars['announce_url'] )
{
$this->error = 'invalid_announce';
return;
}
//-----------------------------------------
// Gather Files Information
//-----------------------------------------
list( $ann, $info ) = $this->lib->dict_check( $torrent, "announce(string):info" );
list( $dname, $plen, $pieces ) = $this->lib->dict_check( $info, "name(string):piece length(integer):pieces(string)" );
$filelist = array();
$size = $this->lib->dict_get( $info, "length", "integer" );
// Invalid Torrent Hash
if ( strlen( $attach['info_hash'] ) != 20 )
{
$this->error = 'invalid_hash';
return;
}
if ( strlen( $pieces ) % 20 != 0 )
{
// Invalid Torrent pieces
$this->error = 'invalid_pieces';
return;
}
if ( isset( $size ) )
{
$filelist[] = array( $dname, $size );
$attach['type'] = "single";
}
else
{
$flist = $this->lib->dict_get( $info, "files", "list" );
$size = 0;
// Missing Length
if ( !isset( $flist ) )
{
$this->error = 'missing_length';
return;
}
// No files in torrent
if ( !count( $flist ) )
{
$this->error = 'no_files';
return;
}
foreach ($flist as $fn)
{
list( $ll, $ff ) = $this->lib->dict_check( $fn, "length(integer):path(list)" );
$size += $ll;
$ffa = array();
foreach ( $ff as $ffe )
{
if ( $ffe["type"] != "string" )
{
// Invalid Name
$this->error = 'name_error';
return;
}
$ffa[] = $ffe["value"];
}
if ( !count( $ffa ) )
{
// Invalid Name
$this->error = 'name_error';
return;
}
$ffe = implode( "/", $ffa );
$filelist[] = array( $ffe, $ll );
}
$attach['type'] = "multi";
}
//-----------------------------------------
// Serialize the file info
//-----------------------------------------
$attach_data['attach_files'] = serialize( $filelist );
$attach['numfiles'] = count( $filelist );
//-----------------------------------------
// Check if Exists and Insert information
//-----------------------------------------
$this->ipsclass->DB->query("SELECT info_hash FROM torrents WHERE info_hash='". addslashes( $attach['info_hash'] ) ."'");
if ( !$this->ipsclass->DB->get_num_rows() )
{
$this->ipsclass->DB->query("INSERT INTO torrents ( filename, info_hash, name, size, numfiles, type, added, oid )
VALUES ( '".$attach_data['attach_file']."',
'".addslashes($attach['info_hash'])."',
'".$attach['name']."',
'".$attach['size']."',
'".$attach['numfiles']."',
'".$attach['type']."',
'".time()."',
'".intval( $attach_data['attach_member_id'] )."')
");
$attach_data['torrent_id'] = $this->ipsclass->DB->get_insert_id();
//-------------------------------------------------
// Does Member Exist
//-------------------------------------------------
$asql = $this->ipsclass->DB->query("SELECT uid
FROM users
WHERE uid='" . intval( $attach_data['attach_member_id'] ) . "'
LIMIT 1
");
$this->ipsclass->DB->simple_exec();
if ( !$this->ipsclass->DB->get_num_rows() )
{
$this->ipsclass->DB->query("INSERT INTO users (uid, name, email, added, peers_limit)
VALUES ('" . $this->ipsclass->member['id'] . "',
'" . $this->ipsclass->member['name'] . "',
'" . $this->ipsclass->member['email'] . "',
'" . time() . "',
'1' )
");
}
//-----------------------------------------
// If on give user a upload bonus, set in acp
//-----------------------------------------
if ( $this->ipsclass->vars['upload_bonus'] != 0 )
{
$this->ipsclass->DB->query("SELECT uploaded FROM users WHERE uid='" . $attach_data['attach_member_id'] . "' ");
$sql = $this->ipsclass->DB->fetch_row();
$this->ipsclass->DB->query("UPDATE users SET uploaded='" . $sql['uploaded'] ."' + '" . $this->ipsclass->vars['upload_bonus'] . "' WHERE uid=".$attach_data['attach_member_id'] );
}
}
else
{
// This Torrent Already Exists
$this->error = 'already_ul';
return;
}
}
//-----------------------------------------
// End of IPBTracker Modification
//-----------------------------------------
//-----------------------------------------
// Add into Database
//-----------------------------------------
$this->ipsclass->DB->do_insert( 'attachments', $attach_data );
$newid = $this->ipsclass->DB->get_insert_id();
return $newid;
}
}
// Upload form stuff
/**
* Gets stuff required for the upload form
*/
function get_upload_form_settings()
{
//-----------------------------------------
// Collect settings from the plug-in
//-----------------------------------------
$stats = $this->plugin->get_space_allowance( $this->attach_post_key );
//-----------------------------------------
// Format and return...
//-----------------------------------------
$this->attach_stats['space_used'] = $stats['space_used'];
$this->attach_stats['space_used_human'] = $this->ipsclass->size_format( $stats['space_used'] );
$this->attach_stats['total_space_allowed'] = $stats['total_space_allowed'] ? $stats['total_space_allowed'] : $stats['max_single_upload'];
$this->attach_stats['max_single_upload'] = $stats['max_single_upload'];
$this->attach_stats['max_single_upload_human'] = $this->attach_stats['max_single_upload'] ? $this->ipsclass->size_format( $stats['max_single_upload'] ) : $this->language[ 'unlimited' ];
$this->attach_stats['total_space_allowed_human'] = $this->attach_stats['total_space_allowed'] ? $this->ipsclass->size_format( $this->attach_stats['total_space_allowed'] ) : $this->language[ 'unlimited' ];
if ( $stats['space_allowed'] == 0 )
{
//-----------------------------------------
// Unlimited...
//-----------------------------------------
$this->attach_stats['allow_uploads'] = 1;
$this->attach_stats['space_allowed'] = 'unlimited';
$this->attach_stats['space_allowed_human'] = $this->language[ 'unlimited' ];
$this->attach_stats['space_left'] = 'unlimited';
$this->attach_stats['space_left_human'] = $this->language[ 'unlimited' ];
$this->attach_stats['total_space_allowed_human'] = $this->language[ 'unlimited' ];
//$this->attach_stats['space_used_human'] = $this->language[ 'unlimited' ];
}
else if ( $stats['space_allowed'] == -1 )
{
//-----------------------------------------
// None
//-----------------------------------------
$this->attach_stats['allow_uploads'] = 0;
$this->attach_stats['space_allowed'] = 'not_allowed';
$this->attach_stats['space_allowed_human'] = $this->language[ 'not_allowed' ];
$this->attach_stats['space_left'] = 'not_allowed';
$this->attach_stats['space_left_human'] = $this->language[ 'not_allowed' ];
}
else
{
//-----------------------------------------
// Set figure
//-----------------------------------------
$this->attach_stats['allow_uploads'] = 1;
$this->attach_stats['space_left'] = $stats['space_left'];
$this->attach_stats['space_left_human'] = $this->ipsclass->size_format( $stats['space_left'] );
}
}
// Check uploads dir
/**
* Checks the upload dir
* See above. It's not rocket science
*
* @return void
*/
function check_upload_dir()
{
//-----------------------------------------
// Check dir exists...
//-----------------------------------------
if ( ! file_exists( $this->upload_path ) )
{
if ( @mkdir( $this->upload_path, 0777 ) )
{
@chmod( $this->upload_path, 0777 );
}
else
{
$this->error = "no_upload_dir";
return false;
}
}
else if ( ! is_writeable( $this->upload_path ) )
{
$this->error = "no_upload_dir_perms";
return false;
}
//-----------------------------------------
// Try and create a new monthly dir
// eg: monthly_12_2005
//-----------------------------------------
$this_month = "monthly_" . gmdate( "m_Y", time() );
//-----------------------------------------
// Already a dir?
//-----------------------------------------
if ( $this->settings['allow_monthly_upload_dirs'] )
{
$path = $this->upload_path . "/" . $this_month;
if ( ! file_exists( $path ) )
{
if ( @mkdir( $path, 0777 ) )
{
@chmod( $path, 0777 );
# Set path and dir correct
$this->upload_path .= "/" . $this_month;
$this->upload_dir = $this_month."/";
}
//-----------------------------------------
// Was it really made or was it lying?
//-----------------------------------------
if ( ! file_exists( $path ) )
{
$this->upload_path = $this->_upload_path;
$this->upload_dir = '/';
}
}
else
{
# Set path and dir correct
$this->upload_path .= "/" . $this_month;
$this->upload_dir = $this_month."/";
}
}
return true;
}
// Load plug-in class
/**
* Loads child extends class.
*/
function load_plugin()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$this->type = $this->ipsclass->txt_alphanumerical_clean( $this->type );
//-----------------------------------------
// Load...
//-----------------------------------------
$file = ROOT_PATH . 'sources/classes/attach/plugin_'.$this->type.'.php';
$class = 'plugin_'.$this->type;
if ( ! is_object( $this->plugin ) )
{
if ( file_exists( $file ) )
{
require_once( $file );
$this->plugin = new $class;
$this->plugin->ipsclass =& $this->ipsclass;
$this->plugin->get_settings();
}
else
{
print "Could not locate $file";
exit();
}
}
}
// Parse thumbnail attachments inline
/**
* Swaps the HTML for the nice attachments.
*
* @param array Array of matches from preg_replace_callback
* @return string HTML
*/
function _parse_thumbnail_inline( $matches )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$row = $this->_current['row'];
$skin_name = $this->_current['skin_name'];
//-----------------------------------------
// Generate random ID
//-----------------------------------------
$row['_attach_id'] = $row['attach_id'] . '-' . preg_replace( "#[\.\s]#", "-", microtime() );
//-----------------------------------------
// Build HTML
//-----------------------------------------
$tmp = $this->ipsclass->compiled_templates[ $skin_name ]->Show_attachments_img_thumb( array( 't_location' => $row['attach_thumb_location'],
't_width' => $row['attach_thumb_width'],
't_height' => $row['attach_thumb_height'],
'o_width' => $row['attach_img_width'],
'o_height' => $row['attach_img_height'],
'attach_id' => $row['attach_id'],
'_attach_id' => $row['_attach_id'],
'file_size' => $this->ipsclass->size_format( $row['attach_filesize'] ),
'attach_hits' => $row['attach_hits'],
'location' => $row['attach_file'],
'type' => $this->_current['type'],
) );
return $tmp;
}
}
?>
/*
+--------------------------------------------------------------------------
| IPBTracker v2.x
| =============================================
| by Jaggi
| (c) 2002 - 2007 IPBTracker.eu.
| =============================================
+---------------------------------------------------------------------------
+---------------------------------------------------------------------------
|
| > This code will edit the torrent on download
| > Adds passkey
| > Automatically changes announce url to one set in admincp.
| > benc.php is a GPL licenced and may be used freely, this doesn't apply
| - to the rest of the code in this script.
+--------------------------------------------------------------------------
*/
if ( $attach['attach_ext'] == 'torrent' && !empty( $attach['torrent_id'] ) )
{
require ROOT_PATH."sources/lib/func_benc.php";
$this->lib = new func_benc( $this );
$this->lib->ipsclass =& $this->ipsclass;
$dict = $this->lib->bdec_file( $file, filesize( $file ) );
//-------------------------------------------------
// Does Member Exist
//-------------------------------------------------
$rsql = $this->ipsclass->DB->query("SELECT torrent_pass
FROM users
WHERE uid='" . intval( $this->ipsclass->member['id'] ) . "'
LIMIT 1
");
$this->ipsclass->DB->simple_exec();
$r = $this->ipsclass->DB->fetch_row( $rsql );
if ( !$this->ipsclass->DB->get_num_rows() )
{
//-------------------------------------------------
// Store passkey and create members tracker details
//-------------------------------------------------
$r['torrent_pass'] = $this->ipsclass->generate_torrent_pass();
$this->ipsclass->DB->query("INSERT INTO users (uid, name, email, added, peers_limit, torrent_pass)
VALUES ('" . $this->ipsclass->member['id'] . "',
'" . $this->ipsclass->member['name'] . "',
'" . $this->ipsclass->member['email'] . "',
'" . time() . "',
'1',
'" . $r['torrent_pass'] . "' )
");
}
else if ( $r['torrent_pass'] == '' )
{
//-------------------------------------------------
// No passkey? give them one!
//-------------------------------------------------
$r['torrent_pass'] = $this->ipsclass->generate_torrent_pass();
$ssql = $this->ipsclass->DB->query("UPDATE users
SET torrent_pass ='" . $r['torrent_pass'] . "'
WHERE uid='" . intval( $this->ipsclass->member['id'] ) . "'
");
}
if ( $this->ipsclass->vars['add_passkey'] )
{
//-------------------------------------------------
// Compile passkey and announce URL.
//-------------------------------------------------
$announce_url = preg_replace( "/^(http:\/\/.*?:\d+)(\/announce)/is", "$1/{$r['torrent_pass']}$2", $this->ipsclass->vars['announce_url'] );
}
if ( !$this->ipsclass->member['id'] || !$this->ipsclass->vars['add_passkey'] )
{
$r['torrent_pass'] = '';
$announce_url = $this->ipsclass->vars['announce_url'];
}
//-------------------------------------------------
// Add passkey URL.
//-------------------------------------------------
$dict['value']['announce']['value'] = $announce_url;
$dict['value']['announce']['string'] = strlen( $dict['value']['announce']['value'] ) . ":" . $dict['value']['announce']['value'];
$dict['value']['announce']['strlen'] = strlen( $dict['value']['announce']['string'] );
//-------------------------------------------------
// End and wrap everything up.
//-------------------------------------------------
$fn = $this->lib->benc($dict);
header( "Content-Type: ".$this->ipsclass->cache['attachtypes'][ $attach['attach_ext'] ]['atype_mimetype'] );
header( "Content-Disposition: inline; filename=\"".$attach['attach_file']."\"" );
header( "Content-Length: ".(string)(strlen( $fn ) ) );
print $fn;
exit();
}
//-------------------------------------------------
// End of IPBTracker Modification.
//-------------------------------------------------
IPB Trace?
Добавлено через 41 секунду
Есть норм трекер на 2,3,6?
Добавлено через 12 минут
Ребята подскажите, какой лучше на ипбшку 2.3.6?
IPBTracker 2.0
Publiс Beta 1 Public Beta 2
Бета 1 или Бета 2?
Я ее внимательно читал, много что было не понятно и понятно.Если бы ты внимательно читал тему а не пытался тупо набивать посты, то давно бы понял что куда и как.
Уху, спасибо большое. Ток вот еще один вопрос, Какую версию Отсюда взять-то? Для просмотра ссылки ВойдиКонечно Бету 2. Бета 1 посырее будет намного.