src/Controller/MainController.php line 384

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: joakim
  5.  * Date: 2018-02-05
  6.  * Time: 08:38
  7.  */
  8. namespace App\Controller;
  9. use App\Entity\Binocular;
  10. use App\Entity\Chilitexts;
  11. use App\Entity\Drivers;
  12. use App\Entity\Foreignstarts;
  13. use App\Entity\Gambling;
  14. use App\Entity\Horses;
  15. use App\Entity\Legtypecodes;
  16. use App\Entity\Legtypes;
  17. use App\Entity\Meetings;
  18. use App\Entity\Races;
  19. use App\Entity\Ranking;
  20. use App\Entity\Results;
  21. use App\Entity\Starts;
  22. use App\Entity\Swechilitexts;
  23. use App\Entity\Swegambling;
  24. use App\Entity\Swemeetings;
  25. use App\Entity\Trainers;
  26. use App\Repository\RacesRepository;
  27. use Detection\MobileDetect;
  28. use Symfony\Component\HttpFoundation\JsonResponse;
  29. use Symfony\Component\Routing\Annotation\Route;
  30. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  31. // use Symfony\Component\Serializer\SerializerInterface;
  32. // use Symfony\Component\Cache\Adapter\AdapterInterface;
  33. use Symfony\Component\HttpFoundation\Response;
  34. // use Symfony\Component\HttpFoundation\JsonResponse;
  35. use Symfony\Component\HttpFoundation\Request;
  36. // use Symfony\Component\Translation\Translator;
  37. use App\Twig\AppExtension;
  38. class MainController extends AbstractController
  39. {
  40.     private function cookie() {
  41.         if ($_SERVER['APP_ENV'] == 'dev') return true;
  42.         return (isset($_COOKIE['cid_tkr']));
  43.     }
  44.     public function getFooter()
  45.     {
  46.         return $this->render('footer.html.twig', [
  47.             'version' => TGNHESTEFAKTAVERSION,
  48.         ]);
  49.     }
  50.     public function getDDbet($meeting)
  51.     {
  52.         $em $this->getDoctrine()->getManager();
  53.         // Get races in meeting
  54.         $sql 'select id from races r
  55.                 where r.rac_mee_id = ' $meeting ' and r.rac_legtypes like "%DD%"
  56.                 order by r.rac_raceno';
  57.         $statement $em->getConnection()->prepare($sql);
  58.         $statement->execute();
  59.         $races_in_legtype $statement->fetchAll();
  60.         // Get gambling for meeting
  61.         $sql 'select * from gambling g
  62.                 where g.id = ' $meeting;
  63.         $statement $em->getConnection()->prepare($sql);
  64.         $statement->execute();
  65.         $gambling_for_meeting $statement->fetch();
  66.         $gambling_for_meeting json_decode($gambling_for_meeting['gam_gambling'],1);
  67.         #dd($gambling_for_meeting);
  68.         $dd_for_legtype $gambling_for_meeting['DD'];
  69.         #dd($dd_for_legtype);
  70.         $dd[0] = $dd_for_legtype[1];
  71.         $dd[1] = $dd_for_legtype[2];
  72.         foreach ($races_in_legtype as $key => $r) {
  73.             // Get ranking in race
  74.             $sql 'select * from ranking r
  75.                     where r.id = ' $r['id'];
  76.             $statement $em->getConnection()->prepare($sql);
  77.             $statement->execute();
  78.             $ranking_in_race $statement->fetch();
  79.             $ranking_in_race explode(',',$ranking_in_race['ran_rank']);
  80.             $ranking_in_race array_slice($ranking_in_race,0,$dd[$key]);
  81.             #dd($ranking_in_race);
  82.             $ddarr[$key] = $ranking_in_race;
  83.         }
  84.         return $this->render('pages/ddbet.html.twig', [
  85.             'ddarr' => $ddarr,
  86.         ]);
  87.     }
  88.     public function getSweDDbet($meeting)
  89.     {
  90.         $em $this->getDoctrine()->getManager();
  91.         // Get races in meeting
  92.         $sql 'select id from sweraces r
  93.                 where r.swemeetings_id = ' $meeting ' and r.legtypes like "%DD%"
  94.                 order by r.raceno';
  95.         $statement $em->getConnection()->prepare($sql);
  96.         $statement->execute();
  97.         $races_in_legtype $statement->fetchAll();
  98.         // Get gambling for meeting
  99.         $sql 'select * from swegambling g
  100.                 where g.id = ' $meeting;
  101.         $statement $em->getConnection()->prepare($sql);
  102.         $statement->execute();
  103.         $gambling_for_meeting $statement->fetch();
  104.         $gambling_for_meeting json_decode($gambling_for_meeting['gam_gambling'],1);
  105.         #dd($gambling_for_meeting);
  106.         $dd_for_legtype $gambling_for_meeting['DD'];
  107.         $dd[0] = $dd_for_legtype[1];
  108.         $dd[1] = $dd_for_legtype[2];
  109.         foreach ($races_in_legtype as $key => $r) {
  110.             // Get ranking in race
  111.             $sql 'select * from sweranking r
  112.                     where r.id = ' $r['id'];
  113.             $statement $em->getConnection()->prepare($sql);
  114.             $statement->execute();
  115.             $ranking_in_race $statement->fetch();
  116.             $ranking_in_race explode(',',$ranking_in_race['ran_rank']);
  117.             $ranking_in_race array_slice($ranking_in_race,0,$dd[$key]);
  118.             #dd($ranking_in_race);
  119.             $ddarr[$key] = $ranking_in_race;
  120.         }
  121.         return $this->render('pages/ddbet.html.twig', [
  122.             'ddarr' => $ddarr,
  123.         ]);
  124.     }
  125.     /**
  126.      * @Route("/xxx/{meeting}/{legtype}", name="xxx_page")
  127.      */
  128.     public function getStartlist($meeting,$legtype)
  129.     {
  130.         $em $this->getDoctrine()->getManager();
  131.         // Get races in meeting
  132.         $sql 'select * from races r
  133.                 where r.rac_mee_id = ' $meeting ' and r.rac_legtypes like "%' $legtype '%"
  134.                 order by r.rac_raceno';
  135.         #exit($sql);
  136.         $statement $em->getConnection()->prepare($sql);
  137.         $statement->execute();
  138.         $races_in_legtype $statement->fetchAll();
  139.         #dd($races_in_legtype);
  140.         // Check if races are V65 or V75 and includes DD
  141.         $sql 'select * from races r
  142.                 where r.rac_mee_id = ' $meeting ' and r.rac_legtypes like "%' $legtype '%DD"
  143.                 order by r.rac_raceno';
  144.         #exit($sql);
  145.         $statement $em->getConnection()->prepare($sql);
  146.         $statement->execute();
  147.         $ddraces_in_legtype $statement->fetchAll();
  148.         #dd($ddraces_in_legtype);
  149.         if (count($ddraces_in_legtype) > 0$hasDD true;
  150.         else $hasDD false;
  151.         // Get gambling for meeting
  152.         $sql 'select * from gambling g
  153.                 where g.id = ' $meeting;
  154.         $statement $em->getConnection()->prepare($sql);
  155.         $statement->execute();
  156.         $gambling_for_meeting $statement->fetch();
  157.         $gambling_for_meeting json_decode($gambling_for_meeting['gam_gambling'],1);
  158.         #dd($gambling_for_meeting);
  159.         $gambling_for_legtype $gambling_for_meeting[$legtype];
  160.         #dd($gambling_for_legtype);
  161.         foreach ($races_in_legtype as $r) {
  162.             // Get ranking in race
  163.             $sql 'select * from ranking r
  164.                     where r.id = ' $r['id'];
  165.             $statement $em->getConnection()->prepare($sql);
  166.             $statement->execute();
  167.             $ranking_in_race $statement->fetch();
  168.             #dd($ranking_in_race);
  169.             // Get starts in race
  170.             $sql 'select s.sta_startno,h.hor_name from starts s
  171.                     left join horses h on s.sta_hor_id = h.id
  172.                     where s.sta_rac_id = ' $r['id'] . ' and sta_startno in (' $ranking_in_race['ran_rank'] . ')
  173.                     order by field(s.sta_startno,' $ranking_in_race['ran_rank'] . ')';
  174.             ;
  175.             $statement $em->getConnection()->prepare($sql);
  176.             $statement->execute();
  177.             $starts_in_race $statement->fetchAll();
  178.             #dd($starts_in_race);
  179.             $races[$r['id']]['ranking'] = $starts_in_race;
  180.             #$races[$r['id']]['winningchance'] = explode(',',$ranking_in_race['ran_winningchance']);
  181.         }
  182.         #dd($races);
  183.         return $this->render('pages/startlist.html.twig', [
  184.             'races' => $races,
  185.             'legtype' => $legtype,
  186.             'gambling' => $gambling_for_legtype,
  187.             'hasDD' => $hasDD,
  188.         ]);
  189.     }
  190.     /**
  191.      * @Route("/xxxSWE/{meeting}/{legtype}", name="xxxSWE_page")
  192.      */
  193.     public function getSweStartlist($meeting,$legtype)
  194.     {
  195.         $em $this->getDoctrine()->getManager();
  196.         // Get races in meeting
  197.         $sql 'select * from sweraces r
  198.                 where r.swemeetings_id = ' $meeting ' and r.legtypes like "%' $legtype '%"
  199.                 order by r.raceno';
  200.         $statement $em->getConnection()->prepare($sql);
  201.         $statement->execute();
  202.         $races_in_legtype $statement->fetchAll();
  203.         #dd($races_in_legtype);
  204.         // Check if races are V65, V75 or V86 and includes DD
  205.         $sql 'select * from sweraces r
  206.                 where r.swemeetings_id = ' $meeting ' and r.legtypes like "%' $legtype '%DD%"
  207.                 order by r.raceno';
  208.         $statement $em->getConnection()->prepare($sql);
  209.         $statement->execute();
  210.         $ddraces_in_legtype $statement->fetchAll();
  211.         #dd($ddraces_in_legtype);
  212.         if (count($ddraces_in_legtype) > 0$hasDD true;
  213.         else $hasDD false;
  214.         // Get gambling for meeting
  215.         $sql 'select * from swegambling g
  216.                 where g.id = ' $meeting;
  217.         $statement $em->getConnection()->prepare($sql);
  218.         $statement->execute();
  219.         $gambling_for_meeting $statement->fetch();
  220.         $gambling_for_meeting json_decode($gambling_for_meeting['gam_gambling'],1);
  221.         #dd($gambling_for_meeting);
  222.         $gambling_for_legtype $gambling_for_meeting[$legtype];
  223.         #dd($gambling_for_legtype);
  224.         foreach ($races_in_legtype as $r) {
  225.             // Get ranking in race
  226.             $sql 'select * from sweranking r
  227.                     where r.id = ' $r['id'];
  228.             $statement $em->getConnection()->prepare($sql);
  229.             $statement->execute();
  230.             $ranking_in_race $statement->fetch();
  231.             #dd($ranking_in_race);
  232.             // Get starts in race
  233.             $sql 'select s.startno,h.name from swestarts s
  234.                     left join swehorses h on s.swehorses_id = h.id
  235.                     where s.sweraces_id = ' $r['id'] . ' and startno in (' $ranking_in_race['ran_rank'] . ')
  236.                     order by field(s.startno,' $ranking_in_race['ran_rank'] . ')';
  237.             $statement $em->getConnection()->prepare($sql);
  238.             $statement->execute();
  239.             $starts_in_race $statement->fetchAll();
  240.             #dd($starts_in_race);
  241.             $races[$r['id']]['ranking'] = $starts_in_race;
  242.             #$races[$r['id']]['winningchance'] = explode(',',$ranking_in_race['ran_winningchance']);
  243.         }
  244.         return $this->render('pages/startlistSWE.html.twig', [
  245.             'races' => $races,
  246.             'legtype' => $legtype,
  247.             'gambling' => $gambling_for_legtype,
  248.             'hasDD' => $hasDD,
  249.         ]);
  250.     }
  251.     public function getDDStartlist($meeting,$legtype)
  252.     {
  253.         $em $this->getDoctrine()->getManager();
  254.         // Get races in meeting
  255.         $sql 'select r.id from races r
  256.                 where r.rac_mee_id = ' $meeting ' and r.rac_legtypes like "' $legtype '%DD"
  257.                 order by r.rac_raceno';
  258.         $statement $em->getConnection()->prepare($sql);
  259.         $statement->execute();
  260.         $races_in_legtype $statement->fetchAll();
  261.         // Get gambling for meeting
  262.         $sql 'select * from gambling g
  263.                 where g.id = ' $meeting;
  264.         $statement $em->getConnection()->prepare($sql);
  265.         $statement->execute();
  266.         $gambling_for_meeting $statement->fetch();
  267.         $gambling_for_meeting json_decode($gambling_for_meeting['gam_gambling'],1);
  268.         $gambling_for_legtype $gambling_for_meeting[$legtype];
  269.         foreach ($races_in_legtype as $key => $r) {
  270.             // Get ranking in race
  271.             $sql 'select * from ranking r
  272.                     where r.id = ' $r['id'];
  273.             $statement $em->getConnection()->prepare($sql);
  274.             $statement->execute();
  275.             $ranking_in_race $statement->fetch();
  276.             // Get starts in race
  277.             $sql 'select s.sta_startno,h.hor_name from starts s
  278.                     left join horses h on s.sta_hor_id = h.id
  279.                     where s.sta_rac_id = ' $r['id'] . ' and sta_startno in (' $ranking_in_race['ran_rank'] . ')
  280.                     order by field(s.sta_startno,' $ranking_in_race['ran_rank'] . ')';
  281.             ;
  282.             $statement $em->getConnection()->prepare($sql);
  283.             $statement->execute();
  284.             $starts_in_race $statement->fetchAll();
  285.             $races[$r['id']]['ranking'] = $starts_in_race;
  286.         }
  287.         return $this->render('pages/startlistDD.html.twig', [
  288.             'races' => $races,
  289.             'legtype' => $legtype,
  290.             'gambling' => $gambling_for_legtype,
  291.         ]);
  292.     }
  293.     /**
  294.      * @Route("/", name="app_homepage")
  295.      */
  296.     public function homepage()
  297.     {
  298.         $allowed self::cookie();
  299.         if (!$allowed) { return $this->redirect('https://tgn.no/hestefakta-tips-og-spill/'); }
  300.         $em $this->getDoctrine()->getManager();
  301.         $today date('Y-m-d');
  302.         $sql 'select m.id as mee_id,m.mee_date as date,m.mee_firstracestart as firstracestart,m.mee_legtypes as legtypes,t.trk_shortname as shortname,"NOR" as country,c.cht_image as image,c.cht_text as text,c.cht_ready as ready from meetings m
  303.                 left join tracks t on m.mee_tra_id = t.id
  304.                 left join chilitexts c on m.id = c.id
  305.                 where m.mee_date >= "' $today '" and m.mee_legtypes != ""
  306.                 union
  307.                 select sm.id as mee_id,sm.date,sm.firstracestart,sm.legtypes,st.shortname,"SWE" as country,sc.cht_image as image,sc.cht_text as text,sc.cht_ready as ready from swemeetings sm
  308.                 left join swetracks st on sm.track_id = st.id
  309.                 left join swechilitexts sc on sm.id = sc.id
  310.                 where sm.date >= "' $today '" and sm.legtypes != "" and sc.cht_ready = true
  311.                 order by date asc,firstracestart asc';
  312.         #pre($sql,1);
  313.         $statement $em->getConnection()->prepare($sql);
  314.         $statement->execute();
  315.         $meetings $statement->fetchAll();
  316.         $pattern "#<\s*?p\b[^>]*>(.*?)</p\b[^>]*>#s";
  317.         foreach ($meetings as $key => $m) {
  318.             preg_match($pattern$m['text'], $matches);
  319.             $meetings[$key]['title'] = isset($matches[1]) ? strip_tags($matches[1]) : '';
  320.             $meetings[$key]['legtypes'] = sortLegtypes($meetings[$key]['legtypes']);
  321.         }
  322.         #dd($meetings);
  323.         return $this->render('homepage2.html.twig', [
  324.             'meetings' => $meetings,
  325.         ]);
  326.     }
  327.     /**
  328.      * @Route("/OLD", name="app_homepageOLD")
  329.      */
  330.     public function homepageOLD()
  331.     {
  332.         $allowed self::cookie();
  333.         if (!$allowed) { return $this->redirect('https://tgn.no/hestefakta-tips-og-spill/'); }
  334.         $intwodays= new \DateTime('+2 day');
  335.         $tomorrow= new \DateTime('+1 day');
  336.         $months = array('''januar''februar''mars''april''mai''juni''juli''august''september''oktober''november''desember');
  337.         $days = array('''mandag''tirsdag''onsdag''torsdag''fredag''lørdag''søndag');
  338.         $products $this->getDoctrine()->getRepository(Races::class)->listAllObjects();
  339.         #pre($products,1);
  340.         $legtypes $this->getDoctrine()->getRepository(Races::class) ->getLegTypes();
  341.         $em $this->getDoctrine()->getManager();
  342.         // Get races in meeting
  343.         // select(array('r.id','r.rac_racetype_code', 'r.rac_name','r.rac_raceno','r.rac_mee_id','m.mee_date','t.trk_trackname','t.trk_shortname','t.id as t_id', 'r.rac_starttime','r.rac_basedist', 'm.mee_firstracestart'))
  344.         $sql 'select r.id from sweraces r
  345.                 left join swemeetings s on r.swemeetings_id = s.id
  346.                 where s.date >= "' date('Y-m-d') . '"';
  347.         $statement $em->getConnection()->prepare($sql);
  348.         $statement->execute();
  349.         $races $statement->fetchAll();
  350.         #dd($races);
  351.         $binoculars $this->getDoctrine()->getRepository(Binocular::class)->findActive();
  352.         foreach ($binoculars as $key => $b) {
  353.             $pattern "#<\s*?p\b[^>]*>(.*?)</p\b[^>]*>#s";
  354.             preg_match($pattern$b['txt'], $matches);
  355.             $binoculars[$key]['binocular_title'] = $matches[1];
  356.         }
  357.         if ($products) {
  358.             $traName 'Alle baner';
  359.             $articleContent 'Info for alle baner';
  360.         } else {
  361.             $traName 'Ingen info';
  362.             $articleContent '';
  363.         }
  364.         $arr = array();
  365.         foreach ($products as $prod) {
  366.             $p $this->getDoctrine()->getRepository(Chilitexts::class)->find($prod['rac_mee_id']);
  367.             if ($p) {
  368.                 if ($p->getChtReady()) {
  369.                     $pattern "#<\s*?p\b[^>]*>(.*?)</p\b[^>]*>#s";
  370.                     preg_match($pattern$p->getChtText(), $matches);
  371.                     $tt $matches[1];
  372.                     $bt $p->getChtImageCaption();
  373.                 } else {
  374.                     $tt '<br>';
  375.                     $bt '';
  376.                 }
  377.                 if ($p->getChtImage() == '/assets/img/noimage.jpg') {
  378.                     $img '/img/trav.jpg';
  379.                     if ($prod['t_id'] == 207$img '/img/galopp.jpg';
  380.                     array_push($arr, array('id'=>$p->getId(),'img'=>$img,'caption'=>$bt,'title'=>$tt));
  381.                 } else {
  382.                     array_push($arr, array('id'=>$p->getId(),'img'=>$p->getChtImage(),'caption'=>$bt,'title'=>$tt));
  383.                 }
  384.             }
  385.         }
  386.         #pre($arr,1);
  387.         return $this->render('homepage.html.twig', [
  388.             'title' =>  $traName,
  389.             'articleContent' => $articleContent,
  390.             'dbData' => $traName,
  391.             'all' => $products,
  392.             'leg' => $legtypes,
  393.             'months' => $months,
  394.             'days' => $days,
  395.             'tomorrow' => $tomorrow,
  396.             'intwodays' => $intwodays,
  397.             'binocular' => $binoculars,
  398.             'pp' => $arr
  399.         ]);
  400.     }
  401.     /**
  402.      * @Route("/images/{query}", name="app_img")
  403.      */
  404.     public function images($query){
  405.         /*
  406.         $ch = new \curl_init('http://fotoweb.raaness.no/fotoweb/archives/5001-bildearkiv/?q=100');
  407.         curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
  408.         curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  409.                 'Accept: application/vnd.fotoware.assetlist+json'
  410.             )
  411.         );
  412.         curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
  413.         $result = json_decode(curl_exec($ch), true);
  414.         var_dump($result);
  415.         return $this->render('pages/images.html.twig', ['name' => $result]);
  416.         */
  417.     }
  418.     /**
  419.      * @Route("/horses/{horse}", name="app_horses")
  420.      */
  421.     public function horses($horse)
  422.     {
  423.         $allowed self::cookie();
  424.         if (!$allowed) { return $this->redirect('https://tgn.no/hestefakta-tips-og-spill/'); }
  425.         if($horse == 'all'){
  426.             $horseSel 'all';
  427.             $info '';
  428.             $owners '';
  429.             $trainers '';
  430.             $father '';
  431.             $mother '';
  432.             $grandfather '';
  433.             $result '';
  434.             $comments '';
  435.             $arr '';
  436.             $searchfor '';
  437.         } else {
  438.             $owners '';
  439.             $trainers '';
  440.             $searchfor '';
  441.             $horseSel $this->getDoctrine()->getRepository(Horses::class)->getObject($horse);
  442.             $info $this->getDoctrine()->getRepository(Results::class)->getHorseInfo($horse);
  443.             $arr = array();
  444.             for ($x 0$x count($info); $x++) {
  445.                 $m json_decode($info[$x]['rac_racepurse']);
  446.                 $p 0;
  447.                 $pL 0;
  448.                 if($m){
  449.                     foreach ($m as $y) {
  450.                         if(intval($y)>$pL){
  451.                             $p intval($y);
  452.                         }
  453.                         $pL intval($y);
  454.                     }
  455.                 }
  456.                 array_push($arr$p);
  457.             }
  458.             $horseFather $this->getDoctrine()
  459.                 ->getRepository(Horses::class)
  460.                 ->find($horse)->getHorFatherId();
  461.             if($horseFather){
  462.                 $father $this->getDoctrine()->getRepository(Horses::class)->find($horseFather);
  463.              } else {
  464.                 $father '';
  465.             }
  466.             $horseMother $this->getDoctrine()->getRepository(Horses::class)->find($horse)->getHorMotherId();
  467.             $grandfather '';
  468.             if($horseMother){
  469.                 $mother $this->getDoctrine()->getRepository(Horses::class)->find($horseMother);
  470.                if($this->getDoctrine()->getRepository(Horses::class)->find($mother)->getHorFatherId()){
  471.                     $grandfather $this->getDoctrine()->getRepository(Horses::class)->find($mother->getHorFatherId());
  472.                 }
  473.             } else {
  474.                 $mother '';
  475.             }
  476. /*
  477.             $result = $this->getDoctrine()
  478.                 ->getRepository(Results::class)
  479.                 ->getResInfo($horse);
  480. */
  481.           $result '';
  482.             $comments $this->getDoctrine()
  483.                 ->getRepository(Starts::class)
  484.                 ->getHorseComments($horse);
  485.             }
  486.         return $this->render('pages/searchresult.html.twig', [
  487.             'horse' =>  $horseSel,
  488.             'result' => $result,
  489.             'info' => $info,
  490.             'father' => $father,
  491.             'mother' => $mother,
  492.             'grandfather' => $grandfather,
  493.             'comments' => $comments,
  494.             'arr' => $arr,
  495.             'searchfor' => $searchfor,
  496.         ]);
  497.     }
  498.     /**
  499.      * @Route("/search/{kind}", name="app_search", methods={"GET","POST"})
  500.      */
  501.     public function search($kind) {
  502.         $searchfor '';
  503.         switch ($kind) {
  504.             case 'horse':
  505.                 if (isset($_POST['horse_name'])) {
  506.                     if($_POST['horse_name'] !== '') {
  507.                         $searchfor $_POST['horse_name'];
  508.                         $horses $this->getDoctrine()
  509.                             ->getRepository(Horses::class)
  510.                             ->searchObject($searchfor);
  511.                         $drivers $this->getDoctrine()
  512.                             ->getRepository(Drivers::class)
  513.                             ->searchObject($searchfor);
  514.                         #dd($drivers);
  515.                         $trainers $this->getDoctrine()
  516.                             ->getRepository(Trainers::class)
  517.                             ->searchObject($searchfor);
  518.                         $list = ['horses' => $horses'drivers' => $drivers'trainers' => $trainers];
  519.                     } else {
  520.                         return $this->redirectToRoute('app_horses', ['horse'=>'all','result'=>'']);
  521.                     }
  522.                 } else {
  523.                     return $this->redirectToRoute('app_horses', ['horse'=>'all','result'=>'']);
  524.                 }
  525.                 return $this->render('pages/searchresult.html.twig', [
  526.                     'horse' =>  'all',
  527.                     'result' => $list,
  528.                     'info' => '',
  529.                     'searchfor' => $searchfor,
  530.                 ]);
  531.                 break;
  532.             case 'results':
  533.                 $list $this->getDoctrine()
  534.                     ->getRepository(Races::class)
  535.                     ->searchObjects($_POST['result']);
  536.                 $title 'Results';
  537.                 return $this->render('pages/results.html.twig', [
  538.                     'title' => $title,
  539.                     'list' => $list,
  540.                 ]);
  541.                 break;
  542.             default:
  543.                 return $this->render('pages/searchresult.html.twig', [
  544.                     'horse' =>  'all',
  545.                     'result' => $list,
  546.                     'info' => '',
  547.                     'searchfor' => $searchfor,
  548.                 ]);
  549.                 break;
  550.         }
  551.     }
  552.     /**
  553.      * @Route("/tipsSWE/{mee_id}", name="app_tips_swe")
  554.      */
  555.     public function tipsSWE($mee_id){
  556.         $allowed self::cookie();
  557.         if (!$allowed) { return $this->redirect('https://tgn.no/hestefakta-tips-og-spill/'); }
  558.         $em $this->getDoctrine()->getManager();
  559.         $sql 'select s.*,t.shortname from swemeetings s
  560.                  left join swetracks t on s.track_id = t.id
  561.                  where s.id = ' $mee_id;
  562.         $statement $em->getConnection()->prepare($sql);
  563.         $statement->execute();
  564.         $meeting $statement->fetch();
  565.         #dd($meeting);
  566.         $meeting['legtypes'] = sortLegtypes($meeting['legtypes']);
  567.         $text $em->getRepository(Swechilitexts::class)->find($mee_id);
  568.         $gambling $em->getRepository(Swegambling::class)->find($mee_id);
  569.         $gambling json_decode($gambling->getGamGambling(),1);
  570. //        $date = new \DateTime('+2 hours');
  571. //        $intwodays= new \DateTime('+2 day');
  572. //        $tomorrow= new \DateTime('+1 day');
  573. //        if ($meeting == 'all') $products = '';
  574. //        else $products = $this->getDoctrine()->getRepository(Races::class)->getTrack($meeting);
  575. //
  576. //        $races = $this->getDoctrine()->getRepository(Races::class)->listAllObjects();
  577. //        $info = $this->getDoctrine()->getRepository(Chilitexts::class) ->findChiliData($meeting);
  578. //        #dd($info);
  579. //        $legtypes = $this->getDoctrine()->getRepository(Races::class) ->getLegTypes();
  580. //
  581. //        $betting = $this->getDoctrine()->getRepository(Gambling::class)->find($meeting);
  582. //        #dd($betting);
  583. //        if ($betting) $gambling = json_decode($betting->getGamGambling(),1);
  584. //        else $gambling = [];
  585. //        #dd($gambling);
  586.         return $this->render('pages/tipsSWE.html.twig', [
  587.             'meeting' => $meeting,
  588.             'text' => $text,
  589.             'gambling' => $gambling,
  590. //            'title' => $meeting,
  591. //            'all' => $products,
  592. //            'races' => $races,
  593. //            'info' => $info,
  594. //            'tomorrow' => $tomorrow,
  595. //            'intwodays' => $intwodays,
  596. //            'date' => $date,
  597. //            'leg' => $legtypes,
  598. //            'gambling' => $gambling,
  599.         ]);
  600.     }
  601.     /**
  602.      * @Route("/tips/{meeting}", name="app_tips")
  603.      */
  604.     public function tips($meeting){
  605.         $allowed self::cookie();
  606.         if (!$allowed) { return $this->redirect('https://tgn.no/hestefakta-tips-og-spill/'); }
  607.         $date = new \DateTime('+2 hours');
  608.         $intwodays= new \DateTime('+2 day');
  609.         $tomorrow= new \DateTime('+1 day');
  610.         if ($meeting == 'all'$products '';
  611.         else $products $this->getDoctrine()->getRepository(Races::class)->getTrack($meeting);
  612.         $races $this->getDoctrine()->getRepository(Races::class)->listAllObjects();
  613.         $info $this->getDoctrine()->getRepository(Chilitexts::class) ->findChiliData($meeting);
  614.         #dd($info);
  615.         $legtypes $this->getDoctrine()->getRepository(Races::class) ->getLegTypes();
  616.         $betting $this->getDoctrine()->getRepository(Gambling::class)->find($meeting);
  617.         #dd($betting);
  618.         if ($betting$gambling json_decode($betting->getGamGambling(),1);
  619.         else $gambling = [];
  620.         #dd($gambling);
  621.         return $this->render('pages/tips.html.twig', [
  622.             'title' => $meeting,
  623.             'all' => $products,
  624.             'races' => $races,
  625.             'info' => $info,
  626.             'tomorrow' => $tomorrow,
  627.             'intwodays' => $intwodays,
  628.             'date' => $date,
  629.             'leg' => $legtypes,
  630.             'gambling' => $gambling,
  631.         ]);
  632.     }
  633.     /**
  634.      * @Route("/res/{race}", name="app_res", methods={"GET","POST"})
  635.      */
  636.     public function res($race){
  637.         if ($race == 'all') {
  638.             $products '';
  639.             $results '';
  640.             $legTypes '';
  641.         } else {
  642.             $products $this->getDoctrine()->getRepository(Races::class)->getTrack($race);
  643.             $results $this->getDoctrine()->getRepository(Results::class)->sortRace($race);
  644.             $legTypes $this->getDoctrine() ->getRepository(Races::class)->getLegTypesRace($race);
  645.         }
  646.         $r '1';
  647.         if ($this->request->getRealMethod() == 'get') {
  648.             $r '2';
  649.         }
  650.         $resultsX $this->getDoctrine()->getRepository(Results::class)->sortRaceTestRace($race);
  651.         return $this->render('includes/res.html.twig', [
  652.             'all' => $products,
  653.             'results' => $results,
  654.             'legtypes' => $legTypes,
  655.             'race' => $r,
  656.             'new' => $resultsX
  657.         ]);
  658.     }
  659.     /**
  660.      * @Route("/resu/{mee_id}/{lop}", name="app_resu")
  661.      */
  662.     public function resu($mee_id,$lop){
  663.         if ($mee_id=='all') {
  664.             $races '';
  665.             $results '';
  666.             $legTypes '';
  667.             $active 0;
  668.         } else {
  669.             $races $this->getDoctrine()->getRepository(Races::class)->getTrack($mee_id);
  670.             $results $this->getDoctrine()->getRepository(Results::class)->sortRace($mee_id);
  671.             $legTypes $this->getDoctrine()->getRepository(Races::class)->getLegTypesRace($mee_id);
  672.             $mm $this->getDoctrine()->getRepository(Meetings::class)->findActive($mee_id);
  673.             $active $mm[0]['mee_comments_ready'];
  674.         }
  675.         $resultsX $this->getDoctrine()->getRepository(Results::class)->sortRaceTestRace($mee_id);
  676.         $ff array_merge($results,$resultsX);
  677.         return $this->render('includes/res.html.twig', [
  678.             'all' => $races,
  679.             'results' => $ff,
  680.             'legtypes' => $legTypes,
  681.             'race' => $lop,
  682.             'new' => $resultsX,
  683.             'active' => $active
  684.         ]);
  685.     }
  686.     /**
  687.      * @Route("/resuX/{mee_id}", name="results_page")
  688.      */
  689.     public function resuX($mee_id) {
  690.         $results $this->getDoctrine()->getRepository(Results::class)->getAllResultsForMeeting($mee_id);
  691.         #dd($results);
  692.         $resultsArray = [];
  693.         foreach ($results as $result) {
  694.             #dd($result);
  695.             $resultsArray[$result['res_rac_id']]['result'][] = $result;
  696.             $prices json_decode($result['rac_racepurse'],1);
  697.             $resultsArray[$result['res_rac_id']]['firstprice'] = $prices[1];
  698.         }
  699.         #pre($resultsArray,1);
  700.         $html $this->renderView('includes/resX.html.twig', [
  701.             'results' => $resultsArray,
  702.         ]);
  703.         return new JsonResponse(array('status' => 'success''html' => $html));
  704.     }
  705.     /**
  706.      * @Route("/driver/{driver}", name="app_driver")
  707.      */
  708.     public function driver($driver){
  709.         $results $this->getDoctrine()
  710.             ->getRepository(Drivers::class)
  711.             ->getDriverInfo($driver);
  712.         $info $this->getDoctrine()
  713.             ->getRepository(Results::class)
  714.             ->getDriverInfo($driver);
  715.         $arr = array();
  716.         for ($x 0$x count($info); $x++) {
  717.             $m json_decode($info[$x]['rac_racepurse']);
  718.             $p 0;
  719.             $pL 0;
  720.             if($m){
  721.                 foreach ($m as $y) {
  722.                     if(intval($y)>$pL){
  723.                         $p intval($y);
  724.                     }
  725.                     $pL intval($y);
  726.                 }
  727.             }
  728.             array_push($arr$p);
  729.         }
  730.         return $this->render('pages/driver.html.twig', [
  731.             'info' => $info,
  732.             'results' => $results,
  733.             'arr' => $arr,
  734.         ]);
  735.     }
  736.     /**
  737.      * @Route("/trainer/{trainer}", name="app_trainer")
  738.      */
  739.     public function trainer($trainer){
  740.         $results $this->getDoctrine()
  741.             ->getRepository(Trainers::class)
  742.             ->getTrainerInfo($trainer);
  743.         $info $this->getDoctrine()
  744.             ->getRepository(Results::class)
  745.             ->getTrainerInfo($trainer);
  746.         $arr = array();
  747.         for ($x 0$x count($info); $x++) {
  748.             $m json_decode($info[$x]['rac_racepurse']);
  749.             $p 0;
  750.             $pL 0;
  751.             if($m) {
  752.                 foreach ($m as $y) {
  753.                     if(intval($y)>$pL){
  754.                         $p intval($y);
  755.                     }
  756.                     $pL intval($y);
  757.                 }
  758.             }
  759.             array_push($arr$p);
  760.         }
  761.         return $this->render('pages/trainer.html.twig', [
  762.             'info' => $info,
  763.             'results' => $results,
  764.             'arr' => $arr,
  765.         ]);
  766.     }
  767.     /**
  768.      * @Route("/latestfiveforhorse/{horse}/{beforedate}", name="getLatestFiveForHorsePAGE")
  769.      */
  770.     public function getLatestFiveForHorse($horse,$beforedate)
  771.     {
  772.         $xx $this->getDoctrine()->getRepository(Results::class)->getLastFive($horse,$beforedate);
  773.         $xy $this->getDoctrine()->getRepository(Foreignstarts::class)->getLastFive($horse,$beforedate);
  774.         $newXXX array_merge($xx$xy);
  775.         usort($newXXX, function($a$b) { return $a['mee_date'] <=> $b['mee_date']; });
  776.         dd($newXXX);
  777. //        $last5 = getLatestResultsForHorseBeforeMeeting($meeting,$horse,3,5);
  778. //        dd($last5);
  779.     }
  780.     /**
  781.      * @Route("/latestfiveforrace/{race}", name="getLatestFiveForRacePAGE")
  782.      */
  783.     public function getLatestFiveForRace($race)
  784.     {
  785. //        $last5 = getLatestResultsForHorseBeforeMeeting($meeting,$horse,3,5);
  786. //        dd($last5);
  787.     }
  788.     /**
  789.      * @Route("/progX/{meeting}", name="app_proX")
  790.      */
  791.     public function progX($meeting)
  792.     {
  793.         $md = new MobileDetect();
  794.         $em $this->getDoctrine()->getManager();
  795.         $chilitext $em->getRepository(Chilitexts::class)->find($meeting);
  796.         // Get races in meeting
  797.         $sql 'select * from races r
  798.                 where r.rac_mee_id = ' $meeting '
  799.                 order by r.rac_raceno asc';
  800.         $statement $em->getConnection()->prepare($sql);
  801.         $statement->execute();
  802.         $rim = [];
  803.         while ($race $statement->fetch()) $rim[$race['id']] = $race;
  804.         #dd($races_in_meeting);
  805.         // Get starts in meeting
  806.         $sql 'select s.id as sta_id,s.*,r.id as rac_id,r.*,h.id as hor_id,h.*,o.id as hos_id,o.* from starts s
  807.                 left join races r on s.sta_rac_id = r.id
  808.                 left join horses h on s.sta_hor_id = h.id
  809.                 left join horsestats o on s.sta_hor_id = o.id
  810.                 where s.sta_mee_id = ' $meeting '
  811.                 order by r.rac_raceno,r.rac_starttime,s.sta_startno';
  812.         $statement $em->getConnection()->prepare($sql);
  813.         $statement->execute();
  814.         $races = [];
  815.         while ($start $statement->fetch()) {
  816.             $father getHorseNameFromId($start['hor_father_id']);
  817.             $mother getHorseNameFromId($start['hor_mother_id']);
  818.             $driver getDriverNameFromId($start['sta_dri_id']);
  819.             $trainer getTrainerNameFromId($start['hor_tra_id']);
  820.             $start['father'] = $father;
  821.             $start['mother'] = $mother;
  822.             $start['driver'] = $driver;
  823.             $start['trainer'] = $trainer;
  824.             $beforedate date('Ymd',strtotime($start['rac_startdate']));
  825.             $lastFiveDomestic $this->getDoctrine()->getRepository(Results::class)->getLastFive($start['sta_hor_id'],$beforedate);
  826.             $lastFiveForeign $this->getDoctrine()->getRepository(Foreignstarts::class)->getLastFive($start['sta_hor_id'],$beforedate);
  827.             #if ($start['sta_hor_id'] == 30090831) dd($lastFiveForeign);
  828.             $lastFive array_merge($lastFiveDomestic$lastFiveForeign);
  829.             usort($lastFive, function($a$b) { return $a['mee_date'] <=> $b['mee_date']; });
  830.             $lastFive array_slice($lastFive,-5);
  831.             $start['last5'] = $lastFive;
  832.             $intletter getInterviewLetter($lastFive,$start['sta_hor_id']);
  833.             $start['intletter'] = $intletter;
  834.             $races[$start['sta_rac_id']]['raceno'] = $start['rac_raceno'];
  835.             $races[$start['sta_rac_id']]['starts'][$start['sta_startno']] = $start;
  836.         }
  837.         foreach ($races as $k => $r) {
  838.             $races[$k]['legtypes'] = getLegtypesForRace($k);
  839.             $races[$k]['info1'] = '<strong>' $rim[$k]['rac_basedist'] . ' m. ' $rim[$k]['rac_startmethod_text'] . '</strong>. Start ca kl. ' date('H:i',strtotime($rim[$k]['rac_starttime']));
  840.             $racepurses json_decode($rim[$k]['rac_racepurse'],1);
  841.             $firstprice $racepurses[1];
  842.             $content trim($rim[$k]['rac_headtext_1']) . ' Fpr: ' number_format($firstprice,0,'.',' ');
  843.             $remove = array("\n""\r\n""\r""<p>""</p>""<h1>""</h1>""<br>""<br />""<br/>");
  844.             $races[$k]['info2'] = str_replace($remove,' ',$content);
  845.             $races[$k]['rank'] = getRankForRace($k);
  846.         }
  847.         #pre($races,1);
  848.         return $this->render('includes/program.html.twig', [
  849.             'races' => $races,
  850.             'chilitext' => $chilitext,
  851.             'isMobile' => $md->isMobile(),
  852.         ]);
  853.     }
  854.     /**
  855.      * @Route("/prog/{meeting}", name="app_pro")
  856.      */
  857.     public function prog($meeting)
  858.     {
  859.         $races_in_meeting $this->getDoctrine()->getRepository(Races::class)->getTrack($meeting);
  860.         $starts $this->getDoctrine()->getRepository(Starts::class)->listStarts($meeting);
  861.         $horsestats $this->getDoctrine()->getRepository(Starts::class)->listHorses($meeting);
  862.         $legTypes $this->getDoctrine()->getRepository(Races::class)->getLegTypesRace($meeting);
  863.         $em $this->getDoctrine()->getManager();
  864.         $sql 'select r.id,r.ran_rank,r.ran_winningchance from ranking r
  865.                 left join races a on r.id = a.id
  866.                 left join meetings m on a.rac_mee_id = m.id
  867.                 where m.id = ' $meeting ' order by a.rac_raceno';
  868.         $statement $em->getConnection()->prepare($sql);
  869.         $statement->execute();
  870.         $result $statement->fetchAll();
  871.         foreach ($result as $r$rankings[$r['id']] = $r;
  872.         foreach ($races_in_meeting as $key => $r) {
  873.             if (isset($rankings[$r['rac_id']])) $races_in_meeting[$key]['ranking'] = $rankings[$r['rac_id']];
  874.         }
  875.         $curdate $races_in_meeting[0]['mee_date'];
  876.         $curdate date_format($curdate'Ymd');
  877.         $horseinfo = array();
  878.         for ($x 0$x count($horsestats); $x++) {
  879.             $m json_decode($horsestats[$x]['hor_mother_id']);
  880.             $f json_decode($horsestats[$x]['hor_father_id']);
  881.             $mm $this->getDoctrine()->getRepository(Horses::class)->find($m);
  882.             $ff $this->getDoctrine()->getRepository(Horses::class)->find($f);
  883.             $xx $this->getDoctrine()->getRepository(Results::class)->getLastFive($horsestats[$x]['hid'],$curdate);
  884.             $xy $this->getDoctrine()->getRepository(Foreignstarts::class)->getLastFive($horsestats[$x]['hid'],$curdate);
  885.             $newXXX array_merge($xx$xy);
  886.             usort($newXXX, function($a$b) { return $a['mee_date'] <=> $b['mee_date']; });
  887.             array_push($horseinfo, [$horsestats[$x]['hid'], $mm->getHorName(), $ff->getHorName(), $newXXX]);
  888.         }
  889.         return $this->render('includes/prog_dev2.html.twig', [
  890.             'all' => $races_in_meeting,
  891.             'starts' => $starts,
  892.             'legtypes' => $legTypes,
  893.             'horses' => $horsestats,
  894.             'horseinfo' => $horseinfo
  895.         ]);
  896.     }
  897.     /**
  898.      * @Route("/inn/{race}", name="app_inn")
  899.      */
  900.     public function inns($race){
  901.         if($race=='all'){
  902.             $products '';
  903.             $starts '';
  904.             $results '';
  905.             $legTypes '';
  906.         } else {
  907.             $products $this->getDoctrine()
  908.                 ->getRepository(Races::class)
  909.                 ->getTrack($race);
  910.             $results $this->getDoctrine()
  911.                 ->getRepository(Results::class)
  912.                 ->sortRace($race);
  913.             $legTypes $this->getDoctrine()
  914.                 ->getRepository(Races::class)
  915.                 ->getLegTypesRace($race);
  916.         }
  917.         $races $this->getDoctrine()->getRepository(Races::class)->listAllObjects();
  918.         return $this->render('pages/tips.html.twig', [
  919.             'title' => $race,
  920.             'all' => $products,
  921.             'races' => $races,
  922.             'results' => $results,
  923.             'legtypes' => $legTypes,
  924.         ]);
  925.     }
  926.     /**
  927.      * @Route("/results", name="app_results")
  928.      */
  929.     public function results(){
  930.         $allowed self::cookie();
  931.         if (!$allowed) { return $this->redirect('https://tgn.no/hestefakta-tips-og-spill/'); }
  932.         $meetings $this->getDoctrine()->getRepository(Meetings::class)->getLatest50meetings();
  933.         #dd($meetings);
  934.         return $this->render('pages/results.html.twig', [
  935.             'meetings' => $meetings,
  936.         ]);
  937.     }
  938.     /**
  939.      * @Route("/odds/{race}", name="app_odds")
  940.      */
  941.     public function getOdds($race){
  942.         $ftp_username 'raaness';
  943.         $ftp_userpass '8rifw8iw1p';
  944.         $conn_id ftp_connect('info.rikstoto.no');
  945.         ftp_login($conn_id$ftp_username ,  $ftp_userpass);
  946.         ftp_pasv($conn_idtrue);
  947.         $file $race;
  948.         $file str_replace('BE''BT'$file);
  949.         $h fopen('php://temp''r+');
  950.         $html '';
  951.         if (ftp_fget($conn_id$h'spillinfo/v3/'.$fileFTP_ASCII)){
  952.             $fstats fstat($h);
  953.             fseek($h0);
  954.             $contents fread($h$fstats['size']);
  955.             $xml simplexml_load_string($contents);
  956.             $simpXML = new \SimpleXMLElement($xml->asXML());
  957.             $simpXML->registerXPathNamespace('tgn''http://www.rikstoto.no/betinfo/v3');
  958.             $xpath $simpXML->xpath('//tgn:Meeting/tgn:Races/tgn:Race');
  959.             foreach ($xpath as $x) {
  960.                 $html .= '<div style="border:1px solid #CCC; border-radius: 6px;padding:15px;margin-bottom: 20px;margin-top: 10px;">';
  961.                 $html .= '<div class="b_'.$x->RaceNo.'" style="width:100%;white-space: nowrap;">';
  962.                 $html .= '<div style="margin-right:8px;display: inline;font-size: 1rem;">';
  963.                 $html .= '<span style="font-size: 30px; font-weight: bold; margin-right: 8px;padding: 8px;">'.$x->RaceNo.'</span>';
  964.                 $html .= '</div>';
  965.                 $html .= '</div>';
  966.                 $html .= '<table class="table table-responsive" style="width: 100%;"><thead><tr><th style="width: 30px;">#</th><th>Navn</th><th style="width: 120px;text-align: right;">V-Odds</th></tr></thead><tbody>';
  967.                 $n 0;
  968.                 foreach ($x->OddsInfo->WinPlaceOdds->WinPlaceOdds as $y){
  969.                     $attrY $y->StartInfo->attributes();
  970.                     $html .= '<tr>';
  971.                     $html .= '<td>'.$attrY['StartNo'].'</td><td>'.$x->Starts->Start[$n]->Horse->Name.'</td><td style="width: 120px;text-align: right;">'.$y->WinOdds.'</td></tr>';
  972.                     $n++;
  973.                 }
  974.                 $html .= '</tbody></table>';
  975.                 $html .= '</div>';
  976.             }
  977.             fclose($h);
  978.             ftp_close($conn_id);
  979.         }
  980.         else
  981.         {
  982.             $xml '';
  983.         }
  984.       return new Response($html);
  985.     }
  986.     /**
  987.      * @Route("/rss", name="app_rss")
  988.      */
  989.     public function rss()
  990.     {
  991.         $months = array('''januar''februar''mars''april''mai''juni''juli''august''september''oktober''november''desember');
  992.         $days = array('''mandag''tirsdag''onsdag''torsdag''fredag''lørdag''søndag');
  993.         $products $this->getDoctrine()->getRepository(Races::class)->listAllObjects();
  994.         $legtypes $this->getDoctrine()->getRepository(Races::class) ->getLegTypes();
  995.         if($products){
  996.             $traName 'All tracks';
  997.             $articleContent 'Info for all tracks';
  998.         } else {
  999.             $traName 'No info';
  1000.             $articleContent '';
  1001.         }
  1002.         // menue arrays to this one
  1003.         return $this->render('rss.xml.twig', [
  1004.             'title' =>  $traName,
  1005.             'articleContent' => $articleContent,
  1006.             'dbData' => $traName,
  1007.             'all' => $products,
  1008.             'leg' => $legtypes,
  1009.             'months' => $months,
  1010.             'days' => $days,
  1011.         ]);
  1012.     }
  1013.     /**
  1014.      * @Route("/kikkerten/{id}", name="app_kikkerten")
  1015.      */
  1016.     public function kikkerten($id){
  1017.         $allowed self::cookie();
  1018.         if(!$allowed){ return $this->redirect('https://tgn.no/hestefakta-tips-og-spill/'); }
  1019.         $kikkerten $this->getDoctrine()->getRepository(Binocular::class)->find($id);
  1020.         return $this->render('pages/kikkerten.html.twig', [
  1021.             'binocular' =>  $kikkerten,
  1022.             'tittel' => ''
  1023.         ]);
  1024.     }
  1025. }