public static function run_ex($hash, $fname) { $torrent = new Torrent($fname); if (!$torrent->errors()) { foreach (self::$TRACKERS as $key => $value) { if (strpos($torrent->comment(), $key) !== FALSE) { return call_user_func($value, $torrent->comment(), $hash, $torrent); } } } return self::STE_NOT_NEED; }
public static function getSource($hash) { $req = new rXMLRPCRequest(array(new rXMLRPCCommand("get_session"), new rXMLRPCCommand("d.get_tied_to_file", $hash))); if ($req->run() && !$req->fault) { $fname = $req->val[0] . $hash . ".torrent"; if (empty($req->val[0]) || !is_readable($fname)) { if (strlen($req->val[1]) && is_readable($req->val[1])) { $fname = $req->val[1]; } else { $fname = null; } } if ($fname) { $torrent = new Torrent($fname); if (!$torrent->errors()) { return $torrent; } } } return false; }
$hash = $argv[1]; $req = new rXMLRPCRequest(array(new rXMLRPCCommand("get_session"), new rXMLRPCCommand("d.get_custom4", $hash), new rXMLRPCCommand("d.get_tied_to_file", $hash), new rXMLRPCCommand("d.get_custom1", $hash), new rXMLRPCCommand("d.get_directory_base", $hash), new rXMLRPCCommand("d.is_private", $hash), new rXMLRPCCommand("d.get_name", $hash))); if ($req->success()) { $isStart = $req->val[1] != 0; if ((count($trks->list) || count($trks->todelete)) && !($req->val[5] && $trks->dontAddPrivate) && $req->val[6] != $hash . ".meta") { $fname = $req->val[0] . $hash . ".torrent"; if (empty($req->val[0]) || !is_readable($fname)) { if (strlen($req->val[2]) && is_readable($req->val[2])) { $fname = $req->val[2]; } else { $fname = null; } } if ($fname) { $torrent = new Torrent($fname); if (!$torrent->errors()) { $needToProcessed = true; $lst = $torrent->announce_list(); if (!$lst) { if (count($trks->list)) { if ($torrent->announce()) { $torrent->announce_list($trks->addToBegin ? array_merge($trks->list, array(array($torrent->announce()))) : array_merge(array(array($torrent->announce())), $trks->list)); } else { $torrent->announce($trks->list[0][0]); $torrent->announce_list($trks->list); } } else { $needToProcessed = false; } } else { $addition = $trks->list;
public function uploaded() { $db = JFactory::getDBO(); $user = JFactory::getUser(); $params = JComponentHelper::getParams('com_tracker'); $app = JFactory::getApplication(); // Let's start to play with it $temp_torrent['name'] = $_POST['jform']['name']; $temp_torrent['categoryID'] = $_POST['jform']['categoryID']; $temp_torrent['description'] = $_POST['jform']['description']; if ($params->get('torrent_tags') == 1) { $temp_torrent['tags'] = $_POST['jform']['tags']; } else { $temp_torrent['tags'] = ''; } if ($params->get('enable_licenses') == 1) { $licenseID = $_POST['jform']['licenseID']; } else { $licenseID = 0; } if ($params->get('forum_post_id') == 1) { $forum_post = $_POST['jform']['forum_post']; } else { $forum_post = 0; } if ($params->get('torrent_information') == 1) { $info_post = $_POST['jform']['info_post']; } else { $info_post = 0; } if ($params->get('allow_upload_anonymous') == 1) { $uploader_anonymous = $_POST['jform']['uploader_anonymous']; } else { $uploader_anonymous = 0; } if ($params->get('freeleech') == 1) { $download_multiplier = 0; } else { $download_multiplier = 1; } // ------------------------------------------------------------------------------------------------------------------------ // Let's take care of the .torrent file first $temp_torrent['filename'] = $_FILES['jform']['name']['filename']; $temp_torrent['temp_file'] = $_FILES['jform']['tmp_name']['filename']; // Sanitize the filename $temp_torrent['filename'] = TrackerHelper::sanitize_filename($temp_torrent['filename']); // If something wrong happened during the file upload, we bail out if (!is_uploaded_file($_FILES['jform']['tmp_name']['filename'])) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_OPS_SOMETHING_HAPPENED'), 'error'); } // If we try to upload an empty file (0 bytes size) if ($_FILES['jform']['size']['filename'] == 0) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_EMPTY_FILE'), 'error'); } // Check if the torrent file is really a valid torrent file if (!Torrent::is_torrent($_FILES['jform']['tmp_name']['filename'])) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_NOT_BENCODED_FILE'), 'error'); } // Let's create our new torrent object $torrent = new Torrent($_FILES['jform']['tmp_name']['filename']); // And check for errors. Need to find a way to test them all :) if ($errors = $torrent->errors()) { var_dump($errors); } // Private Torrents if ($params->get('make_private') == 1 && !$torrent->is_private()) { $torrent->is_private(true); } // If the user didnt wrote a name for the torrent, we get it from the filename if (empty($_POST['jform']['name'])) { $filename = pathinfo($_FILES['jform']['name']['filename']); $torrent->name($filename['filename']); } else { $torrent->name($_POST['jform']['name']); } $query = $db->getQuery(true); $query->select('count(fid)'); $query->from('#__tracker_torrents'); $query->where('info_hash = UNHEX("' . $torrent->hash_info() . '")'); $db->setQuery($query); if ($db->loadResult() > 0) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_ALREADY_EXISTS'), 'error'); } // ------------------------------------------------------------------------------------------------------------------------ // The .torrent file is valid, let's continue to our image file (if we choose to use it) if ($params->get('use_image_file')) { // When image_type is don't use image if ($_POST['jform']['image_type'] == 0) { $image_file_query_value = ""; } // When image file is an uploaded file if ($_POST['jform']['image_type'] == 1) { if (!is_uploaded_file($_FILES['jform']['tmp_name']['image_file'])) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_OPS_SOMETHING_HAPPENED_IMAGE'), 'error'); } if (!filesize($_FILES['jform']['tmp_name']['image_file']) || $_FILES['jform']['size']['image_file'] == 0) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_EMPTY_FILE_IMAGE'), 'error'); } if (!TrackerHelper::is_image($_FILES['jform']['tmp_name']['image_file'])) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_NOT_AN_IMAGE_FILE'), 'error'); } $image_file_extension = end(explode(".", $_FILES['jform']['name']['image_file'])); $image_file_query_value = $torrent->hash_info() . '.' . $image_file_extension; $image_file_file = $_FILES['jform']['tmp_name']['image_file']; } // When image file is an external link if ($_POST['jform']['image_type'] == 2) { // If the remote file is unavailable if (@(!file_get_contents($_POST['jform']['image_link'], 0, NULL, 0, 1))) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_REMOTE_IMAGE_INVALID_FILE'), 'error'); } // check if the remote file is not an image if (!is_array(@getimagesize($_POST['jform']['image_link']))) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_REMOTE_IMAGE_NOT_IMAGE'), 'error'); } $image_file_query_value = $_POST['jform']['image_link']; } } else { $image_file_query_value = ""; } // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // All is good, let's insert the record in the database // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //TODO: INSERT THE ORDERING EQUAL TO THE TORRENT ID //Insert the torrent into the table $query->clear(); $query = $db->getQuery(true); $query->insert('#__tracker_torrents'); $query->set('info_hash = UNHEX("' . $torrent->hash_info() . '")'); $query->set('ctime = unix_timestamp()'); $query->set('name = ' . $db->quote($torrent->name())); $query->set('alias = ' . $db->quote($torrent->name())); $query->set('filename = ' . $db->quote($_FILES['jform']['name']['filename'])); $query->set('description = ' . $db->quote($_POST['jform']['description'])); $query->set('categoryID = ' . $db->quote($_POST['jform']['categoryID'])); $query->set('size = ' . $db->quote($torrent->size())); $query->set('created_time = ' . $db->quote(date("Y-m-d H:i:s"))); $query->set('uploader = ' . $db->quote($user->id)); $query->set('number_files = ' . $db->quote(count($torrent->content()))); $query->set('uploader_anonymous = ' . $db->quote($uploader_anonymous)); $query->set('forum_post = ' . $db->quote($forum_post)); $query->set('info_post = ' . $db->quote($info_post)); $query->set('licenseID = ' . $db->quote($licenseID)); $query->set('upload_multiplier = 1'); $query->set('download_multiplier = ' . $db->quote($download_multiplier)); $query->set('image_file = ' . $db->quote($image_file_query_value)); $query->set('tags = ' . $db->quote($temp_torrent['tags'])); $query->set('state = 1'); $db->setQuery($query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } // Get the torrent ID that we've just inserted in the database $torrent_id = $db->insertid(); /* Need to check this. Wrong info for single file torrent Wrong filenames for multi file torrent */ // Insert the list of files of the torrent in the database foreach ($torrent->content() as $filename => $filesize) { $query->clear(); $query = $db->getQuery(true); $query->insert('#__tracker_files_in_torrents'); $query->set('torrentID = ' . $db->quote($torrent_id)); $query->set('filename = ' . $db->quote($filename)); $query->set('size = ' . $db->quote($filesize)); $db->setQuery($query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } } // If we're in freeleech we need to add the record of the new torrent to the freeleech table if ($params->get('freeleech') == 1) { $query->clear(); $query = $db->getQuery(true); $query->insert('#__tracker_torrents_freeleech'); $query->set('fid = ' . $db->quote($torrent_id)); $query->set('download_multiplier = 1'); $db->setQuery($query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } } $upload_error = 0; // Lets try to save the torrent before we continue if (!move_uploaded_file($_FILES['jform']['tmp_name']['filename'], JPATH_SITE . DS . $params->get('torrent_dir') . $torrent_id . "_" . $_FILES['jform']['name']['filename'])) { $upload_error = 1; } // And we should also move the image file if we're using it with the option of uploading an image file if ($params->get('use_image_file') && $_POST['jform']['image_type'] == 1) { if (!move_uploaded_file($_FILES['jform']['tmp_name']['image_file'], JPATH_SITE . DS . 'images/tracker/torrent_image/' . $image_file_query_value)) { $upload_error = 1; } } if ($upload_error == 0) { JFactory::getApplication()->setUserState('com_tracker.uploaded.torrent.data', 0); $app->redirect(JRoute::_('index.php?option=com_tracker&view=torrent&id=' . $torrent_id), JText::_('COM_TRACKER_UPLOAD_OK'), 'message'); } else { $query->clear(); $query = $db->getQuery(true); $query->delete('#__tracker_files_in_torrents'); $query->where('torrent=' . $db->quote($torrent_id)); $db->setQuery($query); $db->query(); if ($error = $db->getErrorMsg()) { $this->setError($error); return false; } $query->clear(); $query = $db->getQuery(true); $query->delete('#__tracker_torrents'); $query->where('fid=' . $db->quote($torrent_id)); $db->setQuery($query); $db->query(); unlink(JPATH_SITE . DS . $params->get('torrent_dir') . $torrent_id . "_*"); $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_PROBLEM_MOVING_FILE'), 'error'); } }
function rtAddTorrent($fname, $isStart, $directory, $label, $dbg = false) { if ($isStart) { $method = 'load_start_verbose'; } else { $method = 'load_verbose'; } if ($dbg) { rtDbg(__FUNCTION__, "1" . $fname); } $torrent = new Torrent($fname); if ($dbg) { rtDbg(__FUNCTION__, "2"); } if ($torrent->errors()) { if ($dbg) { rtDbg(__FUNCTION__, "fail to create Torrent() object"); } return false; } if ($directory && strlen($directory) > 0) { $directory = rtMakeStrParam("d.set_directory=\"" . $directory . "\""); } else { $directory = ""; } $comment = $torrent->comment(); if ($comment && strlen($comment) > 0) { if (isInvalidUTF8($comment)) { $comment = win2utf($comment); } if (strlen($comment) > 0) { $comment = rtMakeStrParam("d.set_custom2=VRS24mrker" . rawurlencode($comment)); if (strlen($comment) > 4096) { $comment = ''; } } } else { $comment = ""; } if ($label && strlen($label) > 0) { $label = rtMakeStrParam("d.set_custom1=\"" . rawurlencode($label) . "\""); } else { $label = ""; } $addition = ""; global $saveUploadedTorrents; $delete_tied = $saveUploadedTorrents ? "" : rtMakeStrParam("d.delete_tied="); $content = '<?xml version="1.0" encoding="UTF-8"?>' . '<methodCall>' . '<methodName>' . $method . '</methodName>' . '<params>' . '<param><value><string>' . $fname . '</string></value></param>' . $directory . $comment . $label . $addition . $delete_tied . '</params></methodCall>'; //if( $dbg ) rtDbg( __FUNCTION__, $content ); $res = rXMLRPCRequest::send($content); if ($dbg && !empty($res)) { rtDbg(__FUNCTION__, $res); } if (!$res || ($res = '')) { return false; } else { return $torrent->hash_info(); } }
function rtSetDataDir($hash, $dest_path, $add_path, $move_files, $fast_resume, $dbg = false) { if ($dbg) { rtDbg(__FUNCTION__, "hash : " . $hash); } if ($dbg) { rtDbg(__FUNCTION__, "dest_path : " . $dest_path); } if ($dbg) { rtDbg(__FUNCTION__, "add path : " . ($add_path ? "1" : "0")); } if ($dbg) { rtDbg(__FUNCTION__, "move files : " . ($move_files ? "1" : "0")); } if ($dbg) { rtDbg(__FUNCTION__, "fast resume : " . ($fast_resume ? "1" : "0")); } $is_open = false; $is_active = false; $is_multy_file = false; $base_name = ''; $base_path = ''; $base_file = ''; $is_ok = true; if ($dest_path == '') { $is_ok = false; } else { $dest_path = rtAddTailSlash($dest_path); } // Check if torrent is open or active if ($is_ok) { $req = rtExec(array("d.is_open", "d.is_active"), $hash, $dbg); if (!$req) { $is_ok = false; } else { $is_open = $req->val[0] != 0; $is_active = $req->val[1] != 0; if ($dbg) { rtDbg(__FUNCTION__, "is_open=" . $req->val[0] . ", is_active=" . $req->val[1]); } } } // Open closed torrent to get d.get_base_path, d.get_base_filename if ($is_ok && $move_files) { if (!$is_open && !rtExec("d.open", $hash, $dbg)) { $is_ok = false; } } // Ask info from rTorrent if ($is_ok && $move_files) { $req = rtExec(array("d.get_name", "d.get_base_path", "d.get_base_filename", "d.is_multi_file", "d.get_complete"), $hash, $dbg); if (!$req) { $is_ok = false; } else { $base_name = trim($req->val[0]); $base_path = trim($req->val[1]); $base_file = trim($req->val[2]); $is_multy_file = $req->val[3] != 0; if ($req->val[4] == 0) { // if torrent is not completed -> "fast start" is impossible $fast_resume = false; } if ($dbg) { rtDbg(__FUNCTION__, "d.get_name : " . $base_name); } if ($dbg) { rtDbg(__FUNCTION__, "d.get_base_path : " . $base_path); } if ($dbg) { rtDbg(__FUNCTION__, "d.get_base_filename : " . $base_file); } if ($dbg) { rtDbg(__FUNCTION__, "d.is_multy_file : " . $req->val[3]); } if ($dbg) { rtDbg(__FUNCTION__, "d.get_complete : " . $req->val[4]); } } } // Check if paths are valid if ($is_ok && $move_files) { if ($base_path == '' || $base_file == '') { if ($dbg) { rtDbg(__FUNCTION__, "base paths are empty"); } $is_ok = false; } else { // Make $base_path a really BASE path for downloading data // (not including single file or subdir for multiple files). // Add trailing slash, if none. $base_path = rtRemoveTailSlash($base_path); $base_path = rtRemoveLastToken($base_path, '/'); // filename or dirname $base_path = rtAddTailSlash($base_path); } } // Get list of torrent data files $torrent_files = array(); if ($is_ok && $move_files) { $req = rtExec("f.multicall", array($hash, "", "f.get_path="), $dbg); if (!$req) { $is_ok = false; } else { $torrent_files = $req->val; if ($dbg) { rtDbg(__FUNCTION__, "files in torrent : " . count($torrent_files)); } } } // 1. Stop torrent if active (if not, then rTorrent can crash) // 2. Close torrent anyway if ($is_ok) { $cmds = array(); if ($is_active) { $cmds[] = "d.stop"; } if ($is_open || $move_files) { $cmds[] = "d.close"; } if (count($cmds) > 0 && !rtExec($cmds, $hash, $dbg)) { $is_ok = false; } } // Move torrent data files to new location if ($is_ok && $move_files) { $full_base_path = $base_path; $full_dest_path = $dest_path; // Don't use "count( $torrent_files ) > 1" check (there can be one file in a subdir) if ($is_multy_file) { // torrent is a directory $full_base_path .= rtAddTailSlash($base_file); $full_dest_path .= $add_path ? rtAddTailSlash($base_name) : ""; } else { // torrent is a single file } if ($dbg) { rtDbg(__FUNCTION__, "from " . $full_base_path); } if ($dbg) { rtDbg(__FUNCTION__, "to " . $full_dest_path); } if ($full_base_path != $full_dest_path && is_dir($full_base_path)) { if (!rtOpFiles($torrent_files, $full_base_path, $full_dest_path, "Move", $dbg)) { $is_ok = false; } else { // Recursively remove source dirs without files if ($dbg) { rtDbg(__FUNCTION__, "clean " . $full_base_path); } if ($is_multy_file) { rtRemoveDirectory($full_base_path, false); if ($dbg && is_dir($full_base_path)) { rtDbg(__FUNCTION__, "some files were not deleted"); } } } } } if ($is_ok) { // fast resume is requested if ($fast_resume) { if ($dbg) { rtDbg(__FUNCTION__, "trying fast resume"); } // collect variables $session = rTorrentSettings::get()->session; $tied_to_file = null; $label = null; $addition = null; $req = rtExec(array("get_session", "d.get_tied_to_file", "d.get_custom1", "d.get_connection_seed", "d.get_throttle_name"), $hash, $dbg); if (!$req) { $fast_resume = false; } else { $session = $req->val[0]; $tied_to_file = $req->val[1]; $label = rawurldecode($req->val[2]); $addition = array(); if (!empty($req->val[3])) { $addition[] = getCmd("d.set_connection_seed=") . $req->val[3]; } if (!empty($req->val[4])) { $addition[] = getCmd("d.set_throttle_name=") . $req->val[4]; } // build path to .torrent file $fname = rtAddTailSlash($session) . $hash . ".torrent"; if (empty($session) || !is_readable($fname)) { if (!strlen($tied_to_file) || !is_readable($tied_to_file)) { if ($dbg) { rtDbg(__FUNCTION__, "empty session or inaccessible .torrent file"); } $fname = null; $fast_resume = false; } else { $fname = $tied_to_file; } } } // create torrent, remove old and add new one if ($fast_resume) { $torrent = new Torrent($fname); if ($torrent->errors()) { if ($dbg) { rtDbg(__FUNCTION__, "fail to create Torrent object"); } $fast_resume = false; } else { $is_ok = $add_path ? rtExec("d.set_directory", array($hash, $dest_path), $dbg) : rtExec("d.set_directory_base", array($hash, $dest_path), $dbg); // for erasedata plugin if ($is_ok) { if (!rtExec("d.erase", $hash, $dbg)) { if ($dbg) { rtDbg(__FUNCTION__, "fail to erase old torrent"); } $fast_resume = false; } else { if (!rTorrent::sendTorrent($torrent, true, $add_path, $dest_path, $label, true, true, false, $addition)) { if ($dbg) { rtDbg(__FUNCTION__, "fail to add new torrent"); } $fast_resume = false; $is_ok = false; } } } } } if ($dbg) { rtDbg(__FUNCTION__, "fast resume " . ($fast_resume ? "done" : "fail")); } } // fast resume is fail or not requested at all if ($is_ok && !$fast_resume) { // Setup new directory for torrent (we need to stop it first) $is_ok = $add_path ? rtExec("d.set_directory", array($hash, $dest_path), $dbg) : rtExec("d.set_directory_base", array($hash, $dest_path), $dbg); if ($is_ok) { // Start torrent if need if ($is_active) { $is_ok = rtExec(array("d.open", "d.start"), $hash, $dbg); } elseif ($is_open) { $is_ok = rtExec("d.open", $hash, $dbg); } else { $is_ok = rtExec(array("d.open", "d.close"), $hash, $dbg); } } } } if ($dbg) { rtDbg(__FUNCTION__, "finished"); } return $is_ok; }
if ($required_filehostings) { foreach ($required_filehostings as $rfh) { $to_error[] = $rfh['domains']; } $API->error($API->LANG->_('FILE_HOSTING_MISSING_NOTICE', implode('<br/>', $to_error))); } } $magnet = false; if ($file['tmp_name']) { preg_match('/.*\\.torrent$/', $file['name'], $matches); if (!$file['size'] || $file['error'] || !$matches) { $API->error($API->LANG->_('You uploaded invalid .torrent file (zero size, not .torrent extension or upload error)')); } require_once 'classes' . DS . 'Torrent.php'; $torrent = new Torrent($file['tmp_name']); if ($torrent->errors()) { $API->error($API->LANG->_('There is something wrong with your torrent file')); } // do not preform cheks on torrents //$torrent->announce(false); //$torrent->announce(array('http://pixi.appaddict.org:2710/announce')); $magnet = $torrent->magnet(); } require_once 'itgw.inc.php'; $data = get_itunes_info($trackid, $type, $store); if (!$appdata && !$data) { $API->TPL->assign('trackid', $trackid); $API->TPL->display('no-app-error-itunes.tpl'); die; } elseif ($data) { $data['last_parse_itunes'] = $data;
// add a tracker $torrent->announce(false); // reset announce trackers $torrent->announce(array('http://torrent.tracker/annonce', 'http://alternate-torrent.tracker/annonce')); // set tracker(s), it also works with a 'one tracker' array... $torrent->announce(array(array('http://torrent.tracker/annonce', 'http://alternate-torrent.tracker/annonce'), 'http://another-torrent.tracker/annonce')); // set tiered trackers $torrent->comment('hello world'); $torrent->name('test torrent'); $torrent->is_private(true); $torrent->httpseeds('http://file-hosting.domain/path/'); // Bittornado implementation $torrent->url_list(array('http://file-hosting.domain/path/', 'http://another-file-hosting.domain/path/')); // GetRight implementation // print errors if ($errors = $torrent->errors()) { var_dump('<br>DEBUG: ', $errors); // errors method return the error stack } // send to user $torrent->send(); /////////////////////////////////////////////////////////////////////////////// //parse Torrent require 'TorrentReader.php'; $debug = 0; if (!empty($_FILES['torrent'])) { if (!empty($_FILES['torrent']) && empty($_FILES['torrent']['error']) && file_exists($_FILES['torrent']['tmp_name'])) { $szTorrentFile = $_FILES['torrent']['tmp_name']; $szTorrentFileName = $_FILES['torrent']['name']; $szTorrentContent = file_get_contents($szTorrentFile); }
public function edited() { require_once JPATH_COMPONENT_ADMINISTRATOR . '/helpers/tracker.php'; $db = JFactory::getDBO(); $user = JFactory::getUser(); $params = JComponentHelper::getParams('com_tracker'); $app = JFactory::getApplication(); $upload_error = 0; $torrent['fid'] = (int) $_POST['fid']; $torrent['name'] = $_POST['name']; $torrent['filename'] = $_POST['filename']; $torrent['old_filename'] = $_POST['old_filename']; $torrent['description'] = $_POST['description']; $torrent['categoryID'] = (int) $_POST['categoryID']; $torrent['licenseID'] = (int) $_POST['licenseID']; $uploader['anonymous'] = (int) $_POST['uploader_anonymous']; $torrent['upload_multiplier'] = (double) $_POST['upload_multiplier']; $torrent['forum_post'] = (int) $_POST['forum_post']; $torrent['info_post'] = (int) $_POST['info_post']; $torrent['tags'] = $_POST['tags']; // If we're in freeleech if ($params->get('freeleech') == 1) { $torrent['download_multiplier'] = 0; } else { $torrent['download_multiplier'] = (double) $_POST['download_multiplier']; } // ------------------------------------------------------------------------------------------------------------------------ // Now let's see if we've uploaded a new torrent file or choose to keep the old one // ------------------------------------------------------------------------------------------------------------------------ if ($_POST['default_torrent_file'] == 0) { // We're keeping the original torrent if (empty($torrent['name'])) { $torrent['name'] = $torrent['old_filename']; } if (empty($torrent['filename'])) { $torrent['filename'] = $torrent['name'] . '.torrent'; } else { $torrent['filename'] = $torrent['filename'] . '.torrent'; } // Rename the filename if we've changed it if ($torrent['filename'] != $torrent['old_filename'] . '.torrent') { $pre_file = JPATH_SITE . DS . $params->get('torrent_dir') . $torrent['fid'] . '_'; rename($pre_file . $torrent['old_filename'] . '.torrent', $pre_file . $torrent['filename']); } } else { // We've uploaded a new torrent file to replace the old one // Sanitize the filename $torrent['filename'] = TrackerHelper::sanitize_filename($_FILES['filename']['name']); // If something wrong happened during the file upload, we go back to the editing if (!is_uploaded_file($_FILES['filename']['tmp_name'])) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_OPS_SOMETHING_HAPPENED'), 'error'); } // If we try to upload an empty file (0 bytes size) if ($_FILES['filename']['size'] == 0) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_EMPTY_FILE'), 'error'); } // Check if the torrent file is really a valid torrent file if (!Torrent::is_torrent($_FILES['filename']['tmp_name'])) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_NOT_BENCODED_FILE'), 'error'); } // Let's create our new torrent object $new_torrent = new Torrent($_FILES['filename']['tmp_name']); // And check for errors. Need to find a way to test them all :) if ($errors = $new_torrent->errors()) { var_dump($errors); } // Private Torrents if ($params->get('make_private') == 1 && !$new_torrent->is_private()) { $new_torrent->is_private(true); } // If the user didnt wrote a name for the torrent, we get it from the filename if (empty($_POST['filename'])) { $filename = pathinfo($_FILES['filename']['name']); $torrent['filename'] = $filename['filename']; } if (empty($torrent['name'])) { $torrent['name'] = $new_torrent->name(); } // Since we're updating the torrent, we must check if we're not updating it with another one that already exists $query = $db->getQuery(true); $query->select('count(fid)'); $query->from('#__tracker_torrents'); $query->where('info_hash = UNHEX("' . $new_torrent->hash_info() . '")'); $query->where('fid <> ' . (int) $torrent['fid']); $db->setQuery($query); if ($db->loadResult() > 0) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_EDIT_TORRENT_ALREADY_EXISTS'), 'error'); } } // ------------------------------------------------------------------------------------------------------------------------ if ($params->get('use_image_file') == 1) { // When image_type is don't use image if ($_POST['default_image_type'] == 0) { $torrent['image_file'] = $_POST['image_file']; } // When image file is an uploaded file if ($_POST['default_image_type'] == 1) { if (!is_uploaded_file($_FILES['image_file']['tmp_name'])) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_OPS_SOMETHING_HAPPENED_IMAGE'), 'error'); } if (!filesize($_FILES['image_file']['tmp_name']) || $_FILES['image_file']['size'] == 0) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_EMPTY_FILE_IMAGE'), 'error'); } if (!TrackerHelper::is_image($_FILES['image_file']['tmp_name'])) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_NOT_AN_IMAGE_FILE'), 'error'); } if (file_exists('file://' . JPATH_SITE . DS . 'images/tracker/torrent_image/' . $_POST['image_file']) && !empty($_POST['image_file'])) { // Delete the previous image file from disk @unlink(JPATH_SITE . DS . 'images/tracker/torrent_image/' . $_POST['image_file']); } $image_file_extension = end(explode(".", $_FILES['image_file']['name'])); $torrent['image_file'] = $_POST['info_hash'] . '.' . $image_file_extension; $image_file_file = $_FILES['jform']['tmp_name']['image_file']; // And we should also move the image file if we're using it with the option of uploading an image file if (!move_uploaded_file($_FILES['image_file']['tmp_name'], JPATH_SITE . DS . 'images/tracker/torrent_image/' . $torrent['image_file'])) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_PROBLEM_MOVING_FILE'), 'error'); } } // When image file is an external link if ($_POST['default_image_type'] == 2) { // If the remote file is unavailable if (@(!file_get_contents($_POST['image_file'], 0, NULL, 0, 1))) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_REMOTE_IMAGE_INVALID_FILE'), 'error'); } // check if the remote file is not an image if (!is_array(@getimagesize($_POST['image_file']))) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_REMOTE_IMAGE_NOT_IMAGE'), 'error'); } if (file_exists('file://' . JPATH_SITE . DS . 'images/tracker/torrent_image/' . $_POST['image_file']) && !empty($_POST['image_file'])) { // Delete the previous image file from disk @unlink(JPATH_SITE . DS . 'images/tracker/torrent_image/' . $_POST['image_file']); } $torrent['image_file'] = $_POST['image_file']; } if ($_POST['default_image_type'] == 3) { if (file_exists('file://' . JPATH_SITE . DS . 'images/tracker/torrent_image/' . $_POST['image_file']) && !empty($_POST['image_file'])) { // Delete the previous image file from disk @unlink(JPATH_SITE . DS . 'images/tracker/torrent_image/' . $_POST['image_file']); } $torrent['image_file'] = ""; } } else { $torrent['image_file'] = $_POST['image_file']; } // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // All is good, let's update the record in the database // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- $query = $db->getQuery(true); $query->update('#__tracker_torrents'); $query->set('name = ' . $db->quote($torrent['name'])); $query->set('alias = ' . $db->quote($torrent['name'])); $query->set('filename = ' . $db->quote($torrent['filename'])); $query->set('description = ' . $db->quote($torrent['description'])); $query->set('categoryID = ' . $db->quote($torrent['categoryID'])); $query->set('licenseID = ' . $db->quote($torrent['licenseID'])); $query->set('uploader_anonymous = ' . $db->quote($uploader['anonymous'])); $query->set('download_multiplier = ' . $db->quote($torrent['download_multiplier'])); $query->set('upload_multiplier = ' . $db->quote($torrent['upload_multiplier'])); $query->set('forum_post = ' . $db->quote($torrent['forum_post'])); $query->set('info_post = ' . $db->quote($torrent['info_post'])); $query->set('image_file = ' . $db->quote($torrent['image_file'])); $query->set('tags = ' . $db->quote($torrent['tags'])); $query->set('flags = 2'); // Since we're updating the torrent file we must change some values if ($_POST['default_torrent_file'] == 1) { $query->set('info_hash = UNHEX("' . $new_torrent->hash_info() . '")'); $query->set('size = ' . $db->quote($new_torrent->size())); $query->set('number_files = ' . $db->quote(count($new_torrent->content()))); } $query->where('fid = ' . (int) $torrent['fid']); $db->setQuery($query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); $upload_error = $upload_error + 1; } // We're uploading a new torrent file, the torrent contents probably changed if ($_POST['default_torrent_file'] == 1) { // We need to delete the old values $query->clear(); $query = $db->getQuery(true); $query->delete('#__tracker_files_in_torrents'); $query->where('torrentID =' . $db->quote($torrent['fid'])); $db->setQuery($query); $db->query(); if ($error = $db->getErrorMsg()) { $this->setError($error); return false; } // And add the new ones foreach ($new_torrent->content() as $filename => $filesize) { $query->clear(); $query = $db->getQuery(true); $query->insert('#__tracker_files_in_torrents'); $query->set('torrentID = ' . $db->quote($torrent['fid'])); $query->set('filename = ' . $db->quote($filename)); $query->set('size = ' . $db->quote($filesize)); $db->setQuery($query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } } // And we need to overwrite the previous torrent from the server with the new one if (!move_uploaded_file($_FILES['filename']['tmp_name'], JPATH_SITE . DS . $params->get('torrent_dir') . $torrent['fid'] . "_" . $_FILES['filename']['name'])) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_PROBLEM_MOVING_FILE'), 'error'); } // But we also need to delete the old torrent file @unlink(JPATH_SITE . DS . $params->get('torrent_dir') . $torrent['fid'] . "_" . $torrent['old_filename'] . '.torrent'); } // If we're in freeleech we need to edit the record of the torrent in the freeleech table if ($params->get('freeleech') == 1) { $query->clear(); $query = $db->getQuery(true); $query->update('#__tracker_torrents_freeleech'); $query->set('download_multiplier = ' . $_POST['download_multiplier']); $query->where('fid = ' . (int) $torrent['fid']); $db->setQuery($query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } } if ($upload_error == 0) { $app->redirect(JRoute::_('index.php?option=com_tracker&view=torrent&id=' . $torrent['fid']), JText::_('COM_TRACKER_EDIT_OK'), 'message'); } else { $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_EDIT_NOK'), 'error'); } }
public static function run($hash, $state = null, $time = null, $successful_time = null) { global $saveUploadedTorrents; if (is_null($state)) { self::getState($hash, $state, $time, $successful_time); } if ($state == self::STE_INPROGRESS && time() - $time > self::MAX_LOCK_TIME) { $state = 0; } if ($state != self::STE_INPROGRESS) { $state = self::STE_INPROGRESS; if (!self::setState($hash, $state)) { return false; } $fname = rTorrentSettings::get()->session . $hash . ".torrent"; if (is_readable($fname)) { $torrent = new Torrent($fname); if (!$torrent->errors()) { if (preg_match('`^http://(?P<tracker>rutracker)\\.org/forum/viewtopic\\.php\\?t=(?P<id>\\d+)$`', $torrent->comment(), $matches) || preg_match('`^http://(?P<tracker>kinozal)\\.tv/details\\.php\\?id=(?P<id>\\d+)$`', $torrent->comment(), $matches)) { if ($matches["tracker"] == "rutracker") { $client = self::makeClient($torrent->comment()); if ($client->status == 200 && preg_match("`ajax.form_token\\s*=\\s*'(?P<form_token>[^']+)';.*topic_id\\s*:\\s*(?P<topic_id>\\d+),\\s*t_hash\\s*:\\s*'(?P<t_hash>[^']+)'`s", $client->results, $matches1)) { $client->setcookies(); $client->fetch("http://rutracker.org/forum/ajax.php", "POST", "application/x-www-form-urlencoded; charset=UTF-8", "action=get_info_hash" . "&topic_id=" . $matches1["topic_id"] . "&t_hash=" . $matches1["t_hash"] . "&form_token=" . $matches1["form_token"]); if ($client->status == 200) { $ret = json_decode($client->results, true); if ($ret && array_key_exists("ih_hex", $ret) && strtoupper($ret["ih_hex"]) == $hash) { self::setState($hash, self::STE_UPTODATE); return true; } } } $client->setcookies(); $client->fetchComplex("http://dl.rutracker.org/forum/dl.php?t=" . $matches["id"]); } else { if ($matches["tracker"] == "kinozal") { $client = self::makeClient("http://kinozal.tv/get_srv_details.php?action=2&id=" . $matches["id"]); if ($client->status == 200 && preg_match('`<li>.*(?P<hash>[0-9A-Fa-f]{40})</li>`', $client->results, $matches1)) { if (strtoupper($matches1["hash"]) == $hash) { self::setState($hash, self::STE_UPTODATE); return true; } } $client->setcookies(); $client->fetchComplex("http://dl.kinozal.tv/download.php?id=" . $matches["id"]); } else { self::setState($hash, self::STE_NOT_NEED); return true; } } if ($client->status == 200) { $torrent = new Torrent($client->results); if (!$torrent->errors()) { if ($torrent->hash_info() != $hash) { $req = new rXMLRPCRequest(array(new rXMLRPCCommand("d.get_directory_base", $hash), new rXMLRPCCommand("d.get_custom1", $hash), new rXMLRPCCommand("d.get_throttle_name", $hash), new rXMLRPCCommand("d.get_connection_seed", $hash), new rXMLRPCCommand("d.is_open", $hash), new rXMLRPCCommand("d.is_active", $hash), new rXMLRPCCommand("d.get_state", $hash), new rXMLRPCCommand("d.stop", $hash), new rXMLRPCCommand("d.close", $hash))); if ($req->success()) { $addition = array(getCmd("d.set_connection_seed=") . $req->val[3], getCmd("d.set_custom") . "=chk-state," . self::STE_UPDATED, getCmd("d.set_custom") . "=chk-time," . time(), getCmd("d.set_custom") . "=chk-stime," . time()); $isStart = $req->val[4] != 0 && $req->val[5] != 0 && $req->val[6] != 0; if (!empty($req->val[2])) { $addition[] = getCmd("d.set_throttle_name=") . $req->val[2]; } if (preg_match('/rat_(\\d+)/', $req->val[3], $ratio)) { $addition[] = getCmd("view.set_visible=") . "rat_" . $ratio; } $label = rawurldecode($req->val[1]); if (rTorrent::sendTorrent($torrent, $isStart, false, $req->val[0], $label, $saveUploadedTorrents, false, true, $addition)) { $req = new rXMLRPCRequest(new rXMLRPCCommand("d.erase", $hash)); if ($req->success()) { $state = null; } } } } else { $state = self::STE_UPTODATE; } } else { $state = self::STE_DELETED; } } else { $state = $client->status < 0 ? self::STE_CANT_REACH_TRACKER : self::STE_DELETED; } } else { $state = self::STE_NOT_NEED; } } } if ($state == self::STE_INPROGRESS) { $state == self::STE_ERROR; } if (!is_null($state)) { self::setState($hash, $state); } } return $state != self::STE_CANT_REACH_TRACKER; }
public function bulk_import() { require_once JPATH_COMPONENT_ADMINISTRATOR . '/helpers/tracker.php'; require_once JPATH_COMPONENT_SITE . '/helpers/Torrent.php'; $db = JFactory::getDBO(); $params = JComponentHelper::getParams('com_tracker'); $app = JFactory::getApplication(); $user = JFactory::getUser(); $filename = $params->get('import_filename'); $source_folder = $params->get('import_source_folder'); if (empty($filename) || $filename == '-1') { $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_INVALID_FILE')); return false; } $filename = JUri::root() . DS . 'tmp' . DS . $filename; @($handle = fopen($filename, "r")); $header = NULL; $data = array(); if (($handle = fopen($filename, 'r')) !== FALSE) { while (($row = fgetcsv($handle, 1000, $params->get('field_separator'))) !== FALSE) { if (!$header) { $header = $row; } else { $data[] = array_combine($header, $row); } } fclose($handle); } foreach ($data as &$imported_torrent) { // Let's start to play with it $temp_torrent['name'] = $imported_torrent['Name']; $temp_torrent['categoryID'] = $imported_torrent['CategoryID']; $temp_torrent['description'] = $imported_torrent['Description']; if (empty($imported_torrent['Uploader'])) { $temp_torrent['uploader'] = $user->id; } else { $temp_torrent['uploader'] = $imported_torrent['Uploader']; } if ($params->get('enable_licenses') == 1) { $temp_torrent['licenseID'] = $imported_torrent['LicenseID']; } else { $temp_torrent['licenseID'] = 0; } if ($params->get('forum_post_id') == 1) { $temp_torrent['forum_post'] = $imported_torrent['ForumPost']; } else { $temp_torrent['forum_post'] = 0; } if ($params->get('torrent_information') == 1) { $temp_torrent['info_post'] = $imported_torrent['InfoPost']; } else { $temp_torrent['info_post'] = 0; } if ($params->get('allow_upload_anonymous') == 1) { $temp_torrent['uploader_anonymous'] = $imported_torrent['UploaderAnonymous']; } else { $temp_torrent['uploader_anonymous'] = 0; } if ($params->get('torrent_tags') == 1) { $temp_torrent['tags'] = $imported_torrent['Tags']; } else { $temp_torrent['tags'] = ''; } if ($params->get('freeleech') == 1) { $temp_torrent['download_multiplier'] = 0; } else { $temp_torrent['download_multiplier'] = 1; } // ------------------------------------------------------------------------------------------------------------------------ // Let's take care of the .torrent file first $torrent_file = JPATH_ROOT . DS . $source_folder . DS . $imported_torrent['Filename']; $temp_torrent['filename'] = $imported_torrent['Filename']; // If we try to use an empty file if (@filesize($torrent_file) == 0) { $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_TORRENT') . ' - ' . JText::_('COM_TRACKER_UTILITY_IMPORT_EMPTY_FILE') . ' ( ' . $imported_torrent['Filename'] . ' )'); return false; } // Check if the torrent file is really a valid torrent file if (!Torrent::is_torrent($torrent_file)) { $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_TORRENT') . ' - ' . JText::_('COM_TRACKER_UTILITY_IMPORT_NOT_BENCODED_FILE') . ' ( ' . $imported_torrent['Filename'] . ' )'); return false; } // Let's create our new torrent object $torrent = new Torrent($torrent_file); // And check for errors. Need to find a way to test them all :) if ($errors = $torrent->errors()) { var_dump($errors); } // Private Torrents if ($params->get('make_private') == 1 && !$torrent->is_private()) { $torrent->is_private(true); } // If the user didnt wrote a name for the torrent, we get it from the filename if (empty($temp_torrent['name'])) { $filename = pathinfo($torrent_file); $torrent->name($filename['filename']); } $query = $db->getQuery(true); $query->select('count(fid)'); $query->from('#__tracker_torrents'); $query->where('info_hash = UNHEX("' . $torrent->hash_info() . '")'); $db->setQuery($query); if ($db->loadResult() > 0) { $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_ALREADY_EXISTS') . ' - ' . $imported_torrent['Filename']); return false; } // ------------------------------------------------------------------------------------------------------------------------ // The .torrent file is valid, let's continue to our image file (if we choose to use it) $image_type = $imported_torrent['ImageType']; if ($params->get('use_image_file')) { // When image_type is 'don't use image' if ($image_type == 0) { $image_file_query_value = ""; } // When image file is 'uploaded file' if ($image_type == 1) { $image_file = JPATH_ROOT . DS . $source_folder . DS . $imported_torrent['Image']; if (!is_file($image_file)) { $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_OPS_SOMETHING_HAPPENED_IMAGE') . ' - ' . $imported_torrent['Image']); return false; } if (!filesize($image_file)) { $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_EMPTY_FILE_IMAGE') . ' - ' . $imported_torrent['Image']); return false; } if (!TrackerHelper::is_image($image_file)) { $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_NOT_AN_IMAGE_FILE') . ' - ' . $imported_torrent['Image']); return false; } $image_file_extension = end(explode(".", $image_file)); $image_file_query_value = $torrent->hash_info() . '.' . $image_file_extension; $image_file_file = $image_file; } // When image file is an external link if ($image_type == 2) { // If the remote file is unavailable if (@(!file_get_contents($imported_torrent['Image'], 0, NULL, 0, 1))) { echo JText::_('COM_TRACKER_UTILITY_IMPORT_REMOTE_IMAGE_INVALID_FILE'); continue 3; } // check if the remote file is not an image if (!is_array(@getimagesize($imported_torrent['Image']))) { echo JText::_('COM_TRACKER_UTILITY_IMPORT_REMOTE_IMAGE_NOT_IMAGE'); continue 3; } $image_file_query_value = $imported_torrent['Image']; } } else { $image_file_query_value = ""; } // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // All is good, let's insert the record in the database // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //Insert the torrent into the table $query->clear(); $query = $db->getQuery(true); $query->insert('#__tracker_torrents'); $query->set('info_hash = UNHEX("' . $torrent->hash_info() . '")'); $query->set('ctime = unix_timestamp()'); $query->set('name = ' . $db->quote($temp_torrent['name'])); $query->set('alias = ' . $db->quote($temp_torrent['name'])); $query->set('filename = ' . $db->quote($temp_torrent['filename'])); $query->set('description = ' . $db->quote($temp_torrent['description'])); $query->set('categoryID = ' . $db->quote($temp_torrent['categoryID'])); $query->set('size = ' . $db->quote($torrent->size())); $query->set('created_time = ' . $db->quote(date("Y-m-d H:i:s"))); $query->set('uploader = ' . $db->quote($user->id)); $query->set('number_files = ' . $db->quote(count($torrent->content()))); $query->set('uploader_anonymous = ' . $db->quote($temp_torrent['uploader_anonymous'])); $query->set('forum_post = ' . $db->quote($temp_torrent['forum_post'])); $query->set('info_post = ' . $db->quote($temp_torrent['info_post'])); $query->set('licenseID = ' . $db->quote($temp_torrent['licenseID'])); $query->set('upload_multiplier = 1'); $query->set('download_multiplier = ' . $db->quote($temp_torrent['download_multiplier'])); $query->set('image_file = ' . $db->quote($image_file_query_value)); $query->set('tags = ' . $db->quote($temp_torrent['tags'])); $query->set('state = 1'); $db->setQuery($query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } // Get the torrent ID that we've just inserted in the database $torrent_id = $db->insertid(); // Insert the list of files of the torrent in the database foreach ($torrent->content() as $filename => $filesize) { $query->clear(); $query = $db->getQuery(true); $query->insert('#__tracker_files_in_torrents'); $query->set('torrentID = ' . $db->quote($torrent_id)); $query->set('filename = ' . $db->quote($filename)); $query->set('size = ' . $db->quote($filesize)); $db->setQuery($query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } } // If we're in freeleech we need to add the record of the new torrent to the freeleech table if ($params->get('freeleech') == 1) { $query->clear(); $query = $db->getQuery(true); $query->insert('#__tracker_torrents_freeleech'); $query->set('fid = ' . $db->quote($torrent_id)); $query->set('download_multiplier = 1'); $db->setQuery($query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } } $upload_error = 0; // Lets try to save the torrent before we continue if (!copy($torrent_file, JPATH_SITE . DS . $params->get('torrent_dir') . $torrent_id . "_" . $temp_torrent['filename'])) { $upload_error = 1; echo JText::_('COM_TRACKER_UTILITY_IMPORT_COULDNT_COPY_TORRENT'); continue; } else { unlink($torrent_file); } // And we should also move the image file if we're using it with the option of uploading an image file if ($params->get('use_image_file') && $imported_torrent['ImageType'] == 1) { if (!copy($image_file, JPATH_SITE . DS . 'images/tracker/torrent_image/' . $image_file_query_value)) { $upload_error = 1; echo JText::_('COM_TRACKER_UTILITY_IMPORT_COULDNT_COPY_TORRENT_IMAGE'); continue 2; } else { unlink($image_file); } } if ($upload_error == 1) { $query->clear(); $query = $db->getQuery(true); $query->delete('#__tracker_files_in_torrents'); $query->where('torrent=' . $db->quote($torrent_id)); $db->setQuery($query); $db->query(); if ($error = $db->getErrorMsg()) { $this->setError($error); return false; } $query->clear(); $query = $db->getQuery(true); $query->delete('#__tracker_torrents'); $query->where('fid=' . $db->quote($torrent_id)); $db->setQuery($query); $db->query(); @unlink(JPATH_SITE . DS . $params->get('torrent_dir') . $torrent_id . "_" . $temp_torrent['filename']); if ($image_type == 1) { @unlink(JPATH_SITE . DS . 'images/tracker/torrent_image/' . $image_file_query_value); } continue; } JFactory::getApplication()->enqueueMessage(JText::_('COM_TRACKER_UTILITY_IMPORT_TORRENT') . ' \'' . $temp_torrent['filename'] . '\' ' . JText::_('COM_TRACKER_UTILITY_IMPORT_TORRENT_SUCCESS') . '<br>'); } return true; }
function is_torrent($filePath) { $torrent = new Torrent($filePath); $isAccepted = $torrent->errors() ? false : true; if (!$isAccepted) { die("erreurs : <pre>" . print_r($torrent->errors(), true) . "</pre>"); } $isWellFormed = $torrent->name() != null && $torrent->announce() != null; return $isAccepted && $isWellFormed; }