/** * @param \Base $f3 * @param array $params * @throws \Exception */ public function file($f3, $params) { $file = new \Model\Issue\File(); $file->load($params["id"]); if (!$file->id) { $f3->error(404); return; } $force = true; if (substr($file->content_type, 0, 5) == "image" || $file->content_type == "text/plain") { // Don't force download on image and plain text files // Eventually I'd like to have previews of files some way (more than the existing thumbnails), but for now this is how we do it - Alan $force = false; } if (!$this->_sendFile($file->disk_filename, $file->content_type, $file->filename, $force)) { $f3->error(404); } }
*/ // don't forget to set an Upload directory, and make it writable! $f3->set("UPLOADS", 'uploads/' . date("Y") . "/" . date("m") . "/"); if (!is_dir(dirname(__DIR__) . '/' . $f3->get("UPLOADS"))) { mkdir(dirname(__DIR__) . '/' . $f3->get("UPLOADS"), 0777, true); } // Make a good name $orig_name = preg_replace("/[^A-Z0-9._-]/i", "_", $filename); $filename = time() . "_" . $orig_name; $i = 0; $parts = pathinfo($filename); while (file_exists(dirname(__DIR__) . '/' . $f3->get("UPLOADS") . $filename)) { $i++; $filename = $parts["filename"] . "-" . $i . "." . $parts["extension"]; } $newfile = new \Model\Issue\File(); $newfile->issue_id = $issue->id; $newfile->user_id = $user->id; $newfile->filename = $orig_name; $newfile->disk_filename = $f3->get("UPLOADS") . $filename; $newfile->disk_directory = $f3->get("UPLOADS"); $newfile->filesize = $file['size']; $newfile->content_type = $file['type']; $newfile->digest = md5($attachment['attachment']); $newfile->created_date = date("Y-m-d H:i:s"); $newfile->save(); $fp = fopen(dirname(__DIR__) . '/' . $f3->get("UPLOADS") . $filename, "w+"); fwrite($fp, $attachment['attachment']); fclose($fp); } }
/** * POST /issues/upload * Upload a file * * @param \Base $f3 * @param array $params * @throws \Exception */ public function upload($f3, $params) { $user_id = $this->_userId; $issue = new \Model\Issue(); $issue->load(array("id=? AND deleted_date IS NULL", $f3->get("POST.issue_id"))); if (!$issue->id) { $f3->error(404); return; } $web = \Web::instance(); $f3->set("UPLOADS", "uploads/" . date("Y") . "/" . date("m") . "/"); if (!is_dir($f3->get("UPLOADS"))) { mkdir($f3->get("UPLOADS"), 0777, true); } $overwrite = false; // set to true to overwrite an existing file; Default: false $slug = true; // rename file to filesystem-friendly version // Make a good name $orig_name = preg_replace("/[^A-Z0-9._-]/i", "_", $_FILES['attachment']['name']); $_FILES['attachment']['name'] = time() . "_" . $orig_name; $i = 0; $parts = pathinfo($_FILES['attachment']['name']); while (file_exists($f3->get("UPLOADS") . $_FILES['attachment']['name'])) { $i++; $_FILES['attachment']['name'] = $parts["filename"] . "-" . $i . "." . $parts["extension"]; } $web->receive(function ($file) use($f3, $orig_name, $user_id, $issue) { if ($file['size'] > $f3->get("files.maxsize")) { return false; } $newfile = new \Model\Issue\File(); $newfile->issue_id = $issue->id; $newfile->user_id = $user_id; $newfile->filename = $orig_name; $newfile->disk_filename = $file['name']; $newfile->disk_directory = $f3->get("UPLOADS"); $newfile->filesize = $file['size']; $newfile->content_type = $file['type']; $newfile->digest = md5_file($file['tmp_name']); $newfile->created_date = date("Y-m-d H:i:s"); $newfile->save(); $f3->set('file_id', $newfile->id); return true; // moves file from php tmp dir to upload dir }, $overwrite, $slug); if ($f3->get("POST.text")) { $comment = new \Model\Issue\Comment(); $comment->user_id = $this->_userId; $comment->issue_id = $issue->id; $comment->text = $f3->get("POST.text"); $comment->created_date = $this->now(); $comment->file_id = $f3->get('file_id'); $comment->save(); if (!!$f3->get("POST.notify")) { $notification = \Helper\Notification::instance(); $notification->issue_comment($issue->id, $comment->id); } } elseif ($newfile->id && !!$f3->get("POST.notify")) { $notification = \Helper\Notification::instance(); $notification->issue_file($issue->id, $f3->get("file_id")); } $f3->reroute("/issues/" . $issue->id); }