<?php
namespace App\Controller;
use Symfony\Component\Routing\Annotation\Method;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\File\File;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use App\Entity\Articles;
use App\Entity\Banners;
use App\Entity\Documents;
use App\Form\ArticlesType;
use App\Entity\ArticlesPictures;
use App\Entity\Pictures;
use App\Entity\UsersActivities;
use OlaSoft\Common;
/**
* @Route("/os-admin/articles")
*/
class ArticlesController extends AbstractController
{
/**
*
* @Route("/page/{offset}/",name="articles-admin-page")
* @Route("/",name="articles-admin")
* @Route("/search/{keywords}/page/{offset}/",name="articles-search-admin-page")
* @Route("/search/{keywords}/",name="articles-search-admin")
*/
public function admin($keywords=null,$offset=1)
{
$request = $this->get('request_stack')->getCurrentRequest();
$offset--;
$limit = 20;
$of=$offset*$limit;
$em = $this->getDoctrine()->getManager();
$list= $em->getRepository(Articles::class)->getAll($limit,$of,null,$keywords?$keywords:null);
$count=$em->getRepository(Articles::class)->getCount();
$ajax = $request->isXmlHttpRequest();
$response = $this->render('Admin\index.html.twig',[
'list'=>$list,
'ajax'=>$ajax,
'count'=>$count,
'table_limit'=>$limit,
'offset'=>$offset,
'addBtnClass'=>'btn-popup semi',
"title"=>"Gestion des articles ",
"subtitle"=>"Liste de tous les articles"
]);
return $ajax ?
new Response(\json_encode([
'content'=>$response->getContent(),
"title"=>"Gestion des articles ",
"subtitle"=>"Liste de tous les articles"
]))
: $response;
}
/**
* @Route("/add/",name="articles-new", defaults={"isEdit":false})
* @Route("/{id}/edit",name="articles-edit")
*/
public function edit(Articles $article=null, $isEdit = true, ValidatorInterface $validator)
{
$em = $this->getDoctrine()->getManager();
$request = $this->get('request_stack')->getCurrentRequest();
if($article === null){
$article = new Articles();
$article->setUser($this->getUser());
}
else
$article->setUpdatedBy($this->getUser() ? $this->getUser() : null);
$form=$this->createForm(ArticlesType::class,$article);
$form->get('date')->setData($article->getDate());
$form->get('time')->setData($article->getDate());
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$article->setSlug(Common::slug($article->getTitle()));
if(!$isEdit) $article->setCreatedAt(new \DateTime);
$article->setLastUpdate(new \DateTime);
if($form->get('date')->getData()!=null){
$date = $form->get('date')->getData()->format('Y-m-d').' '.$form->get('time')->getData()->format('H:i:s');
$article->setDate(\DateTime::createFromFormat('Y-m-d H:i:s', $date));
}
$em->persist($article);
$em->flush();
Common::trackChange(new UsersActivities, $em, $article, $this->getUser(), $isEdit ? 'edit' : 'add', $isEdit ? "Modification d'un article" : "Ajout d'un article");
$this->addFlash('notice','Enregistrement effectué avec succès');
return $this->redirectToRoute('articles-admin');
}
$ajax = $request->isXmlHttpRequest();
$response = $this->render('Admin\edit.html.twig',[
'form' => $form->createView(),
'ajax' => $ajax,
'title' => "Gestion des articles ",
'subtitle' => "Edition d'un article",
]);
return $ajax ?
new Response(\json_encode([
'content' => $response->getContent(),
'title' => "Gestion des articles ",
'subtitle' => "Edition d'un article"
]))
: $response;
}
/**
* @Route("/{id}/enabled", name="articles-enable")
*/
public function enable(Articles $article)
{
$request = $this->get('request_stack')->getCurrentRequest();
$em = $this->getDoctrine()->getManager();
$article->setIsEnabled(!$article->getIsEnabled());
$em->persist($article);
$em->flush();
Common::trackChange(new UsersActivities, $em, $article, $this->getUser(), $article->getIsEnabled() ? 'enable' : 'disable', $article->getIsEnabled() ? "Activation d'un article" : "Désactivation d'un article");
$ajax = $request->isXmlHttpRequest();
if(!$ajax)
$this->addFlash("notice","Activation / Désactivation effectuée avec succès.");
return $ajax
? new Response(\json_encode(['status'=>$article->getIsEnabled(), 'notice'=>'Activation / Désactivation effectuée avec succès.']))
: $this->redirectToRoute('articles-admin');
}
/**
* @Route("/{id}/oneFrontPage", name="articles-onefrontpage")
*/
public function oneFrontPage(Articles $article)
{
$request = $this->get('request_stack')->getCurrentRequest();
$em = $this->getDoctrine()->getManager();
$article->setIsOnFrontPage(1);
$banner = new Banners;
$banner->setBanner($article->getBanner(), true);
$banner->setTitle($article->getTitle());
$banner->setDate($article->getDate());
$banner->setDescription($article->getDescription());
$banner->setBtnTitle("Lire l'article");
$banner->setLink($this->generateUrl('article',['id'=>$article->getId(), 'slug'=>$article->getSlug()]));
$banner->setIsEnabled(true);
$em->persist($banner);
$em->flush();
Common::trackChange(new UsersActivities, $em, $article, $this->getUser(), $article->getIsOnFrontPage() ? 'addtofront' : 'removefromfront', $article->getIsOnFrontPage() ? "Ajout d'un article de la Une" : "Retrait d'un article de la Une");
$this->addFlash("notice","Ajout d'article sur la bannière effectué avec succès.");
return $this->redirectToRoute('banners-admin');
}
}