<?php namespace Codeboard\Http\Controllers;
use Codeboard\Articles\ArticleListener;
use Codeboard\Articles\PostArticle;
use Codeboard\Articles\Repository\ArticleRepository;
use Codeboard\Articles\UpdateArticle;
use Codeboard\Http\Requests\PostArticleRequest;
use Codeboard\Http\Requests\UpdateArticleRequest;
use Illuminate\Routing\Controller;
class ArticlesController extends Controller implements ArticleListener
{
/**
* @var \Codeboard\Articles\Repository\ArticleEloquentRepository
*/
private $articleRepo;
/**
* @param ArticleRepository $articleRepo
*/
function __construct(ArticleRepository $articleRepo)
{
$this->articleRepo = $articleRepo;
}
/**
* @return \Illuminate\View\View
*/
public function index()
{
$articles = $this->articleRepo->all();
return view(frontendView('articles.index'), compact('articles'));
}
/**
* @return \Illuminate\View\View
*/
public function create()
{
return view(backendView('articles.create'));
}
/**
* @param PostArticleRequest $request
* @param PostArticle $article
* @return mixed
*/
public function store(PostArticleRequest $request, PostArticle $article)
{
return $article->execute($request->all(), $this);
}
/**
* @param $slug
* @return \Illuminate\View\View
*/
public function show($slug)
{
$article = $this->articleRepo->findBySlug($slug);
return view(frontendView('articles.show'), compact('article'));
}
/**
* @param $articleId
* @return \Illuminate\View\View
*/
public function edit($articleId)
{
$article = $this->articleRepo->findById($articleId);
return view(backendView('articles.edit'), compact('article'));
}
/**
* @param $articleId
* @param UpdateArticleRequest $request
* @param UpdateArticle $article
* @return mixed
*/
public function update($articleId, UpdateArticleRequest $request, UpdateArticle $article)
{
return $article->execute($articleId, $request->all(), $this);
}
/**
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function articleRedirect()
{
return redirect('/blog');
}
}