%PDF- %PDF-
| Direktori : /home/graphicd/public_html/vebto/app/ |
| Current File : /home/graphicd/public_html/vebto/app/FileEntry.php |
<?php
namespace App;
use Common\Files\FileEntry as CommonFileEntry;
use Common\Workspaces\Traits\AttachesToWorkspace;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
/**
* @method static \Illuminate\Database\Query\Builder|FileEntry onlyStarred()
* @method static \Illuminate\Database\Query\Builder|FileEntry sharedWithUserOnly($userId)
*/
class FileEntry extends CommonFileEntry
{
use AttachesToWorkspace;
protected $table = 'file_entries';
public function labels(): BelongsToMany
{
return $this->tags()->where('tags.type', 'label');
}
public function shareableLink(): HasOne
{
return $this->hasOne(ShareableLink::class, 'entry_id');
}
/**
* Get only entries that are not children of another entry.
*/
public function scopeRootOnly(Builder $builder): Builder
{
return $builder->where('parent_id', null);
}
public function scopeSharedByUser(Builder $builder, int $userId): Builder
{
return $builder
->whereHas('users', null, '>', 1)
->where('owner_id', $userId);
}
/**
* Get only entries that are starred.
* Only show entries from root or entries whose parent is not starred.
*
* @param Builder $builder
* @return Builder
*/
public function scopeOnlyStarred(Builder $builder)
{
return $builder
->whereHas('labels', function ($query) {
return $query->where('tags.name', 'starred');
})
->where(function ($query) {
$query
->rootOnly()
->orWhereDoesntHave('parent', function ($query) {
return $query->whereHas('labels', function ($q) {
return $q->where('tags.name', 'starred');
});
});
});
}
public function scopeSharedWithUserOnly(
Builder $query,
int $userId
): Builder {
// get only entries which user does not own (did not upload)
return $query
->whereNotOwner($userId)
// get all entries that are in root folder,
// also get shared entries, whose parent folder is not shared
// "folder/file.txt", if "file.txt" is shared and "folder" is not shared, get "file.txt"
->whereDoesntHave('parent', function (Builder $query) use (
$userId
) {
return $query->whereNotOwner($userId);
});
}
public function getMorphClass()
{
return CommonFileEntry::class;
}
}