src/Controller/MembersController.php line 64

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use App\Entity\Members;
  8. use App\Entity\MembersProfiles;
  9. use App\Entity\MembersPictures;
  10. use App\Entity\MembersTimelines;
  11. use App\Entity\MembersInfo;
  12. use App\Entity\MembersInfoHistory;
  13. use App\Repository\MembersRepository;
  14. use App\Repository\MembersProfilesRepository;
  15. use App\Repository\MembersPicturesRepository;
  16. use App\Repository\MembersTimelinesRepository;
  17. use App\Repository\MembersInfoRepository;
  18. use App\Repository\MembersInfoHistoryRepository;
  19. use App\Repository\CouplesRepository;
  20. use App\Repository\CouplesActivityRepository;
  21. use Symfony\Contracts\Translation\TranslatorInterface;
  22. use App\Service\MembersService;
  23. #[Route('/members'name'members_')]
  24. class MembersController extends AbstractController
  25. {
  26.     private $members;
  27.     private $membersProfiles;
  28.     private $membersPictures;
  29.     private $membersTimeline;
  30.     private $membersInfo;
  31.     private $membersInfoHistory;
  32.     private $couples;
  33.     private $couplesActivity;
  34.     private $translator;
  35.     private $memberService;
  36.     public function __construct(MembersRepository $members,
  37.                                 MembersProfilesRepository $membersProfiles,
  38.                                 MembersPicturesRepository $membersPictures,
  39.                                 MembersTimelinesRepository $membersTimeline,
  40.                                 MembersInfoRepository $membersInfo,
  41.                                 MembersInfoHistoryRepository $membersInfoHistory,
  42.                                 CouplesRepository $couples,
  43.                                 CouplesActivityRepository $couplesActivity,
  44.                                 TranslatorInterface $translator,
  45.                                 MembersService $memberService)
  46.     {
  47.         $this->members $members;
  48.         $this->membersProfiles $membersProfiles;
  49.         $this->membersPictures $membersPictures;
  50.         $this->membersTimeline $membersTimeline;
  51.         $this->membersInfo $membersInfo;
  52.         $this->membersInfoHistory $membersInfoHistory;
  53.         $this->couples $couples;
  54.         $this->couplesActivity $couplesActivity;
  55.         $this->translator $translator;
  56.         $this->mService $memberService;
  57.     }
  58.     
  59.     #[Route('/all'name'allmembers')]
  60.     public function allMembers(): Response
  61.     {
  62.         return $this->render('members/all.html.twig', [
  63.         ]);
  64.     }
  65.     
  66.     #[Route('/my-follows'name'myfollows')]
  67.     public function myFollows(): Response
  68.     {
  69.         return $this->render('members/myfollows.html.twig', [
  70.         ]);
  71.     }
  72.     
  73.     #[Route('/{member}/card/profile'name'membercard_profile')]
  74.     public function memberCardProfile($member): Response
  75.     {
  76.         $memberData $this->members->findOneBy(['userId' => $member]);
  77.         $profile $this->membersProfiles->findOneBy(['userId' => $member]);
  78.         $profileImage $this->membersPictures->findOneBy(['creator' => $member'imageType' => 'member_public''isMain' => true]);
  79.         $profileImages $this->membersPictures->findBy(['creator' => $member'imageType' => 'member_public''isRemove' => false'isMain' => false]);
  80.         $memberInfo $this->membersInfo->findOneBy(['userId' => $member]);
  81.         $memberInfoHistory $this->membersInfoHistory->findBy(['userId' => $member]);
  82.         $lastActivity = [];
  83.         $imagesFetch = [];
  84.         if(count($profileImages) > 0){
  85.             foreach($profileImages as $pImage){
  86.                 $pathFor '../pjhnDcTQED/medium/'.$member.'/'.$pImage->getNameMedium();
  87.                 $typeFor pathinfo($pathForPATHINFO_EXTENSION);
  88.                 $dataFor file_get_contents($pathFor);
  89.                 list($width$height) = getimagesize($pathFor);
  90.                 $base64for 'data:image/' $typeFor ';base64,' base64_encode($dataFor);
  91.                 $imagesFetch[] = ['base64' => $base64for'widthImg' => strval($width), 'heightImg' => strval($height)];
  92.             }
  93.         }
  94.         // Birthday
  95.         // Profile image base64
  96.         $path '../pjhnDcTQED/medium/'.$member.'/'.$profileImage->getNameMedium();
  97.         $type pathinfo($pathPATHINFO_EXTENSION);
  98.         $data file_get_contents($path);
  99.         $base64 'data:image/' $type ';base64,' base64_encode($data);
  100.         $memberCard = [
  101.             'username' => $profile->getUsername(),
  102.             'id' => $member,
  103.             'cl' => $profile->getCoupleRole(),
  104.             'geo' => $profile->getGeoCity(),
  105.             'isViD' => $profile->getIsVerifiedIdentity(),
  106.             'isTiD' => $this->getStatusColor($profile->getLastActivity()),
  107.             'ag' => $this->dateToAge($memberData->getDateOfBirth()),
  108.             'pi' => $base64,
  109.             'picCount' => count($profileImages),
  110.             'pictures' => $imagesFetch,
  111.             'gender' => $profile->getGender(),
  112.             'lastActivity' => $lastActivity,
  113.             'lastActivityCount' => count($lastActivity),
  114.             'memInfo' => $this->mService->organizeInfo($memberInfo),
  115.         ];
  116.         return $this->render('members/member_card_profile.html.twig', [
  117.             'member' => $memberCard
  118.         ]);
  119.     }
  120.     
  121.     #[Route('/{member}/card/timeline'name'membercard_timeline')]
  122.     public function memberCardTimeline($memberMembersRepository $membersMembersProfilesRepository $profilesMembersPicturesRepository $pictures): Response
  123.     {
  124.         $memberData $members->findOneBy(['userId' => $member]);
  125.         $profile $profiles->findOneBy(['userId' => $member]);
  126.         $profileImage $pictures->findOneBy(['creator' => $member'imageType' => 'member_public''isMain' => true]);
  127.         $profileImages $pictures->findBy(['creator' => $member'imageType' => 'member_public''isRemove' => false'isMain' => false]);
  128.         $timelineItems $this->membersTimeline->findBy(['targetMember' => $member], ['addedAt' => 'DESC']);
  129.         $fetchTimeline = [];
  130.         if(count($timelineItems) > 0){
  131.             foreach($timelineItems as $timelineItem){
  132.                 $fetchTimeline[] = $this->mService->prepareTimelineItem($timelineItem);
  133.                 
  134.             }
  135.         }
  136.         
  137.         $imagesFetch = [];
  138.         if(count($profileImages) > 0){
  139.             foreach($profileImages as $pImage){
  140.                 $pathFor '../pjhnDcTQED/medium/'.$member.'/'.$pImage->getNameMedium();
  141.                 $typeFor pathinfo($pathForPATHINFO_EXTENSION);
  142.                 $dataFor file_get_contents($pathFor);
  143.                 list($width$height) = getimagesize($pathFor);
  144.                 $base64for 'data:image/' $typeFor ';base64,' base64_encode($dataFor);
  145.                 $imagesFetch[] = ['base64' => $base64for'widthImg' => strval($width), 'heightImg' => strval($height)];
  146.             }
  147.         }
  148.         // Birthday
  149.         $dateNow = new \DateTime('now');
  150.         $dateTarget $memberData->getDateOfBirth();
  151.         $interval $dateTarget->diff($dateNow);
  152.         // Profile image base64
  153.         $path '../pjhnDcTQED/medium/'.$member.'/'.$profileImage->getNameMedium();
  154.         $type pathinfo($pathPATHINFO_EXTENSION);
  155.         $data file_get_contents($path);
  156.         $base64 'data:image/' $type ';base64,' base64_encode($data);
  157.         $memberCard = [
  158.             'username' => $profile->getUsername(),
  159.             'id' => $member,
  160.             'cl' => $profile->getCoupleRole(),
  161.             'geo' => $profile->getGeoCity(),
  162.             'ag' => $interval->format('%Y'),
  163.             'pi' => $base64,
  164.             'picCount' => count($profileImages),
  165.             'pictures' => $imagesFetch,
  166.             'isViD' => $profile->getIsVerifiedIdentity(),
  167.             'isTiD' => $this->getStatusColor($profile->getLastActivity()),
  168.             'gender' => $profile->getGender(),
  169.             'timelineData' => $fetchTimeline
  170.         ];
  171.         
  172.         return $this->render('members/member_card_timeline.html.twig', [
  173.             'member' => $memberCard
  174.         ]);
  175.     }
  176.     
  177.     #[Route('/{member}/card/messenger'name'membercard_message')]
  178.     public function memberCardMessage($memberMembersRepository $membersMembersProfilesRepository $profilesMembersPicturesRepository $pictures): Response
  179.     {
  180.         $memberData $members->findOneBy(['userId' => $member]);
  181.         $profile $profiles->findOneBy(['userId' => $member]);
  182.         $profileImage $pictures->findOneBy(['creator' => $member'imageType' => 'member_public''isMain' => true]);
  183.         $profileImages $pictures->findBy(['creator' => $member'imageType' => 'member_public''isRemove' => false'isMain' => false]);
  184.         $imagesFetch = [];
  185.         if(count($profileImages) > 0){
  186.             foreach($profileImages as $pImage){
  187.                 $pathFor '../pjhnDcTQED/medium/'.$member.'/'.$pImage->getNameMedium();
  188.                 $typeFor pathinfo($pathForPATHINFO_EXTENSION);
  189.                 $dataFor file_get_contents($pathFor);
  190.                 list($width$height) = getimagesize($pathFor);
  191.                 $base64for 'data:image/' $typeFor ';base64,' base64_encode($dataFor);
  192.                 $imagesFetch[] = ['base64' => $base64for'widthImg' => strval($width), 'heightImg' => strval($height)];
  193.             }
  194.         }
  195.         // Birthday
  196.         $dateNow = new \DateTime('now');
  197.         $dateTarget $memberData->getDateOfBirth();
  198.         $interval $dateTarget->diff($dateNow);
  199.         // Profile image base64
  200.         $path '../pjhnDcTQED/medium/'.$member.'/'.$profileImage->getNameMedium();
  201.         $type pathinfo($pathPATHINFO_EXTENSION);
  202.         $data file_get_contents($path);
  203.         $base64 'data:image/' $type ';base64,' base64_encode($data);
  204.         $memberCard = [
  205.             'username' => $profile->getUsername(),
  206.             'id' => $member,
  207.             'cl' => $profile->getCoupleRole(),
  208.             'geo' => $profile->getGeoCity(),
  209.             'ag' => $interval->format('%Y'),
  210.             'pi' => $base64,
  211.             'picCount' => count($profileImages),
  212.             'pictures' => $imagesFetch,
  213.             'isViD' => $profile->getIsVerifiedIdentity(),
  214.             'isTiD' => $this->getStatusColor($profile->getLastActivity()),
  215.             'gender' => $profile->getGender()
  216.         ];
  217.         
  218.         return $this->render('members/member_card_messages.html.twig', [
  219.             'member' => $memberCard
  220.         ]);
  221.     }
  222.     
  223.     #[Route('/{member}/card/gallery'name'membercard_gallery')]
  224.     public function memberCardGallery($memberMembersRepository $membersMembersProfilesRepository $profilesMembersPicturesRepository $pictures): Response
  225.     {
  226.         $memberData $members->findOneBy(['userId' => $member]);
  227.         $profile $profiles->findOneBy(['userId' => $member]);
  228.         $profileImage $pictures->findOneBy(['creator' => $member'imageType' => 'member_public''isMain' => true]);
  229.         $profileImages $pictures->findBy(['creator' => $member'imageType' => 'member_public''isRemove' => false'isMain' => false]);
  230.         $imagesFetch = [];
  231.         if(count($profileImages) > 0){
  232.             foreach($profileImages as $pImage){
  233.                 $pathFor '../pjhnDcTQED/medium/'.$member.'/'.$pImage->getNameMedium();
  234.                 $typeFor pathinfo($pathForPATHINFO_EXTENSION);
  235.                 $dataFor file_get_contents($pathFor);
  236.                 list($width$height) = getimagesize($pathFor);
  237.                 $base64for 'data:image/' $typeFor ';base64,' base64_encode($dataFor);
  238.                 $imagesFetch[] = ['base64' => $base64for'widthImg' => strval($width), 'heightImg' => strval($height)];
  239.             }
  240.         }
  241.         // Birthday
  242.         $dateNow = new \DateTime('now');
  243.         $dateTarget $memberData->getDateOfBirth();
  244.         $interval $dateTarget->diff($dateNow);
  245.         // Profile image base64
  246.         $path '../pjhnDcTQED/medium/'.$member.'/'.$profileImage->getNameMedium();
  247.         $type pathinfo($pathPATHINFO_EXTENSION);
  248.         $data file_get_contents($path);
  249.         $base64 'data:image/' $type ';base64,' base64_encode($data);
  250.         $memberCard = [
  251.             'username' => $profile->getUsername(),
  252.             'id' => $member,
  253.             'cl' => $profile->getCoupleRole(),
  254.             'geo' => $profile->getGeoCity(),
  255.             'ag' => $interval->format('%Y'),
  256.             'pi' => $base64,
  257.             'picCount' => count($profileImages),
  258.             'pictures' => $imagesFetch,
  259.             'isViD' => $profile->getIsVerifiedIdentity(),
  260.             'isTiD' => $this->getStatusColor($profile->getLastActivity()),
  261.             'gender' => $profile->getGender()
  262.         ];
  263.         
  264.         return $this->render('members/member_card_gallery.html.twig', [
  265.             'member' => $memberCard
  266.         ]);
  267.     }
  268.     
  269.     #[Route('/{member}/card/tracking'name'membercard_tracking')]
  270.     public function memberCardTracking($memberMembersRepository $membersMembersProfilesRepository $profilesMembersPicturesRepository $pictures): Response
  271.     {
  272.         $memberData $members->findOneBy(['userId' => $member]);
  273.         $profile $profiles->findOneBy(['userId' => $member]);
  274.         $profileImage $pictures->findOneBy(['creator' => $member'imageType' => 'member_public''isMain' => true]);
  275.         $profileImages $pictures->findBy(['creator' => $member'imageType' => 'member_public''isRemove' => false'isMain' => false]);
  276.         $imagesFetch = [];
  277.         if(count($profileImages) > 0){
  278.             foreach($profileImages as $pImage){
  279.                 $pathFor '../pjhnDcTQED/medium/'.$member.'/'.$pImage->getNameMedium();
  280.                 $typeFor pathinfo($pathForPATHINFO_EXTENSION);
  281.                 $dataFor file_get_contents($pathFor);
  282.                 list($width$height) = getimagesize($pathFor);
  283.                 $base64for 'data:image/' $typeFor ';base64,' base64_encode($dataFor);
  284.                 $imagesFetch[] = ['base64' => $base64for'widthImg' => strval($width), 'heightImg' => strval($height)];
  285.             }
  286.         }
  287.         $timingResult = [];
  288.         $todayResult date("y-m-d") . ' 00:00:00';
  289.         $timingTester strtotime($todayResult);
  290.         for ($i 0$i <= 1439$i++) {
  291.             $timingTest $timingTester + ($i 60);
  292.             $timingResult[date("H:i"$timingTest)] = date("Y-m-d H:i"$timingTest);
  293.         }
  294.         echo $timingResult["03:32"];
  295.         // Birthday
  296.         $dateNow = new \DateTime('now');
  297.         $dateTarget $memberData->getDateOfBirth();
  298.         $interval $dateTarget->diff($dateNow);
  299.         // Profile image base64
  300.         $path '../pjhnDcTQED/medium/'.$member.'/'.$profileImage->getNameMedium();
  301.         $type pathinfo($pathPATHINFO_EXTENSION);
  302.         $data file_get_contents($path);
  303.         $base64 'data:image/' $type ';base64,' base64_encode($data);
  304.         $memberCard = [
  305.             'username' => $profile->getUsername(),
  306.             'id' => $member,
  307.             'cl' => $profile->getCoupleRole(),
  308.             'geo' => $profile->getGeoCity(),
  309.             'ag' => $interval->format('%Y'),
  310.             'pi' => $base64,
  311.             'picCount' => count($profileImages),
  312.             'pictures' => $imagesFetch,
  313.             'isViD' => $profile->getIsVerifiedIdentity(),
  314.             'isTiD' => $this->getStatusColor($profile->getLastActivity()),
  315.             'gender' => $profile->getGender(),
  316.             'timRes' => $timingResult
  317.         ];
  318.         
  319.         return $this->render('members/member_card_tracking.html.twig', [
  320.             'member' => $memberCard
  321.         ]);
  322.     }
  323.     
  324.     #[Route('/{member}/card/locked'name'membercard_locked')]
  325.     public function memberCardLocked($memberMembersRepository $membersMembersProfilesRepository $profilesMembersPicturesRepository $pictures): Response
  326.     {
  327.         $memberData $members->findOneBy(['userId' => $member]);
  328.         $profile $profiles->findOneBy(['userId' => $member]);
  329.         $profileImage $pictures->findOneBy(['creator' => $member'imageType' => 'member_public''isMain' => true]);
  330.         $profileImages $pictures->findBy(['creator' => $member'imageType' => 'member_public''isRemove' => false'isMain' => false]);
  331.         $imagesFetch = [];
  332.         if(count($profileImages) > 0){
  333.             foreach($profileImages as $pImage){
  334.                 $pathFor '../pjhnDcTQED/medium/'.$member.'/'.$pImage->getNameMedium();
  335.                 $typeFor pathinfo($pathForPATHINFO_EXTENSION);
  336.                 $dataFor file_get_contents($pathFor);
  337.                 list($width$height) = getimagesize($pathFor);
  338.                 $base64for 'data:image/' $typeFor ';base64,' base64_encode($dataFor);
  339.                 $imagesFetch[] = ['base64' => $base64for'widthImg' => strval($width), 'heightImg' => strval($height)];
  340.             }
  341.         }
  342.         // Birthday
  343.         $dateNow = new \DateTime('now');
  344.         $dateTarget $memberData->getDateOfBirth();
  345.         $interval $dateTarget->diff($dateNow);
  346.         // Profile image base64
  347.         $path '../pjhnDcTQED/medium/'.$member.'/'.$profileImage->getNameMedium();
  348.         $type pathinfo($pathPATHINFO_EXTENSION);
  349.         $data file_get_contents($path);
  350.         $base64 'data:image/' $type ';base64,' base64_encode($data);
  351.         $memberCard = [
  352.             'username' => $profile->getUsername(),
  353.             'id' => $member,
  354.             'cl' => $profile->getCoupleRole(),
  355.             'geo' => $profile->getGeoCity(),
  356.             'ag' => $interval->format('%Y'),
  357.             'pi' => $base64,
  358.             'picCount' => count($profileImages),
  359.             'pictures' => $imagesFetch,
  360.             'isViD' => $profile->getIsVerifiedIdentity(),
  361.             'isTiD' => $this->getStatusColor($profile->getLastActivity()),
  362.             'gender' => $profile->getGender()
  363.         ];
  364.         
  365.         return $this->render('members/member_card_locked.html.twig', [
  366.             'member' => $memberCard
  367.         ]);
  368.     }
  369.     
  370.     #[Route('/fetch'name'membersfetch')]
  371.     public function membersFetch(MembersRepository $membersMembersProfilesRepository $profilesMembersPicturesRepository $picturesTranslatorInterface $translator): Response
  372.     {
  373.         switch ($_POST['a']) {
  374.             case 0:
  375.                 $limitAgeFrom = new \DateTime('- 99 years');
  376.                 $limitAgeTo = new \DateTime('now');
  377.                 break;
  378.             case 1:
  379.                 $limitAgeFrom = new \DateTime('- 22 years');
  380.                 $limitAgeTo = new \DateTime('now');
  381.                 break;
  382.             case 2:
  383.                 $limitAgeFrom = new \DateTime('- 30 years');
  384.                 $limitAgeTo = new \DateTime('- 23 years');
  385.                 break;
  386.             case 3:
  387.                 $limitAgeFrom = new \DateTime('- 45 years');
  388.                 $limitAgeTo = new \DateTime('- 31 years');
  389.                 break;
  390.             case 4:
  391.                 $limitAgeFrom = new \DateTime('- 99 years');
  392.                 $limitAgeTo = new \DateTime('- 46 years');
  393.                 break;
  394.         }
  395.         // switch gender select
  396.         switch ($_POST['g']) {
  397.             case 0:
  398.                 $limitGender "c.gender = 'F' OR c.gender = 'M'";
  399.                 break;
  400.             case 1:
  401.                 $limitGender "c.gender = 'M'";
  402.                 break;
  403.             case 2:
  404.                 $limitGender "c.gender = 'F'";
  405.                 break;
  406.         }
  407.         switch ($_POST['r']) {
  408.             case 0:
  409.                 $limitRole "c.coupleRole = 'sub' OR c.coupleRole = 'dom' OR c.coupleRole = 'switch'";
  410.                 break;
  411.             case 1:
  412.                 $limitRole "c.coupleRole = 'dom'";
  413.                 break;
  414.             case 2:
  415.                 $limitRole "c.coupleRole = 'sub'";
  416.                 break;
  417.             case 3:
  418.                 $limitRole "c.coupleRole = 'switch'";
  419.                 break;
  420.         }
  421.         if ($_POST['v'] == 'on'){
  422.             $limitVerify 'c.isVerifiedIdentity = 1';
  423.         }else{
  424.             $limitVerify 'c.isVerifiedIdentity = 1 OR c.isVerifiedIdentity = 0';
  425.         }
  426.         if ($_POST['nf'] == 'on'){
  427.             $limitedTime = new \DateTime("now - 15 minutes");
  428.             $limitedTimeFinal $limitedTime->format('Y.m.d H:i:s');
  429.             $limitNotFake "c.lastActivity > '${limitedTimeFinal}'";
  430.         }else{
  431.             $limitedTime = new \DateTime("now - 99 years");
  432.             $limitedTimeFinal $limitedTime->format('Y.m.d H:i:s');
  433.             $limitNotFake "c.lastActivity > '${limitedTimeFinal}'";
  434.         }
  435.         $membersData $profiles->findMembersByFilter($limitAgeFrom$limitAgeTo$limitGender$limitRole$limitVerify$limitNotFake$_POST['off']);
  436.         $membersPageData = [];
  437.         foreach($membersData as $member){
  438.             $dateNow = new \DateTime('now');
  439.             $dateTarget $member['dateOfBirth'];
  440.             $interval $dateTarget->diff($dateNow);
  441.             $profileImage $pictures->findOneBy(['creator' => $member['userId'], 'isMain' => true'imageType' => 'member_public']);
  442.             $path '../pjhnDcTQED/medium/'.$member['userId'].'/'.$profileImage->getNameMedium();
  443.             $type pathinfo($pathPATHINFO_EXTENSION);
  444.             $data file_get_contents($path);
  445.             $base64 'data:image/' $type ';base64,' base64_encode($data);
  446.             $membersPageData[] = [
  447.                 'member' => base64_encode($member['userId']),
  448.                 'age' => $this->dateToAge($member['dateOfBirth']),
  449.                 'un' => $member['username'],
  450.                 'fn' => $member['firstName'],
  451.                 'ln' => $member['lastName'],
  452.                 'g' => $translator->trans($member['gender'], [], 'api'),
  453.                 'c' => $member['geoCity'],
  454.                 'cl' => $translator->trans($member['coupleRole'], [], 'api'),
  455.                 'la' => $this->getStatusColor($member['lastActivity']),
  456.                 'vi' => $member['isVerifiedIdentity'],
  457.                 'pi' => $base64
  458.             ];
  459.         }
  460.         $final $membersPageData;
  461.         $response = new JsonResponse($final);
  462.         return $response;
  463.     }
  464.     
  465.     function dateToString($dateObject$time false){
  466.         $currentYear = new \DateTime('now');
  467.         if($dateObject->format('Y') == $currentYear->format('Y')){
  468.             if($time == true){
  469.                 $dateString $dateObject->format('g:i A d.m');
  470.             }else{
  471.                 $dateString $dateObject->format('d.m');
  472.             }
  473.         }else{
  474.             if($time == true){
  475.                 $dateString $dateObject->format('g:i A d.m.Y');
  476.             }else{
  477.                 $dateString $dateObject->format('d.m.Y');
  478.             }
  479.         }
  480.         return $dateString;
  481.     }
  482.     
  483.     function dateToAge($dateFrom){
  484.         $dateTo = new \DateTime('now');
  485.         $interval $dateFrom->diff($dateTo);
  486.         return $interval->format('%Y');
  487.     }
  488.     
  489.     function dateToAgo($dateObject$time false){
  490.         $dateStr $dateObject->format('Y-m-d H:i:s');
  491.         $dateToStr strtotime($dateStr);
  492.         $dateDiff time() - $dateToStr;
  493.         if($dateDiff 60){
  494.             $dateString 'now';
  495.         }else if($dateDiff 3600){
  496.             $dateString $dateDiff 60 ' min.';
  497.         }else if($dateDiff 86400){
  498.             $dateString $dateDiff 3600 ' hr.';
  499.         }else if($dateDiff >= 86400){
  500.             $currentYear = new \DateTime('now');
  501.             if($dateObject->format('Y') == $currentYear->format('Y')){
  502.                 $dateString $dateObject->format('g:i A d.m');
  503.             }else{
  504.                 $dateString $dateObject->format('g:i A d.m Y');
  505.             }
  506.         }
  507.         return $dateString;
  508.     }
  509.     
  510.     function getStatusColor($lastActivity){
  511.         $statusColor "danger";
  512.         $dateStr $lastActivity->format('Y-m-d H:i:s');
  513.         $dateToStr strtotime($dateStr);
  514.         $dateDiff time() - $dateToStr;
  515.         if($lastActivity !== null){
  516.             if($dateDiff 900 && $dateDiff 3600){
  517.                 $statusColor "warning";
  518.             }else if($dateDiff <= 900){
  519.                 $statusColor "success";
  520.             }else{
  521.                 $statusColor "danger";
  522.             }
  523.         }else{
  524.             $statusColor "danger";
  525.         }
  526.         return $statusColor;
  527.     }
  528. }