tethys/app/Models/File.php
2020-06-10 21:09:12 +02:00

75 lines
1.8 KiB
PHP

<?php
namespace App\Models;
use App\Models\Dataset;
use App\Models\HashValue;
use Illuminate\Database\Eloquent\Model;
class File extends Model
{
protected $table = 'document_files';
public $timestamps = true;
protected $fillable = ['path_name', 'file_size', 'mime_type', 'label', 'sort_order'];
public function dataset()
{
return $this->belongsTo(Dataset::class, 'document_id', 'id');
}
public function hashvalues()
{
return $this->hasMany(HashValue::class, 'file_id', 'id');
}
/**
* Create hash value model objects from original file.
*
* TODO throws Exception in case hash computation is not possible
* (e.g., if referenced file is missing in file system)
*
* @return void
*/
public function createHashValues()
{
$hashtypes = array('md5', 'sha512');
foreach ($hashtypes as $type) {
$hash = new HashValue();
$hash->type = $type;
$hashString = $this->getRealHash($type);
$hash->value = $hashString;
$this->hashvalues()->save($hash);
}
}
/**
* Get the hash value of the file
*
* @param string $type Type of the hash value, @see hash_file();
* @return string hash value
*/
private function getRealHash($type)
{
$hash = @hash_file($type, $this->getPath());
if (empty($hash)) {
throw new \Exception("Empty HASH for file '" . $this->getPath() . "'");
}
return $hash;
}
/**
* Get full path of destination file.
*/
private function getPath()
{
return storage_path('app/public/' . $this->path_name);
}
public function exists()
{
return \Illuminate\Support\Facades\File::exists(public_path('storage/' . $this->path_name));
}
}