Example #1
0
 /**
  * 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;
 }