cms/app/Reposotories/MediaFileRepository.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();
}
}