Files
mtdb_movie/app/Http/Controllers/NewsController.php
maher 703f50a09d
Some checks failed
Build / run (push) Has been cancelled
first commit
2025-10-29 11:42:25 +01:00

128 lines
3.5 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers;
use App\Actions\News\ImportNewsFromRemoteProvider;
use App\Models\NewsArticle;
use Common\Core\BaseController;
use Common\Database\Datasource\Datasource;
use Illuminate\Support\Str;
class NewsController extends BaseController
{
public function index()
{
$this->authorize('show', NewsArticle::class);
$paginator = new Datasource(NewsArticle::query(), request()->all());
$pagination = $paginator->paginate();
if (request('stripHtml') || request('truncateBody')) {
$pagination
->map(function (NewsArticle $article) {
if (request('stripHtml')) {
// remove html tags
$article->body = strip_tags($article->body);
// remove last "...see full article"
$parts = explode('...', $article->body);
if (
count($parts) > 1 &&
Str::contains(last($parts), 'See full article')
) {
array_pop($parts);
}
$article->body = implode('', $parts);
}
if ($newLength = (int) request('truncateBody')) {
$article->body = Str::limit($article->body, $newLength);
}
return $article;
})
->values();
}
return $this->success(['pagination' => $pagination]);
}
public function show($slugOrId)
{
$article = NewsArticle::where('id', $slugOrId)
->orWhere('slug', $slugOrId)
->firstOrFail();
$this->authorize('show', $article);
$data = [
'article' => $article,
'related' => NewsArticle::compact()
->where('id', '!=', $article->id)
->orderBy('created_at', 'desc')
->limit(10)
->get(),
'loader' => 'newsArticlePage',
];
return $this->renderClientOrApi([
'pageName' => 'news-article-page',
'data' => $data,
]);
}
public function update($id)
{
$article = NewsArticle::findOrFail($id);
$this->authorize('update', $article);
$data = $this->validate(request(), [
'title' => 'min:5|max:250',
'body' => 'min:5',
'image' => 'string',
'slug' => 'string',
]);
$article->fill($data)->save();
return $this->success(['article' => $article]);
}
public function store()
{
$this->authorize('store', NewsArticle::class);
$data = $this->validate(request(), [
'title' => 'required|min:5|max:250',
'body' => 'required|min:5',
'image' => 'string',
'slug' => 'required|string',
]);
$article = NewsArticle::create($data);
return $this->success(['article' => $article]);
}
public function destroy(string $ids)
{
$ids = explode(',', $ids);
$this->authorize('destroy', NewsArticle::class);
NewsArticle::whereIn('id', $ids)->delete();
return $this->success();
}
public function importFromRemoteProvider()
{
$this->authorize('store', NewsArticle::class);
app(ImportNewsFromRemoteProvider::class)->execute();
return $this->success();
}
}