/**
* Upload un torrent
*
* @access public
* @return View torrent.upload
*
*/
public function upload()
{
$user = Auth::user();
// Post et fichier upload
if (Request::isMethod('post')) {
// No torrent file uploaded OR an Error has occurred
if (Input::hasFile('torrent') == false) {
Session::put('message', 'You must provide a torrent for the upload');
return View::make('torrent.upload', array('categories' => Category::all(), 'user' => $user));
} else {
if (Input::file('torrent')->getError() != 0 && Input::file('torrent')->getClientOriginalExtension() != 'torrent') {
Session::put('message', 'An error has occurred');
return View::make('torrent.upload', array('categories' => Category::all(), 'user' => $user));
}
}
// Deplace et decode le torrent temporairement
TorrentTools::moveAndDecode(Input::file('torrent'));
// Array from decoded from torrent
$decodedTorrent = TorrentTools::$decodedTorrent;
// Tmp filename
$fileName = TorrentTools::$fileName;
// Info sur le torrent
$info = Bencode::bdecode_getinfo(getcwd() . '/files/torrents/' . $fileName, true);
// Si l'announce est invalide ou si le tracker et privée
if ($decodedTorrent['announce'] != route('announce', ['passkey' => $user->passkey]) && Config::get('other.freeleech') == true) {
Session::put('message', 'Your announce URL is invalid');
return View::make('torrent.upload', array('categories' => Category::all(), 'user' => $user));
}
// Find the right category
$category = Category::find(Input::get('category_id'));
// Create the torrent (DB)
$torrent = new Torrent(['name' => Input::get('name'), 'slug' => Str::slug(Input::get('name')), 'description' => Input::get('description'), 'info_hash' => $info['info_hash'], 'file_name' => $fileName, 'num_file' => $info['info']['filecount'], 'announce' => $decodedTorrent['announce'], 'size' => $info['info']['size'], 'nfo' => Input::hasFile('nfo') ? TorrentTools::getNfo(Input::file('nfo')) : '', 'category_id' => $category->id, 'user_id' => $user->id]);
// Validation
$v = Validator::make($torrent->toArray(), $torrent->rules);
if ($v->fails()) {
if (file_exists(getcwd() . '/files/torrents/' . $fileName)) {
unlink(getcwd() . '/files/torrents/' . $fileName);
}
Session::put('message', 'An error has occured may bee this file is already online ?');
} else {
// Savegarde le torrent
$torrent->save();
// Compte et sauvegarde le nombre de torrent dans cette catégorie
$category->num_torrent = Torrent::where('category_id', '=', $category->id)->count();
$category->save();
// Sauvegarde les fichiers que contient le torrent
$fileList = TorrentTools::getTorrentFiles($decodedTorrent);
foreach ($fileList as $file) {
$f = new TorrentFile();
$f->name = $file['name'];
$f->size = $file['size'];
$f->torrent_id = $torrent->id;
$f->save();
unset($f);
}
return Redirect::route('torrent', ['slug' => $torrent->slug, 'id' => $torrent->id])->with('message', trans('torrent.your_torrent_is_now_seeding'));
}
}
return View::make('torrent.upload', array('categories' => Category::all(), 'user' => $user));
}