boka3/include/Attachment.php
2019-11-19 15:06:22 +01:00

110 lines
3.3 KiB
PHP

<?php
class Attachment {
private $id;
private $product;
private $filename;
private $uploadtime;
public static function create($file, $prodid) {
begin_trans();
try {
if(!isset($file['error']) || is_array($file['error'])) {
throw new Exception('Ogiltigt anrop.');
}
switch($file['error']) {
case UPLOAD_ERR_OK:
break;
case UPLOAD_ERR_NO_FILE:
throw new Exception('Ingen fil skickades.');
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
throw new Exception('Filen är för stor.');
default:
throw new Exception('Ett okänt fel har inträffat.');
}
$filename = $file['name'];
$insert = prepare('insert into `attachment`
(`product`, `filename`, `uploadtime`)
values (?, ?, ?)');
bind($insert, 'isi', $prodid, $filename, time());
execute($insert);
$attachid = $insert->insert_id;
global $files_dir;
$savepath = $files_dir;
if(substr($savepath, -1) !== '/') {
$savepath .= '/';
}
$savepath .= $attachid;
$tmp_name = $file['tmp_name'];
if(file_exists($savepath)) {
throw new Exception('Filens plats är upptagen. '
.'Det här borde aldrig inträffa.');
}
if(!move_uploaded_file($tmp_name, $savepath)) {
throw new Exception('Filen kunde inte sparas.');
}
commit_trans();
return new Attachment($attachid);
} catch(Exception $e) {
revert_trans();
throw $e;
}
}
public function __construct($id) {
$search = prepare('select * from `attachment` where `id`=?');
bind($search, 'i', $id);
execute($search);
$result = result_single($search);
if($result === null) {
throw new Exception('Attachment does not exist.');
}
$this->id = $result['id'];
$this->product = $result['product'];
$this->filename = $result['filename'];
$this->uploadtime = $result['uploadtime'];
}
public function delete() {
$delete = prepare('update `attachment` set `deletetime`=?
where `id`=?');
bind($delete, 'ii', time(), $this->get_id());
execute($delete);
$path = $this->get_filepath();
if(file_exists($path)) {
unlink($path);
}
return true;
}
public function get_id() {
return $this->id;
}
public function get_product() {
return new Product($this->product);
}
public function get_filename() {
return $this->filename;
}
public function get_uploadtime() {
return $this->uploadtime;
}
public function get_filepath() {
global $files_dir;
$path = $files_dir;
if(substr($path, -1) !== '/') {
$path .= '/';
}
$path .= $this->get_id();
if(!file_exists($path)) {
throw new Exception('Filen har försvunnit.');
}
return $path;
}
}
?>