<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
use App\Entity\Settings;
use App\Entity\Reklama;
use App\Entity\Users;
use App\Entity\CertyfikatesSsl;
use App\Entity\SeoProject;
use App\Entity\SeoProjectGroups;
use App\Helpers\ReklamaHelper;
use App\Managements\PayersManagement;
use App\Managements\SettingsManagement;
use Symfony\Component\HttpFoundation\Request;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\String\Slugger\SluggerInterface;
use App\Managements\Reklama as ReklamaManagement;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Validator\Constraints\DateTime;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use App\Forms\Admin\AdminImportForm;
use App\Forms\Admin\AdminSslForm;
use Symfony\Component\Filesystem\Filesystem;
use App\Forms\Admin\AdminReklamaServiceForm;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Helpers\EmailHelper;
class AdminReklamaController extends AbstractController
{
public function __construct(
// $activeMenuParent = 'admin_services',
TranslatorInterface $translator,
SluggerInterface $slugger,
PayersManagement $payersManagement,
EntityManagerInterface $entityManager
) {
$this->slugger = $slugger;
$this->activeMenuParent = 'admin_services';
$this->incompletePayers = $payersManagement->loadIncomplete();
$this->translator = $translator;
$this->entityManager = $entityManager;
$this->settings = array();
$this->filters = array();
$this->ordering = array();
}
/**
* @Route("/admin/reklama", name="admin_services_reklama")
*/
public function index(
ReklamaManagement $ReklamaManagement,
PaginatorInterface $paginator,
ReklamaHelper $ReklamaHelper,
PayersManagement $payersManagement,
SettingsManagement $settingsManagement,
Request $request
) {
$searchForm = $this->filterForm();
$searchForm->handleRequest($request);
if ($searchForm->isSubmitted() && $searchForm->isValid()) {
$this->filters = $searchForm->getData();
}
$items = $ReklamaManagement->load(null, $this->filters, $this->ordering);
// dd($ReklamaHelper->prepareForListing($items));
$items = $paginator->paginate($ReklamaHelper->prepareForListing($items), $request->query->getInt('page', 1), $settingsManagement->value('itemsPerDashboardPage'));
$clients = $payersManagement->load(null, array(), array());
$clientsArray = array();
$clientsArray[0] = '-wybierz-';
// echo '<pre>';
// print_r($items);
// echo '</pre>';
// die();
foreach ($clients as $client) {
$clientsArray[$client->getId()] = $client->getName();
}
// Liczenie totals dla w_status (wykluczając status = 99)
$qb = $this->entityManager->createQueryBuilder();
$totalRecords = $qb->select('COUNT(r.id)')
->from(Reklama::class, 'r')
->where('r.status != 99 OR r.status IS NULL')
->getQuery()
->getSingleScalarResult();
$qb2 = $this->entityManager->createQueryBuilder();
$activeRecords = $qb2->select('COUNT(r.id)')
->from(Reklama::class, 'r')
->where('r.w_status = :activeStatus')
->andWhere('r.status != 99 OR r.status IS NULL')
->setParameter('activeStatus', 1)
->getQuery()
->getSingleScalarResult();
return $this->render('Admin/Reklama/list.html.twig', [
'accessModules' => $_SESSION['accessModules'],
'incompletePayers' => $this->incompletePayers,
'items' => $items,
'clientsArray' => $clientsArray,
'searchForm' => $searchForm->createView(),
'activeMenuParent' => $this->activeMenuParent,
'controller_name' => 'AdminController',
'title' => 'Usługi reklamowe',
'totals' => [$activeRecords, $totalRecords]
]);
}
/**
* @Route("/admin/reklama/edytuj/{id}", name="admin_edit_service_reklama")
*/
public function edit(
$id,
PayersManagement $payersManagement,
ReklamaManagement $ReklamaManagement,
Request $request
) {
$files = array();
$item = $ReklamaManagement->load($id, null, null);
$clients = $payersManagement->load(null, array(), array());
$clientsArray[0] = array(
'id' => null,
'name' => '-wybierz-'
);
foreach ($clients as $client) {
$clientsArray[$client->getId()] = array(
'id' => $client->getId(),
'name' => $client->getName()
);
}
$client = $payersManagement->load($item->getClient(), array(), array());
$item->setClientsArray(serialize($clientsArray));
$form = $this->createForm(AdminReklamaServiceForm::class, $item);
$title = 'Edycja usługi reklamy ' . $item->getUrlAddress();
$form->handleRequest($request);
$vowels = array(" ", "-");
if ($form->isSubmitted()) {
$item = $form->getData();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($item);
$entityManager->flush();
$this->addFlash('success', $this->translator->trans('Success updated'));
return $this->redirectToRoute('admin_services_reklama');
}
if (!is_null($item->getFiles())) {
foreach (explode(",", $item->getFiles()) as $file) {
$files[] = array(
'path' => $file,
'name' => str_replace("uploads/reklama/reklamafile-" . $item->getId() . "-", "", $file)
);
}
}
return $this->render('Admin/Reklama/details.html.twig', [
'accessModules' => $_SESSION['accessModules'],
'files' => $files,
'incompletePayers' => $this->incompletePayers,
'title' => $title,
'activeMenuParent' => $this->activeMenuParent,
'item' => $item,
'form' => $form->createView(),
]);
}
/**
* @Route("/admin/reklama/dodaj", name="admin_add_service_reklama")
*/
public function add(
PayersManagement $payersManagement,
ReklamaManagement $ReklamaManagement,
Request $request
) {
// if(in_array($this->activeMenuParent, $_SESSION['accessModules'])){
$files = array();
$item = new Reklama();
$clients = $payersManagement->load(null, array(), array());
$clientsArray[0] = array(
'id' => null,
'name' => '-wybierz-'
);
foreach ($clients as $client) {
$clientsArray[$client->getId()] = array(
'id' => $client->getId(),
'name' => $client->getName()
);
}
$item->setClientsArray(serialize($clientsArray));
$form = $this->createForm(AdminReklamaServiceForm::class, $item);
$title = 'Dodawanie nowej usługi reklamy';
$form->handleRequest($request);
$vowels = array(" ", "-");
if ($form->isSubmitted()) {
$item = $form->getData();
$item->setCreatedDate(new \DateTime());
if ($item->getAgreementType() == 'seo') {
/* DODAWANIE PROJEKTU SEO */
$project = new SeoProject();
$payer = $payersManagement->load($item->getClient(), null, null);
$project->setDomain($item->getUrlAddress());
$project->setPayer($payer);
$group = $this->entityManager->getRepository(SeoProjectGroups::class)->find(4);
$project->setProjectGroup($group);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($project);
$entityManager->flush();
}
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($item);
$entityManager->flush();
mkdir($this->getParameter('uploads_reklama_directory') . $item->getId(), 0777, true);
$this->addFlash('success', $this->translator->trans('Success updated'));
return $this->redirectToRoute('admin_services_reklama');
}
return $this->render('Admin/Reklama/details.html.twig', [
'accessModules' => $_SESSION['accessModules'],
'files' => $files,
'incompletePayers' => $this->incompletePayers,
'title' => $title,
'activeMenuParent' => $this->activeMenuParent,
'item' => $item,
'form' => $form->createView(),
]);
// }else{
// return $this->redirectToRoute($_SESSION['accessModules'][0]);
// }
}
function filterForm($fields = null)
{
$form = $this->createFormBuilder();
$form = $form->add('name', TextType::class, [
'required' => false,
'label' => 'Type tekst',
'attr' => [
'style' => 'width: 200px',
'class' => 'pull-left form-control'
]
]);
$form = $form->add('agreementType', ChoiceType::class, [
'required' => false,
'label' => "Typ umowy",
'choices' => array(
'-wybierz-' => null,
'Efekt' => 'efekt',
'Abonament + Efekt' => 'aboefekt',
'Ryczałt' => 'rycz',
'Abonament + userzy' => 'abouser',
'Brak umowy' => 'brak'
),
'attr' => ['class' => 'form-control pull-left', 'style' => 'width: auto']
]);
$form = $form->add('company', ChoiceType::class, [
'label' => "Wystawca",
'choices' => array(
'-Wybierz-' => null,
'GOT' => 'GOT',
'JDG' => 'JDG',
'ZOO' => 'ZOO'
),
'attr' => ['class' => 'form-control pull-left', 'style' => 'width: auto']
]);
$form = $form->add('save', SubmitType::class, ['label' => 'Search', 'attr' => ['style' => 'margin-left: 10px;; margin-right: 10px;', 'class' => 'btn btn-theme pull-left']]);
$form = $form->getForm();
return $form;
}
/**
* @Route("/admin/hosting/przypisz", methods="POST")
*/
function changeClient(
Request $request,
ReklamaManagement $ReklamaManagement
) {
$requestContent = json_decode($request->getContent(), true);
if ($ReklamaManagement->changeClient($requestContent['id'], $requestContent['value'])) {
return new JsonResponse(['message' => $this->translator->trans('Success updated')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
}
/**
* @Route("/admin/reklama/uploadFile/{id}", methods="POST")
*/
function uploadFile(
$id,
Request $request,
ReklamaManagement $ReklamaManagement
) {
$item = $ReklamaManagement->load($id, null, null);
$file = $request->files->get('doc');
$filename = md5(uniqid()) . '.' . $file->guessExtension();
$originalFilename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $this->slugger->slug($originalFilename);
$newFilename = 'reklamafile-' . $id . '-' . $safeFilename . '-' . uniqid() . '.' . $file->guessExtension();
$filesLinks[] = 'uploads/reklama/' . $newFilename;
if (
$file->move(
$this->getParameter('uploads_reklama_directory'),
$newFilename
)
) {
$item->setFiles($item->getFiles() . ',' . implode(",", $filesLinks));
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($item);
$entityManager->flush();
return new JsonResponse(['newFilename' => str_replace('preorder-' . $id . '-', '', $newFilename)], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
}
/**
* @Route("/admin/reklama/removeFile", methods="POST")
*/
function removeFile(
Request $request,
ReklamaManagement $ReklamaManagement
) {
$requestContent = json_decode($request->getContent(), true);
if (!$requestContent['file']) {
return new JsonResponse(['message' => $this->translator->trans('Nie można usunąć')], JsonResponse::HTTP_FORBIDDEN);
} else {
$item = $ReklamaManagement->load($requestContent['id'], null, null);
$item->setFiles(str_replace("," . $requestContent['file'], "", $item->getFiles()));
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($item);
$entityManager->flush();
$filesystem = new Filesystem();
$filesystem->remove(['symlink', $requestContent['file']]);
return new JsonResponse(['message' => $this->translator->trans('Success removed')], JsonResponse::HTTP_OK);
}
}
/**
* @Route("/admin/reklama/usun", methods="POST")
*/
function remove(
Request $request,
ReklamaManagement $ReklamaManagement
) {
$requestContent = json_decode($request->getContent(), true);
if ($ReklamaManagement->remove($requestContent['id'])) {
return new JsonResponse(['message' => $this->translator->trans('Success removed')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
}
/**
* @Route("/admin/reklama/zmien-kolor", methods="POST")
*/
function changeStatus(
Request $request,
ReklamaManagement $ReklamaManagement
) {
$requestContent = json_decode($request->getContent(), true);
if ($ReklamaManagement->changeStatus($requestContent['id'], $requestContent['value'])) {
return new JsonResponse(['message' => $this->translator->trans('Success updated')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
}
/**
* @Route("/admin/reklama/usun-statusy", methods="GET", name="admin_dump_all_service_reklama")
*/
function dumpAllStatuses()
{
$items = $this->entityManager->getRepository(Reklama::class)->findBy(['status' => '2']);
foreach ($items as $item) {
$item->setStatus('0');
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($item);
$entityManager->flush();
}
return $this->redirectToRoute('admin_services_reklama');
}
/**
* @Route("/admin/reklama/zmien-w_status", methods="POST", name="admin_change_w_status_reklama")
*/
function changeWStatus(
Request $request,
ReklamaManagement $ReklamaManagement
) {
$requestContent = json_decode($request->getContent(), true);
$w_status = ($requestContent['status'] == 'checked') ? 1 : 0;
$item = $this->entityManager->getRepository(Reklama::class)->find($requestContent['id']);
if ($item) {
$item->setWStatus($w_status);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($item);
$entityManager->flush();
return new JsonResponse(['message' => $this->translator->trans('Success updated')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
}
}