src/Controller/InformationController.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. //Load core
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use \DateTime;
  6. //Load json rest
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Component\HttpFoundation\Session\Session;
  12. use FOS\RestBundle\Controller\Annotations as Rest// alias pour toutes les annotations
  13. use App\Services\Utils;
  14. use App\Services\Tools;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Symfony\Contracts\Translation\TranslatorInterface;
  17. //Load entity
  18. use App\Entity\PositionGps;
  19. use App\Entity\User;
  20. use App\Entity\Hobit;
  21. use App\Entity\HobitDate;
  22. class InformationController extends AbstractController
  23. {
  24.     protected $em;
  25.     protected $utils;
  26.     protected $tools;
  27.     public function __construct(EntityManagerInterface $entityManagerUtils $utilsTranslatorInterface $translatorTools $tools) {
  28.         $this->em $entityManager;
  29.         $this->utils $utils;
  30.         $this->translator $translator;
  31.         $this->tools $tools;
  32.     }
  33.     
  34.     /**
  35.      * @Rest\View(statusCode=200)
  36.      * @Rest\Post("/api/information/position-gps")
  37.      */
  38.     public function addPositionGpsAction(Request $request)
  39.     {    
  40.         //$positions = $request->get("positions");
  41.         $positionsString $request->getContent();
  42.         $positions = [];
  43.         $positions[] = json_decode($positionsString);
  44.         //TEST VARDUMP FILE
  45.         
  46.         $coucou $positionsString;
  47.       
  48.       
  49.         $monfichier fopen('coucou.txt''w+');
  50.         $pages_vues fgets($monfichier); // On lit la première ligne (nombre de pages vues)
  51.         fseek($monfichier0); // On remet le curseur au début du fichier.
  52.         fputs($monfichier$coucou); // On écrit le nouveau nombre de pages vues.
  53.         fclose($monfichier);
  54.         
  55.         
  56.         $em $this->em;
  57.         $authTokenHeader $request->headers->get('X-Auth-Token');
  58.         $auth null;
  59.         /*
  60.         $auth = $this->em
  61.                          ->getRepository(AuthToken::class)
  62.                          ->findOneBy(array("value" => $authTokenHeader));
  63.         */
  64.         $groupeId $this->generateRandomString(15);
  65.         foreach($positions as $position) {
  66.             //For manuel post
  67.             $position $position->location;
  68.             $coords $position->coords;
  69.             $latitude $coords->latitude// float
  70.             $longitude $coords->longitude// float
  71.             $speed $coords->speed// float
  72.             $accuracy $coords->accuracy// float
  73.             $altitude $coords->altitude// float
  74.             //New coords
  75.             $speedAccuracy $coords->speed_accuracy// float
  76.             $ellipsoidalAltitude $coords->ellipsoidal_altitude// float
  77.             $floor $coords->floor// float
  78.             $headingAccuracy $coords->heading_accuracy// float
  79.             $altitudeAccuracy $coords->altitude_accuracy// float
  80.             $heading $coords->heading// Float
  81.             //News index
  82.             $mock null;
  83.             if(isset($position->mock)){
  84.                 $mock $position->mock// bool
  85.             }
  86.             $isMoving null;
  87.             if(isset($position->is_moving)){
  88.                 $isMoving $position->is_moving// bool
  89.             }
  90.             $event null;
  91.             if(isset($position->event)){
  92.                 $event $position->event// String
  93.             }
  94.             $odometer $position->odometer//Float
  95.             $uuid $position->uuid// String
  96.             
  97.             //News activity
  98.             $activityType $position->activity->type;
  99.             $activityConfidence $position->activity->confidence;
  100.             //News battery
  101.             $batteryLevel $position->battery->level;
  102.             $batteryIsCharging $position->battery->is_charging;
  103.             
  104.             //$bearing = $position['bearing'];
  105.             $datePrintString $position->timestamp;
  106.             $datePrint strtotime($datePrintString);
  107.    
  108.             //Set dateTime with unix timestamp
  109.             /*
  110.             $timestamp = substr($position['time'], 0, 10);
  111.             $dateTime = new DateTime();
  112.             $dateTime->setTimestamp($timestamp);
  113.             */
  114.             //$date = $dateTime;
  115.             //New module (hihi) FOR GET SINCE POSITION WITH LAST POSITIONS
  116.             /*
  117.             if((date("YmdHis") - $dateTime->format("YmdHis")) > 60){
  118.                 $positionLasts = $this->em
  119.                          ->getRepository(PositionGps::class)
  120.                          ->findBy(array(), array("datePrinted" => "DESC"), 1);
  121.                 if($positionLasts){
  122.                     $latitude = $positionLasts[0]->getLatitude();
  123.                     $longitude = $positionLasts[0]->getLongitude();
  124.                 }
  125.                 else{
  126.                     $latitude = $position['latitude'];
  127.                     $longitude = $position['longitude'];
  128.                 }
  129.             }
  130.             else{
  131.                 $latitude = $position['latitude'];
  132.                 $longitude = $position['longitude'];
  133.             }
  134.             */
  135.             $PositionGps = new PositionGps();
  136.             $PositionGps->setGroupeId($groupeId);
  137.             $PositionGps->setAccuracy($accuracy);
  138.             $PositionGps->setAltitude($altitude);
  139.             $PositionGps->setLatitude($latitude);
  140.             $PositionGps->setLongitude($longitude);
  141.             $PositionGps->setSpeed($speed);
  142.             //NEW FIELDS
  143.             $PositionGps->setSpeedAccuracy($speedAccuracy);
  144.             $PositionGps->setAltitudeEllipsoidal($ellipsoidalAltitude);
  145.             $PositionGps->setFloor($floor);
  146.             $PositionGps->setHeadingAccuracy($headingAccuracy);
  147.             $PositionGps->setAltitudeAccuracy($altitudeAccuracy);
  148.             $PositionGps->setHeading($heading);
  149.             $PositionGps->setMock($mock);
  150.             $PositionGps->setIsMoving($isMoving);
  151.             $PositionGps->setEvent($event);
  152.             $PositionGps->setOdometer($odometer);
  153.             $PositionGps->setUuid($uuid);
  154.             $PositionGps->setActivityType($activityType);
  155.             $PositionGps->setActivityConfidence($activityConfidence);
  156.             $PositionGps->setBatteryLevel($batteryLevel);
  157.             $PositionGps->setBatteryIsCharging($batteryIsCharging);
  158.             //Temp
  159.             $user $this->em
  160.                          ->getRepository(User::class)
  161.                          ->findOneBy(array("id" => 4));
  162.             $PositionGps->setUser($user);
  163.             if($auth){
  164.                 $PositionGps->setUser($auth->getUser());
  165.             }
  166.             $PositionGps->setDatePrinted(new DateTime($datePrintString));
  167.             $PositionGps->setWithFail(false);
  168.             $PositionGps->setSync(false);
  169.             $em->persist($PositionGps);
  170.         }
  171.         $em->flush();
  172.         return true;
  173.     }
  174.     /**
  175.      * @Rest\View(statusCode=200)
  176.      * @Rest\Post("/api/information/position-gps-fail")
  177.      */
  178.     public function addPositionGpsFailAction(Request $request)
  179.     {   
  180.         //$positions = $request->get("positions");
  181.         $positions $request->request->all();
  182.         //TEST VARDUMP FILE
  183.         /*
  184.         $coucou = serialize($positions);
  185.       
  186.         $monfichier = fopen('/media/tr/www/var/logs/coucou.txt', 'w+');
  187.         $pages_vues = fgets($monfichier); // On lit la première ligne (nombre de pages vues)
  188.         fseek($monfichier, 0); // On remet le curseur au début du fichier.
  189.         fputs($monfichier, $coucou); // On écrit le nouveau nombre de pages vues.
  190.         fclose($monfichier);
  191.         */
  192.         $em $this->em;
  193.         $authTokenHeader $request->headers->get('X-Auth-Token');
  194.         $auth $this->em
  195.                          ->getRepository(AuthToken::class)
  196.                          ->findOneBy(array("value" => $authTokenHeader));
  197.         $groupeId $this->generateRandomString(15);
  198.         foreach($positions as $position) {
  199.             //For manuel post
  200.             
  201.             $latitude $position['latitude'];
  202.             $longitude $position['longitude'];
  203.             //$date = $position['datePrinted'];
  204.             $speed $position['speed'];
  205.             $provider $position['provider'];
  206.             $locationProvider $position['locationProvider'];
  207.             $accuracy $position['accuracy'];
  208.             $altitude $position['altitude'];
  209.             $bearing $position['bearing'];
  210.    
  211.             //Set dateTime with unix timestamp
  212.             $timestamp substr($position['time'], 010);
  213.             $dateTime = new DateTime();
  214.             $dateTime->setTimestamp($timestamp);
  215.             $latitude $position['latitude'];
  216.             $longitude $position['longitude'];
  217.             $date $dateTime->format("Y-m-d H:i:s");
  218.             $speed $position['speed'];
  219.             $PositionGps = new PositionGps();
  220.             if($auth){
  221.                 $PositionGps->setUser($auth->getUser());
  222.             }
  223.             $PositionGps->setLatitude($latitude);
  224.             $PositionGps->setLongitude($longitude);
  225.             $PositionGps->setSpeed($speed);
  226.             $PositionGps->setGroupeId($groupeId);
  227.             $PositionGps->setProvider($provider);
  228.             $PositionGps->setLocationProvider($locationProvider);
  229.             $PositionGps->setAccuracy($accuracy);
  230.             $PositionGps->setAltitude($altitude);
  231.             $PositionGps->setBearing($bearing);
  232.             $PositionGps->setDatePrinted(new DateTime($date));
  233.             $PositionGps->setWithFail(true);
  234.             $PositionGps->setSync(true);
  235.             $em->persist($PositionGps);
  236.         }
  237.         $em->flush();
  238.         return true;
  239.     }
  240.     /**
  241.      * @Rest\View(statusCode=200)
  242.      * @Rest\Post("/api/information/position-gps-temp")
  243.      */
  244.     public function addPositionGpsTempAction(Request $request)
  245.     {   
  246.         //TEST VARDUMP FILE
  247.         /*
  248.         $coucou = serialize($positions);
  249.       
  250.         $monfichier = fopen('/media/tr/www/var/logs/coucou.txt', 'w+');
  251.         $pages_vues = fgets($monfichier); // On lit la première ligne (nombre de pages vues)
  252.         fseek($monfichier, 0); // On remet le curseur au début du fichier.
  253.         fputs($monfichier, $coucou); // On écrit le nouveau nombre de pages vues.
  254.         fclose($monfichier);
  255.         */
  256.         $em $this->em;
  257.         $positions $request->get("positions");
  258.         //$positions = $request->request->all();
  259.         foreach ($positions as $position) {
  260.             //For manuel post
  261.             
  262.             $latitude $position['latitude'];
  263.             $longitude $position['longitude'];
  264.             $date $position['datePrinted'];
  265.             $speed $position['speed'];
  266.             
  267.    /*
  268.             //Set dateTime with unix timestamp
  269.             $timestamp = substr($position['time'], 0, 10);
  270.             $dateTime = new DateTime();
  271.             $dateTime->setTimestamp($timestamp);
  272. */
  273.             $latitude $position['latitude'];
  274.             $longitude $position['longitude'];
  275.             //$date = $dateTime->format("Y-m-d H:i:s");
  276.             $speed $position['speed'];
  277.             $PositionGps = new PositionGps();
  278.             $PositionGps->setLatitude($latitude);
  279.             $PositionGps->setLongitude($longitude);
  280.             $PositionGps->setSpeed($speed);
  281.             $PositionGps->setDatePrinted(new DateTime($date));
  282.             $em->persist($PositionGps);
  283.         }
  284.         $em->flush();
  285.         return true;
  286.     }
  287.     /**
  288.      * @Rest\View(statusCode=201)
  289.      * @Rest\Get("/api/information/position-gps")
  290.      */
  291.     public function getPositionGpsAction(Request $request)
  292.     {    
  293.         $positionGpsList $this->em
  294.                          ->getRepository(PositionGps::class)
  295.                          ->findAll();
  296.         return $positionGpsList;
  297.     }
  298.     /**
  299.      * @Route("/debug/information/position", name="information_position_debug")
  300.      */
  301.     public function getPositionDebugAction(Request $request)
  302.     {   
  303.         $session = new Session();
  304.         $userCurrent $session->get('currentUser');
  305.         $positionGpsList $this->em
  306.                          ->getRepository(PositionGps::class)
  307.                          ->findBy(array("user" => $userCurrent), array('datePrinted' => 'DESC''dateCreatedByServer' => 'DESC'), 6);
  308.         return $this->render('debug/position.html.twig', Array(
  309.            "positionGpsList" => $positionGpsList
  310.         ));
  311.     }
  312.     /**
  313.      * @Route("/debug/information/live", name="information_live_debug")
  314.      */
  315.     public function getLiveDebugAction(Request $request)
  316.     {   
  317.         $session = new Session();
  318.         $userCurrent $session->get('currentUser');
  319.         $positionGpsList $this->em
  320.                          ->getRepository(PositionGps::class)
  321.                          ->findBy(array("user" => $userCurrent), array('datePrinted' => 'DESC''dateCreatedByServer' => 'DESC'), 25);
  322.         $currentPostition null;
  323.         $currentAgo null;
  324.         $lastHobit null;
  325.         $currentHobitAgo null;
  326.         $newHobitAgo null;
  327.         $newHobit null;
  328.         if($positionGpsList){
  329.             $currentPostition $positionGpsList[0];
  330.             $currentAgo $this->TimeToJourJ($currentPostition->getDateCreatedByServer()->format("Y-m-d H-i-s"), time());
  331.      
  332.             //Last hobit 
  333.             $timeLimit 600;
  334.             $nextHobitAgo "3 minutes";
  335.             $tabHobit = [];
  336.             $limitWidthHobit 0.20
  337.             $limitTimeHobit 600
  338.             $limitForCreateHobit 30;
  339.             $limitStable 5
  340.             $maxSum 100;
  341.             $numberIntervalPrintedAndServer 60;
  342.             //Debug
  343.             $debug true;
  344.             $debugAndFlush false;
  345.             $tabHobit $this->tools->dreamHobit($debug$debugAndFlush$limitWidthHobit$limitTimeHobit$limitForCreateHobit$limitStable$maxSum$numberIntervalPrintedAndServer$userCurrent);
  346.             if($tabHobit){
  347.                 $lastHobit $tabHobit[(count($tabHobit) - 1)];
  348.                 $currentHobitAgo $this->TimeToJourJ($lastHobit['startDateTime']->format("Y-m-d H-i-s"), time());
  349.                 $newHobitAgo false;
  350.                 $newHobit false;
  351.          
  352.                 //Next Hobit
  353.                 if(($currentPostition->getDatePrinted()->getTimestamp() + 120) < time()){
  354.                     $newHobit $currentPostition;
  355.                     $newHobitAgo $this->TimeToJourJ($lastHobit['endDateTime']->format("Y-m-d H-i-s"), time());
  356.                 }
  357.                 if($newHobitAgo == false){
  358.                     $currentHobitAgo $this->TimeToJourJ($lastHobit['startDateTime']->format("Y-m-d H-i-s"), time());  
  359.                 }
  360.                 else{
  361.                     if(($lastHobit['startDateTime']->getTimestamp() - $lastHobit['endDateTime']->getTimestamp()) > 600){
  362.                         $currentHobitAgo $this->TimeToJourJ($lastHobit['startDateTime']->format("Y-m-d H-i-s"), time());  
  363.                     }
  364.                     else{
  365.                         $currentHobitAgo $this->TimeToJourJ($lastHobit['startDateTime']->format("Y-m-d H-i-s"), $lastHobit['endDateTime']->getTimestamp());
  366.                     }
  367.                 }
  368.             }
  369.             
  370.             
  371.         }
  372.         return $this->render('debug/live.html.twig', Array(
  373.            "positionGpsList" => $positionGpsList,
  374.            "currentPosition" => $currentPostition,
  375.            "currentAgo" => $currentAgo,
  376.            "lastHobit" => $lastHobit,
  377.            "currentHobitAgo" => $currentHobitAgo,
  378.            "newHobitAgo" => $newHobitAgo,
  379.            "newHobit" => $newHobit,
  380.         ));
  381.     }
  382.     /**
  383.      * @Route("/debug/information/live-refresh", name="information_live_refresh_debug")
  384.      */
  385.     public function getLiveRefreshDebugAction(Request $request$isApi false)
  386.     {
  387.         $session = new Session();
  388.         $userCurrent $session->get('currentUser');
  389.         $positionGpsList $this->em
  390.                          ->getRepository(PositionGps::class)
  391.                          ->findBy(array("user" => $userCurrent), array('datePrinted' => 'DESC''dateCreatedByServer' => 'DESC'), 25);
  392.         $currentPostition null;
  393.         $currentAgo null;
  394.         $lastHobit null;
  395.         $currentHobitAgo null;
  396.         $newHobitAgo null;
  397.         $newHobit null;
  398.         $dataHere false;
  399.         $currentPostionTab = [];
  400.         $lastHobitTab = [];
  401.         if($positionGpsList){
  402.             $dataHere true;
  403.             $currentPostition $positionGpsList[0];
  404.             $currentAgo $this->TimeToJourJ($currentPostition->getDateCreatedByServer()->format("Y-m-d H-i-s"), time());
  405.             $currentPostionTab = array(
  406.                 "start" => $currentPostition->getDatePrinted()->format("d-m-Y H:i:s"),
  407.                 "latitude" => $currentPostition->getLatitude(),
  408.                 "longitude" => $currentPostition->getLongitude(),
  409.             );
  410.             //Last hobit 
  411.             $timeLimit 600;
  412.             $nextHobitAgo "3 minutes";
  413.             $tabHobit = [];
  414.             $limitWidthHobit 0.20
  415.             $limitTimeHobit 600
  416.             $limitForCreateHobit 30;
  417.             $limitStable 5
  418.             $maxSum 100;
  419.             $numberIntervalPrintedAndServer 60;
  420.             //Debug
  421.             $debug true;
  422.             $debugAndFlush false;
  423.             $tabHobit $this->tools->dreamHobit($debug$debugAndFlush$limitWidthHobit$limitTimeHobit$limitForCreateHobit$limitStable$maxSum$numberIntervalPrintedAndServer$userCurrent);
  424.             if(count($tabHobit) > 0){
  425.                 $lastHobit $tabHobit[(count($tabHobit) - 1)];
  426.             }
  427.             else{
  428.                 $lastHobit null;
  429.             }
  430.             
  431.             $newHobitAgo false;
  432.             $newHobit false;
  433.             
  434.             if($lastHobit){
  435.                 //Next Hobit
  436.                 if(($currentPostition->getDatePrinted()->getTimestamp() + 120) < time()){
  437.                     $newHobit $currentPostition;
  438.                     $newHobitAgo $this->TimeToJourJ($lastHobit['endDateTime']->format("Y-m-d H-i-s"), time());
  439.                 }
  440.                 if($newHobitAgo == false){
  441.                     $currentHobitAgo $this->TimeToJourJ($lastHobit['startDateTime']->format("Y-m-d H-i-s"), time());  
  442.                 }
  443.                 else{
  444.                     if(($lastHobit['startDateTime']->getTimestamp() - $lastHobit['endDateTime']->getTimestamp()) > 600){
  445.                         $currentHobitAgo $this->TimeToJourJ($lastHobit['startDateTime']->format("Y-m-d H-i-s"), time());  
  446.                     }
  447.                     else{
  448.                         $currentHobitAgo $this->TimeToJourJ($lastHobit['startDateTime']->format("Y-m-d H-i-s"), $lastHobit['endDateTime']->getTimestamp());
  449.                     }
  450.                 }
  451.             }
  452.             else{
  453.                 $newHobit $currentPostition;
  454.                 $newHobitAgo $this->TimeToJourJ($currentPostition->getDatePrinted()->format("Y-m-d H-i-s"), time());
  455.                 $currentHobitAgo $this->TimeToJourJ($currentPostition->getDatePrinted()->format("Y-m-d H-i-s"), time());
  456.             }
  457.             $lastHobitTab = array(
  458.                 "start" => $lastHobit $lastHobit['startDateTime']->format("d-m-Y H:i:s") : null,
  459.                 "end" => $lastHobit $lastHobit['endDateTime']->format("d-m-Y H:i:s") : null,
  460.                 "latitude" => $lastHobit $lastHobit['data']->getLatitude() : null,
  461.                 "longitude" => $lastHobit $lastHobit['data']->getLongitude() : null,
  462.             );
  463.         }
  464.         $data = array(
  465.             "currentAgo" => $currentAgo,
  466.             "currentPostition" => $currentPostionTab,
  467.             "currentAgo" => $currentAgo,
  468.             "lastHobit" => $lastHobitTab,
  469.             "currentHobitAgo" => $currentHobitAgo,
  470.             "newHobitAgo" => $newHobitAgo,
  471.             "dataHere" => $dataHere
  472.         );
  473.         return new JsonResponse([ 'return' => 'success''data' => $data]);
  474.     }
  475.     /**
  476.      * @Route("/debug/information/positions/{day}", name="information_positions_debug")
  477.      */
  478.     public function getPositionsDebugAction(Request $request$day "today")
  479.     {   
  480.         if($day == "today"){
  481.             $date date("Y-m-d");
  482.         }
  483.         else if($day == "yesterday"){
  484.             $date date('Y-m-d'strtotime('-1 day'));
  485.         }
  486.         else{
  487.             $date date($day);
  488.         }
  489.         $session = new Session();
  490.         $userCurrent $session->get('currentUser');
  491.         $positionGpsList $this->em
  492.                          ->getRepository(PositionGps::class)
  493.                          ->findPositionByDate($date$userCurrent);
  494.         $positionGpsListArray = [];
  495.         foreach ($positionGpsList as $key => $positionGps) {
  496.             $positionGpsListArray[$key][0] = floatval($positionGps->getLatitude()); 
  497.             $positionGpsListArray[$key][1] = floatval($positionGps->getLongitude()); 
  498.             $positionGpsListArray[$key][2] = strval($positionGps->getDatePrinted()->format('d-m-Y H:i')); 
  499.         }
  500.         return $this->render('debug/positions.html.twig', Array(
  501.            "positionGpsList" => $positionGpsList,
  502.            "positionGpsListArray" => $positionGpsListArray
  503.         ));
  504.     }
  505.     function generateRandomString($length 10) {
  506.         $characters '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  507.         $charactersLength strlen($characters);
  508.         $randomString '';
  509.         for ($i 0$i $length$i++) {
  510.             $randomString .= $characters[rand(0$charactersLength 1)];
  511.         }
  512.         return $randomString;
  513.     }
  514.     function Date_ConvertSqlTab($date_sql) {
  515.         $jour substr($date_sql82);
  516.         $mois substr($date_sql52);
  517.         $annee substr($date_sql04);
  518.         $heure substr($date_sql112);
  519.         $minute substr($date_sql142);
  520.         $seconde substr($date_sql172);
  521.         
  522.         $key = array('annee''mois''jour''heure''minute''seconde');
  523.         $value = array($annee$mois$jour$heure$minute$seconde);
  524.         
  525.         $tab_retour array_combine($key$value);
  526.         
  527.         return $tab_retour;
  528.     }
  529.     function AuPluriel($chiffre) {
  530.         if($chiffre>1) {
  531.             return 's';
  532.         };
  533.     }
  534.     function TimeToJourJ($date_sql$mkt_now) {
  535.         $tab_date $this->Date_ConvertSqlTab($date_sql);
  536.         $mkt_jourj mktime($tab_date['heure'],
  537.                         $tab_date['minute'],
  538.                         $tab_date['seconde'],
  539.                         $tab_date['mois'],
  540.                         $tab_date['jour'],
  541.                         $tab_date['annee']);
  542.         
  543.         $diff $mkt_jourj $mkt_now;
  544.         
  545.         $unjour 3600 24;
  546.         
  547.         if($diff>=$unjour) {
  548.             // EN JOUR
  549.             $calcul $diff $unjour;
  550.             return 'Il reste <strong>'.ceil($calcul).' day'.$this->AuPluriel($calcul).
  551.     '</strong>';
  552.         } elseif($diff<$unjour && $diff>=&& $diff>=3600) {
  553.             // EN HEURE
  554.             $calcul $diff 3600;
  555.             return 'Il reste <strong>'.ceil($calcul).' hour'.$this->AuPluriel($calcul).
  556.     '</strong>';
  557.         } elseif($diff<$unjour && $diff>=&& $diff<3600) {
  558.             // EN MINUTES
  559.             $calcul $diff 60;
  560.             return 'Il reste <strong>'.ceil($calcul).' minute'.$this->AuPluriel($calcul).
  561.     '</strong>';
  562.         } elseif($diff<&& abs($diff)<60) {
  563.             // DEPUIS EN MINUTES
  564.             $calcul abs($diff);
  565.             return '<strong>'.ceil($calcul).' second'.$this->AuPluriel($calcul).
  566.     '</strong>';
  567.         } elseif($diff<&& abs($diff)<3600) {
  568.             // DEPUIS EN MINUTES
  569.             $calcul abs($diff) + 3600;
  570.             $minute date('i'$calcul); 
  571.             $seconde date('s'$calcul); 
  572.             return '<strong>'.$minute.' minute'.$this->AuPluriel($minute).
  573.     ' and '.$seconde.'s</strong>'
  574.         } elseif($diff<&& abs($diff)<$unjour) {
  575.             // DEPUIS EN HEURES
  576.             $calcul abs($diff) - 3600;
  577.             $hour date('H'$calcul); 
  578.             $minute date('i'$calcul); 
  579.             $seconde date('s'$calcul); 
  580.             return '<strong>'.$hour.' hour'.$this->AuPluriel($hour).', '.$minute.' minute'.$this->AuPluriel($minute).
  581.     ' and '.$seconde.'s</strong>';      
  582.         } else {
  583.             // DEPUIS EN JOUR
  584.             $calculDay = (abs($diff) / $unjour) - 1;
  585.             $calcul = (abs($diff) - ($unjour ceil($calculDay)) - 3600);
  586.             $hour date('H'$calcul); 
  587.             $minute date('i'$calcul); 
  588.             $seconde date('s'$calcul); 
  589.             return '<strong>'.ceil($calculDay).' day, '.$hour.' h, '.$minute.' m'.
  590.     ', '.$seconde.'s</strong>';
  591.         };
  592.     }
  593.     function ConvertisseurTime($Time){
  594.      if($Time 3600){ 
  595.        $heures 0
  596.        
  597.        if($Time 60){$minutes 0;} 
  598.        else{$minutes round($Time 60);} 
  599.        
  600.        $secondes floor($Time 60); 
  601.        } 
  602.        else{ 
  603.        $heures round($Time 3600); 
  604.        $secondes round($Time 3600); 
  605.        $minutes floor($secondes 60); 
  606.        } 
  607.        
  608.        $secondes2 round($secondes 60); 
  609.       
  610.        $TimeFinal "$minutes minute".$this->AuPluriel($minutes)." and $secondes2 s"
  611.        return $TimeFinal
  612.     }
  613.     function dateDiff($date1$date2){
  614.         $diff abs($date1 $date2); // abs pour avoir la valeur absolute, ainsi éviter d'avoir une différence négative
  615.         $retour = array();
  616.      
  617.         $tmp $diff;
  618.         $retour['second'] = $tmp 60;
  619.      
  620.         $tmp floor( ($tmp $retour['second']) /60 );
  621.         $retour['minute'] = $tmp 60;
  622.      
  623.         $tmp floor( ($tmp $retour['minute'])/60 );
  624.         $retour['hour'] = $tmp 24;
  625.      
  626.         $tmp floor( ($tmp $retour['hour'])  /24 );
  627.         $retour['day'] = $tmp;
  628.      
  629.         return $retour;
  630.     }
  631.     function get_distance_m($lastHobitLat$lastHobitLong$newHobitLat$newHobitLong) {
  632.         $lat1 $lastHobitLat;
  633.         $lng1 $lastHobitLong;
  634.         $lat2 $newHobitLat;
  635.         $lng2 $newHobitLong;
  636.         $earth_radius 6378137;   
  637.         $rlo1 deg2rad($lng1);
  638.         $rla1 deg2rad($lat1);
  639.         $rlo2 deg2rad($lng2);
  640.         $rla2 deg2rad($lat2);
  641.         $dlo = ($rlo2 $rlo1) / 2;
  642.         $dla = ($rla2 $rla1) / 2;
  643.         $a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo));
  644.         $d atan2(sqrt($a), sqrt($a));
  645.         return ($earth_radius $d);
  646.     }
  647. }