Skip to content

Instantly share code, notes, and snippets.

@mrcmorales
Last active March 24, 2016 12:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrcmorales/feb3235ad4fd16465c85 to your computer and use it in GitHub Desktop.
Save mrcmorales/feb3235ad4fd16465c85 to your computer and use it in GitHub Desktop.
Twig function example
<?php
namespace Circuit\AppBundle\Twig;
use Circuit\AppBundle\Entity\Category;
use Circuit\AppBundle\Entity\Competition;
use Circuit\AppBundle\Entity\CompetitionSeason;
use Circuit\AppBundle\Entity\Event;
use Circuit\AppBundle\Entity\Race;
use Circuit\AppBundle\Enum\GenderEnum;
use Circuit\AppBundle\Repository\CompetitionRepository;
use Circuit\AppBundle\Repository\InscriptionRepository;
use Circuit\AppBundle\Repository\RankingRepository;
use Circuit\AppBundle\Repository\ResultRepository;
use Circuit\UserBundle\Entity\User;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Templating\EngineInterface;
class ClassificationExtension extends \Twig_Extension
{
/**
* @var ResultRepository
*/
private $resultRepository;
/**
* @var RankingRepository
*/
private $rankingRepository;
/**
* @var CompetitionRepository
*/
private $competitionRepository;
/**
* @var RouterInterface
*/
private $router;
/**
* @var InscriptionRepository
*/
private $inscriptionRepository;
/**
* ClassificationExtension constructor.
*
* @param ResultRepository $resultRepository
* @param RankingRepository $rankingRepository
* @param CompetitionRepository $competitionRepository
* @param InscriptionRepository $inscriptionRepository
* @param RouterInterface $router
*/
public function __construct(ResultRepository $resultRepository, RankingRepository $rankingRepository, CompetitionRepository $competitionRepository,
InscriptionRepository $inscriptionRepository,
RouterInterface $router)
{
$this->resultRepository = $resultRepository;
$this->rankingRepository = $rankingRepository;
$this->competitionRepository = $competitionRepository;
$this->router = $router;
$this->inscriptionRepository = $inscriptionRepository;
}
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('raceClassification', array($this, 'raceClassification')),
new \Twig_SimpleFunction('raceClassificationGeneralMale', array($this, 'raceClassificationGeneralMale')),
new \Twig_SimpleFunction('raceClassificationGeneralFemale', array($this, 'raceClassificationGeneralFemale')),
new \Twig_SimpleFunction('classification', array($this, 'classification')),
new \Twig_SimpleFunction('generalClassificationMale', array($this, 'generalClassificationMale')),
new \Twig_SimpleFunction('generalClassificationFemale', array($this, 'generalClassificationFemale')),
new \Twig_SimpleFunction('urlMainClassification', array($this, 'getUrlMainClassification')),
new \Twig_SimpleFunction('resultByUserAndRace', array($this, 'getResultByUserAndRace')),
new \Twig_SimpleFunction('userHasAtLeastOneInscriptionPayed', array($this, 'getUserHasAtLeastOneInscriptionPayed')),
);
}
/**
* @param CompetitionSeason $competitionSeason
* @param User $user
*
* @return bool
*/
public function getUserHasAtLeastOneInscriptionPayed(CompetitionSeason $competitionSeason, User $user)
{
return (bool) $this->inscriptionRepository->getUserHasAtLeastOneInscriptionPayed($competitionSeason, $user);
}
public function getResultByUserAndRace(User $user, Race $race = null)
{
return $this->resultRepository->findByRaceAndUser($race, $user);
}
public function getUrlMainClassification()
{
$competitions = $this->competitionRepository->findMenuCompetitions();
if (0 === count($competitions)) {
return $this->router->generate('circuit_home', [], true);
}
/** @var Competition $competition */
$competition = $competitions[0];
$competitionSeason = $competition->getSeasons()->first();
if (false === $competitionSeason instanceof $competitionSeason) {
return $this->router->generate('circuit_home', [], true);
}
$year = $competitionSeason->getYear()->format('Y');
return $this->router->generate('app_frontend_circuit_classification', ['competitionSlug' => $competition->getSlug(), 'year' => $year], true);
}
public function generalClassificationMale(CompetitionSeason $competitionSeason, $limit = null)
{
return $this->rankingRepository->findGeneralByCompetitionSeasonAndGender($competitionSeason, GenderEnum::MALE, $limit);
}
public function generalClassificationFemale(CompetitionSeason $competitionSeason, $limit = null)
{
return $this->rankingRepository->findGeneralByCompetitionSeasonAndGender($competitionSeason, GenderEnum::FEMALE, $limit);
}
public function classification(CompetitionSeason $competitionSeason, Category $category, $limit = null)
{
return $this->rankingRepository->findByCompetitionSeasonAndCategory($competitionSeason, $category, $limit);
}
public function raceClassification(Event $event, Category $category)
{
return $this->resultRepository->findByEventAndCategory($event, $category);
}
public function raceClassificationGeneralMale(Event $event)
{
return $this->resultRepository->findGeneralByEventAndGender($event, GenderEnum::MALE);
}
public function raceClassificationGeneralFemale(Event $event)
{
return $this->resultRepository->findGeneralByEventAndGender($event, GenderEnum::FEMALE);
}
public function getName()
{
return 'app_classification_extension';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment