1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
public function resultsAction($page)
{
$session = $this->getRequest()->getSession();
$request = $this->container->get('request');
$searchEvent = $session->get('searchEvent');
if ($request->getMethod() == 'POST'){
$parameters = array_keys($request->request->all());
$nameForm = $parameters[0];
if ($nameForm == 'jesors_eventbundle_eventsearchindex'){
$form = $this->container->get('form.factory')->createBuilder(new EventSearchIndexType())->getForm();
} elseif($nameForm == 'jesors_eventbundle_eventsearch') {
$form = $this->container->get('form.factory')->createBuilder(new EventSearchType())->getForm();
}
$formHandler = new EventHandler($form, $request, $this->getDoctrine()->getManager());
if ($formHandler->process()) {
$location = $form['location']->getData();
$latitude = $form['latitude']->getData();
$longitude = $form['longitude']->getData();
$activity = $form['activity']->getData();
$date = $form['date']->getData();
$distance = $form['distance']->getData();
$filter = new GeoDistance('lat_long', array('lat' => $latitude,'lon' => $longitude), $distance);
$filtered = new Filtered(new MatchAll(), $filter);
$results = $this->container->get('fos_elastica.finder.website.event')->find($filtered, 15000);
$events = new Collections\ArrayCollection($results);
$dateFrom = new \DateTime($date);
$dateTo = new \DateTime(date('Y-m-d H:i:s', strtotime($date . ' + 1 day')));
$criteria = Criteria::create()
->where(Criteria::expr()->eq('activity', $activity));
if (!is_null($date)){
$criteria->andWhere(Criteria::expr()->gte('date', $dateFrom))
->andWhere(Criteria::expr()->lt('date', $dateTo));
} else {
$criteria->andWhere(Criteria::expr()->gte('date', new \DateTime(date('Y-m-d H:i:s'))));
}
$criteria->orderBy(array(
"date" => "ASC",
"time" => "ASC"
));
$session->set('searchEvent', $events->matching($criteria));
$session->set('searchLocation', $location);
$session->set('searchDistance', $distance);
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$events->matching($criteria),
$this->get('request')->query->get('page', 1),
15
);
}
} else {
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$searchEvent,
$this->get('request')->query->get('page', $page),
15
);
}
return $this->render('JesorsEventBundle:Event:list.html.twig', array(
'pagination' => $pagination
));
} |
Partager