<?php
namespace App\Controller\Frontend;
use App\Entity\MainSlider;
use App\Entity\Talent;
use App\Entity\TalentRole;
use App\Entity\RoleType;
use App\Entity\ProductMeta;
use App\Entity\PageInformation;
use App\Entity\Transaction;
use App\Services\Helper;
use App\Services\ManagerMail;
use Exception;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Sermepa\Tpv\Tpv;
class MemberController extends AbstractController
{
/**
* @Route("/{_locale}/recover-password")
*/
public function recoveryPasswordAction(){
return $this->render('security/forgot_password.html.twig');
}
/**
* @Route("/{_locale}", name="homepage" , defaults={"_locale": "en"})
*/
public function indexAction(Request $request)
{
if ($request->get('_locale') == "login") {
return $this->redirectToRoute('app_login', ['_locale' => 'en']);
}
$em = $this->getDoctrine()->getManager();
$talentRoles = $em->getRepository(TalentRole::class)->findBy([],['orderTalentRole' => 'ASC']);
$slider = $em->getRepository(MainSlider::class)->findBy([],['orderSlider' => 'ASC']);
$tempArray = [];
foreach($talentRoles as $key => $talentRole){
$tempArray[$key]['role'] = $talentRole;
$tempArray[$key]['talent'] = false;
$talents = $em->getRepository(Talent::class)->findBy(['idTalentRole' => $talentRole, 'newTalent' => 1]);
if($talents || $talentRole->getName() == 'ROLE_PRODUCTION_DESSIGN'){
$tempArray[$key]['talent'] = true;
}
}
$talentRoles = $tempArray;
return $this->render('frontend/homepage.html.twig',array(
'talentRoles' => $talentRoles,
'images' => $slider
));
}
/**
* @Route("/{_locale}/about", name="about")
*/
public function aboutAction(){
$em = $this->getDoctrine()->getManager();
$talentRoles = $em->getRepository(TalentRole::class)->findBy([],['orderTalentRole' => 'ASC']);
$tempArray = [];
foreach($talentRoles as $key => $talentRole){
$tempArray[$key]['role'] = $talentRole;
$tempArray[$key]['talent'] = false;
$talents = $em->getRepository(Talent::class)->findBy(['idTalentRole' => $talentRole, 'newTalent' => 1]);
if($talents || $talentRole->getName() == 'ROLE_PRODUCTION_DESSIGN'){
$tempArray[$key]['talent'] = true;
}
}
$page = $em->getRepository(PageInformation::class)->findOneBy(['pageName' => 'about']);
$talentRoles = $tempArray;
return $this->render('frontend/about.html.twig',array(
'talentRoles' => $talentRoles,
'page' => $page,
));
}
/**
* @Route("/{_locale}/contact", name="contact")
*/
public function contactUsAction(){
$em = $this->getDoctrine()->getManager();
$talentRoles = $em->getRepository(TalentRole::class)->findBy([],['orderTalentRole' => 'ASC']);
$tempArray = [];
foreach($talentRoles as $key => $talentRole){
$tempArray[$key]['role'] = $talentRole;
$tempArray[$key]['talent'] = false;
$talents = $em->getRepository(Talent::class)->findBy(['idTalentRole' => $talentRole, 'newTalent' => 1]);
if($talents || $talentRole->getName() == 'ROLE_PRODUCTION_DESSIGN'){
$tempArray[$key]['talent'] = true;
}
}
$talentRoles = $tempArray;
return $this->render('frontend/contact.html.twig',array(
'talentRoles' => $talentRoles
));
}
/**
* @Route("/{_locale}/join", name="join")
*/
public function joinUsAction(){
$em = $this->getDoctrine()->getManager();
$talentRoles = $em->getRepository(TalentRole::class)->findBy([],['orderTalentRole' => 'ASC']);
$tempArray = [];
foreach($talentRoles as $key => $talentRole){
$tempArray[$key]['role'] = $talentRole;
$tempArray[$key]['talent'] = false;
$talents = $em->getRepository(Talent::class)->findBy(['idTalentRole' => $talentRole, 'newTalent' => 1]);
if($talents || $talentRole->getName() == 'ROLE_PRODUCTION_DESSIGN'){
$tempArray[$key]['talent'] = true;
}
}
$page = $em->getRepository(PageInformation::class)->findOneBy(['pageName' => 'join']);
$talentRoles = $tempArray;
return $this->render('frontend/join.html.twig',array(
'talentRoles' => $talentRoles,
'page' => $page
));
}
/**
* @Route("/{_locale}/submit", name="submit")
*/
public function submitAction(){
$em = $this->getDoctrine()->getManager();
$talentRoles = $em->getRepository(TalentRole::class)->findBy([],['orderTalentRole' => 'ASC']);
$tempArray = [];
foreach($talentRoles as $key => $talentRole){
$tempArray[$key]['role'] = $talentRole;
$tempArray[$key]['talent'] = false;
$talents = $em->getRepository(Talent::class)->findBy(['idTalentRole' => $talentRole]);
if($talents || $talentRole->getName() == 'ROLE_PRODUCTION_DESSIGN'){
$tempArray[$key]['talent'] = true;
}
}
$page = $em->getRepository(ProductMeta::class)->findOneBy(['url' => 'worksubmit']);
$talentRoles = $tempArray;
return $this->render('frontend/library/submit.html.twig',array(
'talentRoles' => $talentRoles,
'page' => $page
));
}
/**
* @Route("/{_locale}/library/librarysubmit")
*/
public function librarySubmit(Request $request, ManagerMail $manager_mail){
$em = $this->getDoctrine()->getManager();
$helper = new Helper();
$talentRoles = $em->getRepository(TalentRole::class)->findBy([],['orderTalentRole' => 'ASC']);
$tempArray = [];
$response = new JsonResponse();
/* TPV VARIABLES */
$dsMerchantMerchantCode = $this->getParameter('merchant_code');
$dsMerchantCurrency = $this->getParameter('merchant_currency');
$dsMerchantTerminal = $this->getParameter('merchant_terminal');
$dsSecretKey = $this->getParameter('merchant_key');
$total=25;
$time = time();
$idOrder = $time;
$tradeName= "We are Productive";
$session = $request->getSession();
$formHasError = 0;
$formMsgError = "";
$formInputError = "";
$parameters = [];
foreach ($request->request->all() as $key => $item) {
if ($key != '_csrf_token') {
$parameters[$key] = $helper->sanitize($item);
}
};
try {
$name = $parameters['name'];
$vimeourl = $parameters['vimeourl'];
$email = $parameters['email'];
$role = $parameters['role'];
$nomname = $parameters['nomname'];
$nomrole = $parameters['nomrole'];
$director = $parameters['director'];
$prodcompany = $parameters['prodcompany'];
$brand = $parameters['brand'];
$country = $parameters['country'];
$subject = 'Productive Network Work Submit';
$message = $parameters['description'];
$disclaimerAccept = filter_var($parameters['acceptconditions'], FILTER_VALIDATE_BOOLEAN);
if(!$country){
$formHasError = 1;
$formMsgError = 'Please provide a valid country';
$formInputError = 'country';
}
if(!$name){
$formHasError = 1;
$formMsgError = 'Please provide a name';
$formInputError = 'name';
}
if(!$role){
$formHasError = 1;
$formMsgError = 'Please provide a role';
$formInputError = 'role';
}
if(!$nomname){
$formHasError = 1;
$formMsgError = 'Please provide a nominated name';
$formInputError = 'name';
}
if(!$nomrole){
$formHasError = 1;
$formMsgError = 'Please provide a nominated role';
$formInputError = 'name';
}
if(!$vimeourl){
$formHasError = 1;
$formMsgError = 'Please provide a Vimeo URL';
$formInputError = 'vimeourl';
}
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$formHasError = 1;
$formMsgError = 'Please provide a valid email';
$formInputError = 'email';
}
if(!$subject){
$formHasError = 1;
$formMsgError = 'Please provide a valid subject';
$formInputError = 'subject';
}
if(!$disclaimerAccept){
$formHasError = 1;
$formMsgError = 'Please accept the terms and conditions';
$formInputError = 'acceptconditions';
}
if($formHasError){
$response->setStatusCode(500);
$response->setData(array(
'response' => 'error',
'msg' => $formMsgError,
'input' => $formInputError
));
return $response;
}
/* SAVE DATA TO TRANSACTION */
$transaction = new Transaction();
$transaction->setIdOrder($idOrder);
$transaction->setCreationDate($time);
$transaction->setDetailsMember(json_encode($parameters));
$transaction->setTotal($total);
$transaction->setFinished(0);
$em->persist($transaction);
$em->flush();
/* PAYMENT GATEWAY */
$session->set('idOrder', $idOrder);
$redsys = new Tpv();
$redsys->setAmount($total);
$redsys->setOrder($time);
$redsys->setMerchantcode($dsMerchantMerchantCode);
$redsys->setCurrency($dsMerchantCurrency);
$redsys->setTransactiontype('0');
$redsys->setTerminal($dsMerchantTerminal);
$redsys->setMethod('C');
$redsys->setNotification($this->generateUrl('app_frontend_member_tpvnotification', [], 0));
$redsys->setUrlOk($this->generateUrl('transactionsuccess', [], 0));
$redsys->setUrlKo($this->generateUrl('transactionerror', [], 0));
$redsys->setVersion('HMAC_SHA256_V1');
$redsys->setTitular($name);
$redsys->setTradeName($tradeName);
$redsys->setProductDescription('Productive Network work submission');
$redsys->setLanguage('002');
$redsys->setAttributesSubmit('btn_submit', 'finishBoughtRedsys', 'Pay', 'display:none;');
$redsys->setEnvironment('live');
$signature = $redsys->generateMerchantSignature($dsSecretKey);
$redsys->setMerchantSignature($signature);
$form = $redsys->createForm();
$response->setStatusCode(200);
$response->setData(array(
'response' => 'success',
'html' => $form,
));
return $response;
} catch(Exception $e){
$session->set('idOrder', null);
$response->setStatusCode(500);
$response->setData(array(
'response' => 'error',
'msg' => 'Unexpected error',
));
return $response;
}
}
/**
* @Route("/{_locale}/submit/tpvnotification")
*/
public function tpvNotification(Request $request, ManagerMail $manager_mail){
$em = $this->getDoctrine()->getManager();
$response = new JsonResponse();
$adminMailAddress='kate@productive.es';
$subject = 'Productive Network Work Submission';
$session = $request->getSession();
try{
$redsys = new Tpv();
$key = $this->getParameter('merchant_key');
$parameters = $redsys->getMerchantParameters($_POST["Ds_MerchantParameters"]);
$DsResponse = $parameters["Ds_Response"];
$DsResponse += 0;
if ($redsys->check($key, $_POST) && $DsResponse <= 99) {
$idOrder = $parameters['Ds_Order'];
$transaction = $em->getRepository(Transaction::class)->findOneBy(['idOrder' => $idOrder]);
$transaction->setFinished(1);
$em->persist($transaction);
$em->flush();
$detailsMember = json_decode($transaction->getDetailsMember(), true);
/* DETAILS MEMBER */
$name = $detailsMember['name'];
$email = $detailsMember['email'];
$role = $detailsMember['role'];
$nomname = $detailsMember['nomname'];
$nomrole = $detailsMember['nomrole'];
$director = $detailsMember['director'];
$prodcompany = $detailsMember['prodcompany'];
$brand = $detailsMember['brand'];
$serviceprodcompany = $detailsMember['serviceprodcompany'];
$subject = $detailsMember['name'];
$message = $detailsMember['description'];
$vimeourl = $detailsMember['vimeourl'];
$country = $detailsMember['country'];
$manager_mail->templeteOne([
'to' => $adminMailAddress,
'subject' => $subject,
'cco' => null,
'body' =>
$this->renderView('templates/emails/library/contact_mail.html.twig', array(
'name' => $name,
'email' => $email,
'role' => $role,
'nomname' => $nomname,
'nomrole' => $nomrole,
'director' => $role,
'prodcompany' => $prodcompany,
'brand' => $brand,
'serviceprodcompany' => $serviceprodcompany,
'subject' => $subject,
'message' => $message,
'vimeourl' => $vimeourl,
'country' => $country,
))
]);
$manager_mail->templeteOne([
'to' => $email,
'subject' => $subject,
'cco' => $adminMailAddress,
'body' =>
$this->renderView('templates/emails/library/contact_client_mail.html.twig', array())
]);
$response->setStatusCode(200);
$response->setData(array(
'response' => 'success',
'msg' => 'The message has been sent successfully.'
));
return $response;
} else {
//acciones a realizar si ha sido erroneo
}
} catch (TpvException $e) {
echo $e->getMessage();
}
return $response;
}
/**
* @Route("/{_locale}/transaction/success", name="transactionsuccess")
*/
public function transactionSuccess(){
$em = $this->getDoctrine()->getManager();
$talentRoles = $em->getRepository(TalentRole::class)->findBy([],['orderTalentRole' => 'ASC']);
$tempArray = [];
foreach($talentRoles as $key => $talentRole){
$tempArray[$key]['role'] = $talentRole;
$tempArray[$key]['talent'] = false;
$talents = $em->getRepository(Talent::class)->findBy(['idTalentRole' => $talentRole]);
}
$talentRoles = $tempArray;
return $this->render('frontend/library/transactionsuccess.html.twig',array(
'talentRoles' => $talentRoles
));
}
/**
* @Route("/{_locale}/transaction/error", name="transactionerror")
*/
public function transactionerror(){
$em = $this->getDoctrine()->getManager();
$talentRoles = $em->getRepository(TalentRole::class)->findBy([],['orderTalentRole' => 'ASC']);
$tempArray = [];
foreach($talentRoles as $key => $talentRole){
$tempArray[$key]['role'] = $talentRole;
$tempArray[$key]['talent'] = false;
$talents = $em->getRepository(Talent::class)->findBy(['idTalentRole' => $talentRole]);
}
$talentRoles = $tempArray;
return $this->render('frontend/library/transactionerror.html.twig',array(
'talentRoles' => $talentRoles
));
}
/**
* @Route("/{_locale}/consultancy", name="consultancy")
*/
public function consultancyAction(){
$em = $this->getDoctrine()->getManager();
$talentRoles = $em->getRepository(TalentRole::class)->findBy([],['orderTalentRole' => 'ASC']);
$tempArray = [];
foreach($talentRoles as $key => $talentRole){
$tempArray[$key]['role'] = $talentRole;
$tempArray[$key]['talent'] = false;
$talents = $em->getRepository(Talent::class)->findBy(['idTalentRole' => $talentRole, 'newTalent' => 1]);
if($talents || $talentRole->getName() == 'ROLE_PRODUCTION_DESSIGN'){
$tempArray[$key]['talent'] = true;
}
}
$page = $em->getRepository(PageInformation::class)->findOneBy(['pageName' => 'consultancy']);
$talentRoles = $tempArray;
return $this->render('frontend/consultancy.html.twig',array(
'talentRoles' => $talentRoles,
'page' => $page
));
}
/**
* @Route("/{_locale}/page/{slug}")
*/
public function customPageAction(Request $request){
$em = $this->getDoctrine()->getManager();
$helper = new Helper();
$talentRoles = $em->getRepository(TalentRole::class)->findBy([],['orderTalentRole' => 'ASC']);
$tempArray = [];
$slug = $helper->sanitize($request->get('slug'));
foreach($talentRoles as $key => $talentRole){
$tempArray[$key]['role'] = $talentRole;
$tempArray[$key]['talent'] = false;
$talents = $em->getRepository(Talent::class)->findBy(['idTalentRole' => $talentRole]);
}
$page = $em->getRepository(PageInformation::class)->findOneBy(['pageName' => $slug]);
$talentRole = $em->getRepository(TalentRole::class)->findOneBy(['idRolePage' => $page->getIdPageInformation()]);
$talentRoles = $tempArray;
return $this->render('frontend/custompagetext.html.twig',array(
'talentRoles' => $talentRoles,
'talentRole' => $talentRole,
'page' => $page
));
}
/**
* @Route("/{_locale}/legal-advice", name="legaladvice")
*/
public function legalAdviceAction(){
$em = $this->getDoctrine()->getManager();
$talentRoles = $em->getRepository(TalentRole::class)->findBy([],['orderTalentRole' => 'ASC']);
$tempArray = [];
foreach($talentRoles as $key => $talentRole){
$tempArray[$key]['role'] = $talentRole;
$tempArray[$key]['talent'] = false;
$talents = $em->getRepository(Talent::class)->findBy(['idTalentRole' => $talentRole, 'newTalent' => 1]);
if($talents || $talentRole->getName() == 'ROLE_PRODUCTION_DESSIGN'){
$tempArray[$key]['talent'] = true;
}
}
$talentRoles = $tempArray;
return $this->render('frontend/legalwarning.html.twig',array(
'talentRoles' => $talentRoles
));
}
/**
* @Route("/{_locale}/api/contact")
*/
public function apiContactAction(Request $request, Helper $helper, ManagerMail $manager_mail){
$em = $this->getDoctrine()->getManager();
$response = new JsonResponse();
try {
$name = $helper->sanitize($request->request->get('name'));
$surname = $helper->sanitize($request->request->get('surname'));
$email = $helper->sanitize($request->request->get('email'));
$subject = $helper->sanitize($request->request->get('subject'));
$message = $helper->sanitize($request->request->get('message'));
if(!$name){
$response->setStatusCode(500);
$response->setData(array(
'response' => 'error',
'msg' => 'Please provide a valid name',
'input' => 'name'
));
return $response;
}
if(!$surname){
$response->setStatusCode(500);
$response->setData(array(
'response' => 'error',
'msg' => 'Please provide a valid surname',
'input' => 'surname'
));
return $response;
}
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$response->setStatusCode(500);
$response->setData(array(
'response' => 'error',
'msg' => 'Please provide a valid email',
'input' => 'email'
));
return $response;
}
if(!$subject){
$response->setStatusCode(500);
$response->setData(array(
'response' => 'error',
'msg' => 'Please provide a valid subject',
'input' => 'subject'
));
return $response;
}
if(!$message){
$response->setStatusCode(500);
$response->setData(array(
'response' => 'error',
'msg' => 'Please provide a valid message',
'input' => 'message'
));
return $response;
}
$manager_mail->templeteOne([
'to' => 'kate@productive.es',
'subject' => $subject,
'cco' => null,
'body' =>
$this->renderView('templates/emails/member/contact_mail.html.twig', array(
'subject' => $subject,
'message' => $message,
'name' => $name,
'surname' => $surname,
'email' => $email
))
]);
$response->setStatusCode(200);
$response->setData(array(
'response' => 'error',
'msg' => 'The message has been sent successfully'
));
return $response;
} catch(Exception $e){
$response->setStatusCode(500);
$response->setData(array(
'response' => 'error',
'msg' => 'The message couldn\'t be sent, please try again later'
));
return $response;
}
}
}