<?php
/**
* Pimcore
*
* This source file is available under two different licenses:
* - GNU General Public License version 3 (GPLv3)
* - Pimcore Enterprise License (PEL)
* Full copyright and license information is available in
* LICENSE.md which is distributed with this source code.
*
* @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
* @license http://www.pimcore.org/license GPLv3 and PEL
*/
namespace App\Controller;
use App\Website\LinkGenerator\NewsLinkGenerator;
use App\Website\Navigation\BreadcrumbHelperService;
use Knp\Component\Pager\PaginatorInterface;
use Pimcore\Model\DataObject\Documents;
use Pimcore\Twig\Extension\Templating\HeadTitle;
use Pimcore\Twig\Extension\Templating\Placeholder;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\User\UserInterface;
use Pimcore\Model\DataObject;
use App\Form\MarketplaceFormType;
use App\Lib\Utility;
use App\Model\Marketplace;
use Symfony\Component\Form\FormError;
class MarketplaceController extends BaseController
{
const LIMIT_PER_PAGE = 10;
/**
* @Route("marketplace/listing", name="marketplace-listing")
*/
public function listingAction(Request $request, UserInterface $user,PaginatorInterface $paginator)
{
$page = $request->get('page',1);
$categoryId = $request->get('category_id',null);
$search = $request->get('search',null);
$marketplaceModel = new Marketplace();
$mpCategories = $marketplaceModel->getMarketplaceCategories();
$marketplace = new DataObject\Marketplace\Listing();
if($categoryId && $search){
$marketplace->setCondition('Category__id = ? AND (title LIKE "%'.$search.'%" OR description LIKE "%'.$search.'%")',[$categoryId]);
}else if(!$categoryId && $search){
$marketplace->setCondition('(title LIKE "%'.$search.'%" OR description LIKE "%'.$search.'%")');
}else if($categoryId && !$search){
$marketplace->setCondition('Category__id = ?',[$categoryId]);
}
$marketplace->setOrderKey('o_creationDate');
$marketplace->setOrder('DESC');
$paginator = $paginator->paginate(
$marketplace,
$page,
self::LIMIT_PER_PAGE
);
$params['paginationVariables'] = $paginator->getPaginationData();
$params['totalCount'] = $paginator->getTotalItemCount();
$params['offset'] = $paginator->getCurrentPageNumber();
$params['limit'] = $paginator->getItemNumberPerPage();
$params['categories'] = $mpCategories;
$params['posts'] = $paginator;
$params['category_id'] = $categoryId;
return $this->render('marketplace/listing.html.twig',$params);
}
/**
* @Route("marketplace/add", name="marketplace-add")
*/
public function addAction(Request $request, UserInterface $user)
{
// build the registration form and pre-fill it with customer data
$form = $this->createForm(MarketplaceFormType::class);
$form->handleRequest($request);
$errors = [];
// p_r($form->isValid());exit;
if ($form->isSubmitted() && !$form->isValid()) {
// p_r($form->getErrors());exit;
try {
$data = $form->getViewData();
$key = strtolower(Utility::clean($data['title'])).'_'.$user->getId();
$post = \Pimcore\Model\DataObject::getByPath('/Marketplace/Post/'.$user->getEmail().'/'.$key);
if($post)
{
throw new \Exception("Il titolo esiste giĆ ");
}
$post = new Marketplace();
$post->setKey($key);
$post->setParent(\Pimcore\Model\DataObject\Service::createFolderByPath('/Marketplace/Post/'.$user->getEmail().'/'));
$post->setPublished(true);
$post->setData($form, $request, $user)->save();
$this->addFlash('success', 'Post salvato con successo');
return $this->redirectToRoute(
"marketplace-my-listing");
} catch (\Exception $e) {
//p_r($e->getMessage());exit;
$form->addError(new FormError($e->getMessage()));
}
}
if ($form->isSubmitted() && $form->isValid()) {
foreach ($form->getErrors() as $error) {
$errors[] = $error->getMessage();
}
// p_r($errors);exit;
}
return $this->render('marketplace/add.html.twig', ['form' => $form->createView(),'_target_path'=>$request->headers->get('referer'),'errors' => $errors]);
}
/**
* @Route("marketplace/mylisting", name="marketplace-my-listing")
*/
public function myListingAction(Request $request, UserInterface $user,PaginatorInterface $paginator)
{
$page = $request->get('page',1);
$marketplace = new DataObject\Marketplace\Listing();
$marketplace->setCondition('User__id = ?',[$user->getId()]);
$marketplace->setOrderKey('o_creationDate');
$marketplace->setOrder('DESC');
$paginator = $paginator->paginate(
$marketplace,
$page,
self::LIMIT_PER_PAGE
);
$params['paginationVariables'] = $paginator->getPaginationData();
$params['totalCount'] = $paginator->getTotalItemCount();
$params['offset'] = $paginator->getCurrentPageNumber();
$params['limit'] = $paginator->getItemNumberPerPage();
$params['posts'] = $paginator;
return $this->render('marketplace/mylisting.html.twig',$params);
}
/**
* @Route("marketplace/edit", name="marketplace-edit")
*/
public function editAction(Request $request, UserInterface $user)
{
$id = $request->get('id',null);
$post = \Pimcore\Model\DataObject::getById($id);
if($post instanceof \App\Model\Marketplace){
$postUser = $post->getUser();
if($postUser)
{
if($postUser->getId() == $user->getId()){
$data = $post->transformData();
$form = $this->createForm(MarketplaceFormType::class,$data);
$form->handleRequest($request);
$errors = [];
if ($form->isSubmitted() && !$form->isValid()) {
try {
$post->setData($form, $request, $user,true)->save();
$this->addFlash('success', 'Post salvato con successo');
return $this->redirectToRoute(
"marketplace-my-listing");
} catch (\Exception $e) {
$form->addError(new FormError($e->getMessage()));
}
}
if ($form->isSubmitted() && !$form->isValid()) {
foreach ($form->getErrors() as $error) {
$errors[] = $error->getMessage();
}
}
}else{
return $this->redirectToRoute('marketplace-my-listing');
}
}else{
return $this->redirectToRoute('marketplace-my-listing');
}
}else{
return $this->redirectToRoute('marketplace-my-listing');
}
//if($post )
return $this->render('marketplace/edit.html.twig', ['form' => $form->createView(),'post'=>$post,'images'=>$data['images'],'attachment'=>$data['attachment'],'_target_path'=>$request->headers->get('referer'),'errors' => $errors]);
}
/**
* @Route("/marketplace/remove/image/{post}/{image_id}", name="remove-image")
*/
public function removeImageAction(Request $request, UserInterface $user)
{
$postId = $request->get('post',null);
$imageId = $request->get('image_id',null);
$post = \Pimcore\Model\DataObject::getById($postId);
if($post instanceof \App\Model\Marketplace){
$postUser = $post->getUser();
if($postUser)
{
if($postUser->getId() == $user->getId()){
$image = \Pimcore\Model\Asset::getById($imageId);
if($image){
$image->delete();
}
return $this->redirectToRoute('marketplace-edit',['id'=>$postId]);
}else{
return $this->redirectToRoute('marketplace-my-listing');
}
}else{
return $this->redirectToRoute('marketplace-my-listing');
}
}else{
return $this->redirectToRoute('marketplace-my-listing');
}
//if($post )
return $this->render('marketplace/edit.html.twig', ['form' => $form->createView(),'images'=>$data['images'],'_target_path'=>$request->headers->get('referer'),'errors' => $errors]);
}
}