<?php
namespace App\Controller;
use App\Model\DataObject\Business;
use Exception;
use Pimcore\Controller\FrontendController;
use Pimcore\Mail;
use Pimcore\Model\DataObject\Job;
use Pimcore\Model\DataObject\Language;
use Pimcore\Model\DataObject\News;
use Pimcore\Model\DataObject\Services;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class JobController extends FrontendController
{
/**
* @Template
* @param Request $request
* @return array
* @route("/{_locale}/jobs/{id}", name="jobDetail",methods={"GET"})
*/
public function detailAction(Request $request)
{
$job = Job::getById($request->get('id'));
if(!$job){
throw new Exception("Job not found",404);
}
$refKey = "jobs";
$refId = 2;
$nonOwnerRelations = $job->getRelationData($refKey, false, $refId)[0];
$bus = Business::getById($nonOwnerRelations["id"]);
return ["job"=>$job, "business" => $bus];
}
/**
* @Template
* @param Request $request
* @return array
* @route("/{_locale}/jobs/{id}", name="jobApply",methods={"POST"})
*/
public function applyAction(Request $request, ValidatorInterface $emailValidator)
{
if($request->get('email') && $request->get('message') && $request->get('phone') && $request->get('name')){
$emailConstraint = new Assert\Email();
$errors = $emailValidator->validate($request->get('email'), $emailConstraint);
if (count($errors) > 0) {
return ["error" => $errors[0]->getMessage()];
}
$job = Job::getById($request->get('id'));
if(!$job){
throw new Exception("Job not found",404);
}
$mailClient = new Mail();
$mailClient->setDocument("/".$request->getLocale()."/emails/job-apply-client");
$mailClient->to($request->get('email'));
$mailClient->setParams($request->request->all());
$mailClient->replyTo($job->getEmail());
$mailClient->send();
$mailBusiness = new Mail();
$mailBusiness->setDocument("/".$request->getLocale()."/emails/job-apply-business");
$mailBusiness->to($job->getEmail());
$mailBusiness->setParams($request->request->all());
$mailBusiness->replyTo($request->get('email'));
$mailBusiness->send();
return [];
}
return [];
}
/**
* @Template
* @param Request $request
* @return array
*/
public function listAction(Request $request)
{
$refKey = "jobs";
$refId = 2;
$jobs = new Job\Listing();
$jobs = $jobs->load();
$businesses = [];
$jobreturn = [];
foreach($jobs as $job){
$nonOwnerRelations = $job->getRelationData($refKey, false, $refId);
if($nonOwnerRelations){
$nonOwnerRelations = $nonOwnerRelations[0];
$jobreturn[] = $job;
}else{
continue;
}
$bus = Business::getById($nonOwnerRelations["id"]);
$businesses[] = $bus;
}
return ["jobs"=>$jobreturn, "businesses" => $businesses];
//TODO paginate
}
}