<?php
namespace App\Controller\GZZ;
use App\Entity\Category48;
use App\Entity\Quiz;
use App\Entity\User;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Omines\DataTablesBundle\Adapter\ArrayAdapter;
use Omines\DataTablesBundle\Adapter\Doctrine\ORM\SearchCriteriaProvider;
use Omines\DataTablesBundle\Adapter\Doctrine\ORMAdapter;
use Omines\DataTablesBundle\Column\TextColumn;
use Omines\DataTablesBundle\Column\DateTimeColumn;
use Omines\DataTablesBundle\DataTableFactory;
use stdClass;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Security\Core\Security;
class IndexController extends AbstractController
{
private $security;
public function __construct(Security $security)
{
$this->security = $security;
}
/**
* @Route("/", name="home")
*/
public function index(Request $request, DataTableFactory $dataTableFactory): Response
{
$table = $dataTableFactory->create()
->add('createDate', DateTimeColumn::class, ['label' => 'Data utworzenia', 'format' => 'Y-m-d'])
->add('name', TextColumn::class, ['label' => 'Nazwa testu'])
->add('nameClass', TextColumn::class, ['label' => 'Klasa'])
->add('nameGroup', TextColumn::class, ['label' => 'Grupa'])
->add('description', TextColumn::class, ['label' => 'Opis'])
->createAdapter(ORMAdapter::class, [
'entity' => Quiz::class,
'query' => function (QueryBuilder $builder) {
$builder
->select('c')
->from(Quiz::class, 'c');
},
// 'query' => function (QueryBuilder $builder) {
// $builder
// ->select('e')
// ->addSelect('c')
// ->from(Employee::class, 'e')
// ->leftJoin('e.company', 'c')
// ;
// },
'criteria' => [
function (QueryBuilder $builder) {
$builder->andWhere($builder->expr()->like('c.ownerId', ':userId'))->setParameter('userId', $this->security->getUser()->getIduser());
},
new SearchCriteriaProvider(),
],
])
->handleRequest($request);
if ($table->isCallback()) {
return $table->getResponse();
}
return $this->render('quiz/list.html.twig', [
'controller_name' => 'IndexController', 'datatable' => $table, 'panel' => 'gzz', 'page' => 'testy'
]);
}
/**
* @Route("/quiz/new", name="newQuiz")
*/
public function newAction(Request $request): Response
{
$quiz = new Quiz();
$form = $this->createFormBuilder($quiz)
->add('save', SubmitType::class, ['label' => 'Zapisz'])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// $form->getData() holds the submitted values
// but, the original `$task` variable has also been updated
$quiz = $form->getData();
// ... perform some action, such as saving the task to the database
return $this->redirectToRoute('task_success');
}
$em = $this->getDoctrine()->getManager();
$categories = [];
foreach ($em->getRepository('App:Category48')->findBy(['active' => 1,], ['idcategory' => 'ASC', 'prior' => 'ASC']) as $item) {
$category = $this->_setCategory($item);
if ($category->parentId == null)
$categories[] = $category;
else $this->_setParent($categories, $category);
}
return $this->renderForm('quiz/new.html.twig', [
'form' => $form,
'categories' => $categories,
'panel' => 'gzz',
'page' => 'testy'
]);
}
private function _setCategory(Category48 $item): stdClass
{
$category = new stdClass();
$category->idcategory = $item->getIdcategory();
$category->name = $item->getName();
$category->parentId = ($item->getParentId()) ? $item->getParentId()->getIdcategory() : null;
$category->executable = $item->getExecutable();
$category->children = [];
return $category;
}
private function _setParent(array &$categories, stdClass $child, ?stdClass $parent = null)
{
foreach ($categories as $item) {
if ($item->idcategory == $child->parentId) {
$item->children[] = $child;
break;
} else {
$this->_setParent($item->children, $child);
}
}
}
/**
* @Route("/quiz/delete/{id}", name="deleteQuiz")
*/
public function deleteAction($id)
{
$em = $this->getDoctrine()->getManager();
$find = $em->getRepository('App:Quiz')->find($id);
return $this->redirectToRoute('homepage', array('remove'));
// $em->remove($list);
//$em->flush();
}
/**
* @Route("/quiz/edit/{id}", name="editQuiz")
*/
public function editAction($id)
{
$em = $this->getDoctrine()->getManager();
$find = $em->getRepository('App:Quiz')->find($id);
return $this->redirectToRoute('homepage', array('remove'));
// $em->remove($list);
//$em->flush();
}
/**
* @Route("/info", name="info")
*/
public function infoAction()
{
return $this->render('info.html.twig', [
'controller_name' => 'IndexController', 'panel' => 'gzz', 'page' => 'info'
]);
}
}