<?php
namespace App\Controller;
use App\Entity\Article;
use App\Entity\Variable;
use DateTime;
use Gumlet\ImageResize;
use Gumlet\ImageResizeException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class ArticleController extends AppController
{
/**
* @Route("/articles", methods={"GET"}, name="public_article_list")
* @param Request $request
* @return Response
*/
public function getPublicList(Request $request)
{
$theme = $request
->query
->get('theme');
$page = $request
->query
->get('page');
$offset = $page ? ($page-1) * 10 : 0;
$result = $this
->em
->getRepository(Article::class)
->findByWithCount($theme, $offset);
return $this->render('makeup/article_list', [
'articles' => $result['list'],
'count' => $result['count'],
'theme' => $theme,
'content' => $this->getMeta('articlesPage'),
]);
}
/**
* @Route("/articles/{urlOrId}", methods={"GET"}, name="public_article_item")
* @param $urlOrId
*
* @return Response
*/
public function getPublicItem($urlOrId)
{
$article = $this
->em
->getRepository(Article::class)
->findOneBy(['url' => $urlOrId]);
if(!$article)
$article =$this
->em
->getRepository(Article::class)
->find($urlOrId);
$articles = $this
->em
->getRepository(Article::class)
->findBy([], ['orderValue' => 'ASC'], 3);
$content = [
'title' => $article->getHeadTitle(),
'metaDescription' => $article->getMetaDescription(),
'metaKeywords' => $article->getMetaKeywords()
];
return $this->render('makeup/article_item', [
'article' => $article,
'articles' => $articles,
'content' => $content
]);
}
/**
* @Route("/admin/articles", methods={"GET"}, name="get_article_list")
* @param Request $request
* @return Response
*/
public function getList(Request $request)
{
$page = $request->query->get('page');
$offset = $page ? ($page-1) * 10 : 0;
$result = $this->em
->getRepository(Article::class)
->findByWithCount(null, $offset, false);
$content = $this
->getMeta(
'articlesPage'
);
return $this->render('admin/article_list', [
'articles' => $result['list'],
'count' => $result['count'],
'content' => $content
]);
}
/**
* @Route("/admin/articles", methods={"POST"}, name="save_article_list")
* @param Request $request
* @return RedirectResponse
*/
public function saveListOrder(Request $request)
{
$orderValueArray = $request
->request
->get('orderValue');
$this->saveOrder($orderValueArray, Article::class);
return $this
->redirectToRoute('get_article_list');
}
/**
* @Route("/admin/articles/{id}", methods={"GET"}, name="get_article_item")
* @param $id
* @return Response
*/
public function getItem($id)
{
$article = $this->getEntity($id, Article::class);
return $this->render('admin/article_item', [
'article' => $article
]);
}
/**
* @Route("/admin/articles/{id}", methods={"POST"}, name="save_article_item")
* @param $id
* @param Request $request
* @return Response
*/
public function saveItem($id, Request $request)
{
$article = $this->getEntity($id, Article::class);
$this->save($article, $request);
return $this->redirectToRoute('get_article_item', [
'id' => $article->getId()
]);
}
/**
* @Route("/admin/articles/{id}/remove", methods={"GET"}, name="get_removing_article_item")
* @param $id
* @param Request $request
* @return Response
*/
public function getRemovingItem(Article $article)
{
return $this->render('admin/removing', [
'title' => 'статью ' . $article->getTitle()
]);
}
/**
* @Route("/admin/articles/{id}/remove", methods={"POST"}, name="remove_article_item")
* @param $id
* @param Request $request
* @return Response
*/
public function removeItem(Article $article)
{
$this
->em
->remove($article);
$this
->em
->flush();
return $this->redirectToRoute('get_article_list');
}
private function save(Article $article, Request $request)
{
$properties = $request->request->all();
if (
$request
->files
->has('photo')
) {
$file = $request->files->get('photo');
if($file) {
$photoPath = $this->uploadFile($file, 'partners');
try {
$image = new ImageResize('img/' . $photoPath);
$image->resizeToLongSide(437);
$image->crop(437, 234);
$image->save('img/'.$photoPath);
} catch (ImageResizeException $e) {
}
$properties['photo'] = $photoPath;
}
}
if (isset($properties['publishedAt'])) {
try {
$properties['publishedAt'] = new DateTime($properties['publishedAt']);
} catch (\Exception $e) {
$properties['publishedAt'] = new DateTime();
}
}
if (!$article->getId()) {
$this
->em
->persist($article);
}
$article
->setProperties($properties);
$this->em
->flush();
}
}