mirror of https://github.com/pixelfed/pixelfed
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
<?php
 | 
						|
 | 
						|
namespace App\Http\Controllers;
 | 
						|
 | 
						|
use Auth;
 | 
						|
use App\Newsroom;
 | 
						|
use Illuminate\Support\Str;
 | 
						|
use Illuminate\Http\Request;
 | 
						|
use Illuminate\Support\Facades\Redis;
 | 
						|
 | 
						|
class NewsroomController extends Controller
 | 
						|
{
 | 
						|
 | 
						|
	public function index(Request $request)
 | 
						|
	{
 | 
						|
		if(Auth::check()) {
 | 
						|
			$posts = Newsroom::whereNotNull('published_at')->latest()->paginate(9);
 | 
						|
		} else {
 | 
						|
			$posts = Newsroom::whereNotNull('published_at')
 | 
						|
				->whereAuthOnly(false)
 | 
						|
				->latest()
 | 
						|
				->paginate(3);
 | 
						|
		}
 | 
						|
		return view('site.news.home', compact('posts'));
 | 
						|
	}
 | 
						|
 | 
						|
	public function show(Request $request, $year, $month, $slug)
 | 
						|
	{
 | 
						|
		$post = Newsroom::whereNotNull('published_at')
 | 
						|
			->whereSlug($slug)
 | 
						|
			->whereYear('published_at', $year)
 | 
						|
			->whereMonth('published_at', $month)
 | 
						|
			->firstOrFail();
 | 
						|
		abort_if($post->auth_only && !$request->user(), 404);
 | 
						|
		return view('site.news.post.show', compact('post'));
 | 
						|
	}
 | 
						|
 | 
						|
	public function search(Request $request)
 | 
						|
	{
 | 
						|
		abort(404);
 | 
						|
		$this->validate($request, [
 | 
						|
			'q'			=> 'nullable'
 | 
						|
		]);
 | 
						|
	}
 | 
						|
 | 
						|
	public function archive(Request $request)
 | 
						|
	{
 | 
						|
		abort(404);
 | 
						|
		return view('site.news.archive.index');
 | 
						|
	}
 | 
						|
 | 
						|
	public function timelineApi(Request $request)
 | 
						|
	{
 | 
						|
		abort_if(!Auth::check(), 404);
 | 
						|
 | 
						|
		$key = 'newsroom:read:profileid:' . $request->user()->profile_id;
 | 
						|
		$read = Redis::smembers($key);
 | 
						|
 | 
						|
		$posts = Newsroom::whereNotNull('published_at')
 | 
						|
			->whereShowTimeline(true)
 | 
						|
			->whereNotIn('id', $read)
 | 
						|
			->orderBy('id', 'desc')
 | 
						|
			->take(9)
 | 
						|
			->get()
 | 
						|
			->map(function($post) {
 | 
						|
				return [
 | 
						|
					'id' => $post->id,
 | 
						|
					'title' => Str::limit($post->title, 40),
 | 
						|
					'summary' => $post->summary,
 | 
						|
					'url' => $post->show_link ? $post->permalink() : null,
 | 
						|
					'published_at' => $post->published_at->format('F m, Y')
 | 
						|
				];
 | 
						|
			});
 | 
						|
		return response()->json($posts, 200, [], JSON_PRETTY_PRINT);
 | 
						|
	}
 | 
						|
 | 
						|
	public function markAsRead(Request $request)
 | 
						|
	{
 | 
						|
		abort_if(!Auth::check(), 404);
 | 
						|
 | 
						|
		$this->validate($request, [
 | 
						|
			'id' => 'required|integer|min:1'
 | 
						|
		]);
 | 
						|
 | 
						|
		$news = Newsroom::whereNotNull('published_at')
 | 
						|
			->findOrFail($request->input('id'));
 | 
						|
 | 
						|
		$key = 'newsroom:read:profileid:' . $request->user()->profile_id;
 | 
						|
 | 
						|
		Redis::sadd($key, $news->id);
 | 
						|
 | 
						|
		return response()->json(['code' => 200]);
 | 
						|
	}
 | 
						|
}
 |