/** * Download */ public function executeDownload(sfWebRequest $r) { // Getting upload from route $u = $this->getRoute()->getObject(); $this->forward404Unless($u); // If it's a torrent if ($u->getHash()) { // If torrent file has gone away, send 404 if (!file_exists('uploads/torrents/' . $u->getUrl())) { $this->forward404(); } // We're gonna rewrite all HTTP headers $this->getResponse()->clearHttpHeaders(); // We're sending a torrent file $this->getResponse()->setContentType('application/x-bittorrent'); // Forcing download and setting filename $this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename="' . $u->getTitle() . '.torrent"'); // If user has a PID, we can use it inside the torrent file if ($this->getUser()->getAttribute("ses")->getPid()) { // Load torrent class require_once "../lib/bittorrent/Autoload.php"; // Open a new torrent instance $torrent = new PHP_BitTorrent_Torrent(); // Loading it $torrent->loadFromTorrentFile('uploads/torrents/' . $u->getUrl()); // Resetting announce $torrent->setAnnounce($torrent->getAnnounce() . '?pid=' . $this->getUser()->getAttribute("ses")->getPid()); // Prepare body content with torrent's one $this->getResponse()->setContent($torrent->save("uploads/torrents/" . $this->getUser()->getAttribute("ses")->getPid(), false)); unlink("uploads/torrents/" . $this->getUser()->getAttribute("ses")->getPid()); } else { $this->getResponse()->setContent(file_get_contents('uploads/torrents/' . $u->getUrl())); } // Sending all stuff to browser $this->getResponse()->send(); } else { // Record click $c = new UploadsHits(); $c->setUid($this->getUser()->getAttribute("id")); $c->setUpid($u->getId()); $c->save(); $this->redirect($u->getUrl()); } return sfView::NONE; }