sintonia_webapp/app/Http/Controllers/PodcastController.php

93 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Podcast\ImportedPodcast;
use App\Models\Podcast\Podcast;
use App\Models\Podcast\PodcastEpisode;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class PodcastController extends Controller
{
public function index(Request $request) {
if (!isset($request->per_page) || is_null($request)) {
$pagination = 5;
} else {
$pagination = $request->per_page;
}
return Podcast::searchFilter($request)
->where('id', '!=', 1)
->with(['episodes', 'imported', 'owner'])
->paginate($pagination)
->toJson();
}
public function store(Request $request) {
return $this->save($request);
}
/**
* Method used to update a smart block
* @param Request $request
* @param $id
* @return mixed
*/
public function update(Request $request) {
return $this->save($request);
}
public function destroy($id) {
try {
PodcastEpisode::where('podcast_id', $id)->delete();
ImportedPodcast::where('podcast_id', $id)->delete();
Podcast::destroy($id);
return true;
} catch(\Exception $e) {
return response()->json(['message' => $e->getMessage()], 500);
}
}
public function show(Request $request, $id) {
$xml = simplexml_load_file($request->url);
return $xml->channel;
}
public function getEpisodes(Request $request)
{
$xml = simplexml_load_file($request->url, null, LIBXML_NOCDATA);
$xmlArray = (array) $xml->channel;
//episodes are stored in `item` array
return $xmlArray['item'];
}
protected function save(Request $request)
{
$user = Auth::user();
$xml = simplexml_load_file($request->url);
$itunes = $xml->channel->children('itunes', TRUE);
$dbPodcast = Podcast::firstOrNew(['id' => $request->id]);
$dbPodcast->fill([
'url' => $request->url,
'title' => $xml->channel->title,
'creator' => $itunes->author,
'description' => $itunes->subtitle,
'language' => $xml->channel->language,
'copyright' => $xml->channel->copyright,
'link' => $xml->channel->link,
'itunes_author'=> $itunes->author,
'itunes_keywords' => '',
'itunes_summary' => $itunes->summary,
'itunes_subtitle' => $itunes->subtitle,
'itunes_category' => '',
'itunes_explicit' => $itunes->explicit,
'owner' => $user->id,
])->save();
return response()->json([
'podcast' => $dbPodcast,
'episodes' => $xml->channel->children('item', TRUE)
]);
}
}