243 lines
7.6 KiB
PHP
243 lines
7.6 KiB
PHP
<?php
|
|
|
|
namespace App\Repositories;
|
|
|
|
use App\MediaFile;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
|
/**
|
|
* Class MediaFileRepository
|
|
* @package App\Repositories
|
|
* @method MediaFile createModel()
|
|
* @method MediaFile getModel()
|
|
* @method MediaFile findModel($id)
|
|
*/
|
|
class MediaFileRepository extends BaseRepository
|
|
{
|
|
public function __construct(MediaFile $mediaFile)
|
|
{
|
|
$this->setModel($mediaFile);
|
|
}
|
|
|
|
private function queryBuilderGetLimit(Builder $queryBuilder, $limit = null)
|
|
{
|
|
if($limit) {
|
|
return $queryBuilder->limit($limit)->get();
|
|
}
|
|
return $queryBuilder->get();
|
|
}
|
|
|
|
private function queryBuilderWhereCategory(Builder $queryBuilder, $category = '')
|
|
{
|
|
if($category == 'uncategorized') {
|
|
$queryBuilder = $queryBuilder->uncategorized();
|
|
} else if(is_numeric($category)) {
|
|
$queryBuilder = $queryBuilder->category($category);
|
|
}
|
|
return $queryBuilder;
|
|
}
|
|
|
|
/**
|
|
* @param $id
|
|
* @return \App\MediaFile|null
|
|
*/
|
|
public function getMedia($id)
|
|
{
|
|
return $this->findModel($id);
|
|
}
|
|
|
|
public function hasMedia($id)
|
|
{
|
|
return $this->hasModel($id);
|
|
}
|
|
|
|
/**
|
|
* @param $fileName
|
|
* @param $ext
|
|
* @param $diskId
|
|
* @param $mediaSourceId
|
|
* @param $mimeType
|
|
* @param null $userId
|
|
* @param null $width
|
|
* @param null $height
|
|
* @param bool $isAppMedia
|
|
* @param $size
|
|
* @return MediaFile|\Illuminate\Database\Eloquent\Model|boolean
|
|
*/
|
|
public function addMedia($fileName, $ext, $diskId, $mediaSourceId, $size, $mimeType, $userId, $path = null, $width = null, $height = null, $isAppMedia = false)
|
|
{
|
|
$mediaFile = $this->createModel();
|
|
$mediaFile->fill([
|
|
'path' => $path,
|
|
'file_name' => $fileName,
|
|
'ext' => $ext,
|
|
'disk_id' => $diskId,
|
|
'media_source_id' => $mediaSourceId,
|
|
'size' => $size,
|
|
'mime_type' => $mimeType,
|
|
'width' => $width,
|
|
'height' => $height,
|
|
'is_app_media' => $isAppMedia,
|
|
'user_id' => $userId,
|
|
]);
|
|
$saved = $mediaFile->save();
|
|
return $saved ? $mediaFile : $saved;
|
|
}
|
|
|
|
/**
|
|
* @param $fileName
|
|
* @param $ext
|
|
* @param $size
|
|
* @param $mimeType
|
|
* @param $userId
|
|
* @param null $width
|
|
* @param null $height
|
|
* @return MediaFile|\Illuminate\Database\Eloquent\Model
|
|
*/
|
|
public function addAppMedia($fileName, $ext, $size, $mimeType, $userId, $path = null, $width = null, $height = null)
|
|
{
|
|
return $this->addMedia($fileName, $ext, 1, null, $size, $mimeType, $userId, $path, $width, $height, true);
|
|
}
|
|
|
|
/**
|
|
* @param $fileName
|
|
* @param $ext
|
|
* @param $size
|
|
* @param $mimeType
|
|
* @param $userId
|
|
* @param null $width
|
|
* @param null $height
|
|
* @return MediaFile|\Illuminate\Database\Eloquent\Model
|
|
*/
|
|
public function addUserMedia($fileName, $ext, $size, $mimeType, $userId, $path = null, $width = null, $height = null)
|
|
{
|
|
return $this->addMedia($fileName, $ext, 2, null, $size, $mimeType, $userId, $path, $width, $height);
|
|
}
|
|
|
|
/**
|
|
* @param null $limit
|
|
* @return MediaFile[]|\Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection
|
|
*/
|
|
public function getAppMedias($limit = null)
|
|
{
|
|
$queryBuilder = $this->getModel()
|
|
->isAppMedia()
|
|
->orderByDesc('id');
|
|
return $this->queryBuilderGetLimit($queryBuilder, $limit);
|
|
}
|
|
|
|
public function getAppMediasWithCategory($category, $limit = null)
|
|
{
|
|
$queryBuilder = $this->getModel()
|
|
->isAppMedia()
|
|
->orderByDesc('id');
|
|
|
|
$queryBuilder = $this->queryBuilderWhereCategory($queryBuilder, $category);
|
|
|
|
return $this->queryBuilderGetLimit($queryBuilder, $limit);
|
|
}
|
|
|
|
/**
|
|
* @param $lastQueryId
|
|
* @param null $limit
|
|
* @return MediaFile[]|\Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection
|
|
*/
|
|
public function getAppMediasWithLastQueryId($lastQueryId, $limit = null)
|
|
{
|
|
$queryBuilder = $this->getModel()
|
|
->isAppMedia()
|
|
->where('id', '<', $lastQueryId)
|
|
->orderByDesc('id');
|
|
return $this->queryBuilderGetLimit($queryBuilder, $limit);
|
|
}
|
|
|
|
/**
|
|
* @param $lastQueryId
|
|
* @param null $limit
|
|
* @return MediaFile[]|\Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection
|
|
*/
|
|
public function getAppMediasWithLastQueryIdAndCategory($lastQueryId, $category, $limit = null)
|
|
{
|
|
$queryBuilder = $this->getModel()
|
|
->where('is_app_media', true)
|
|
->where('id', '<', $lastQueryId)
|
|
->orderByDesc('id');
|
|
|
|
$queryBuilder = $this->queryBuilderWhereCategory($queryBuilder, $category);
|
|
|
|
return $this->queryBuilderGetLimit($queryBuilder, $limit);
|
|
}
|
|
|
|
/**
|
|
* @param $userId
|
|
* @param null $limit
|
|
* @return Builder[]|\Illuminate\Database\Eloquent\Collection
|
|
*/
|
|
public function getUserMedias($userId, $limit = null)
|
|
{
|
|
$queryBuilder = $this->getModel()
|
|
->userMedia($userId)
|
|
->orderByDesc('id');
|
|
return $this->queryBuilderGetLimit($queryBuilder, $limit);
|
|
}
|
|
|
|
public function getUserMediasWithCategory($userId, $category, $limit = null)
|
|
{
|
|
$queryBuilder = $this->getModel()
|
|
->userMedia($userId)
|
|
->orderByDesc('id');
|
|
|
|
$queryBuilder = $this->queryBuilderWhereCategory($queryBuilder, $category);
|
|
|
|
return $this->queryBuilderGetLimit($queryBuilder, $limit);
|
|
}
|
|
|
|
/**
|
|
* @param $userId
|
|
* @param $lastQueryId
|
|
* @param null $limit
|
|
* @return MediaFile[]|\Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection
|
|
*/
|
|
public function getUserMediasWithLastQueryId($userId, $lastQueryId, $limit = null)
|
|
{
|
|
$queryBuilder = $this->getModel()
|
|
->userMedia($userId)
|
|
->where('id', '<', $lastQueryId)
|
|
->orderByDesc('id');
|
|
|
|
return $this->queryBuilderGetLimit($queryBuilder, $limit);
|
|
}
|
|
|
|
public function getUserMediasWithLastQueryIdAndCategory($userId, $lastQueryId, $category, $limit = null)
|
|
{
|
|
$queryBuilder = $this->getModel()
|
|
->userMedia($userId)
|
|
->where('id', '<', $lastQueryId)
|
|
->orderByDesc('id');
|
|
|
|
$queryBuilder = $this->queryBuilderWhereCategory($queryBuilder, $category);
|
|
|
|
return $this->queryBuilderGetLimit($queryBuilder, $limit);
|
|
}
|
|
|
|
public function getAppUncategorizedMediasCount()
|
|
{
|
|
return $this->getAppMediasWithCategory('uncategorized')->count();
|
|
}
|
|
|
|
public function getUserUncategorizedMediasCount($userId)
|
|
{
|
|
return $this->getUserMediasWithCategory($userId, 'uncategorized')->count();
|
|
}
|
|
|
|
public function getAppMediasCount()
|
|
{
|
|
return $this->getModel()->isAppMedia()->count();
|
|
}
|
|
|
|
public function getUserMediasCount($userId)
|
|
{
|
|
return $this->getModel()->userMedia($userId)->count();
|
|
}
|
|
}
|