PageRenderTime 53ms CodeModel.GetById 27ms RepoModel.GetById 1ms app.codeStats 0ms

/src/ServerGrove/SGLiveChatBundle/Document/VisitRepository.php

https://github.com/casoetan/ServerGroveLiveChat
PHP | 93 lines | 67 code | 13 blank | 13 comment | 2 complexity | 3988d5ecaa31601ae0ca74fe26c4cc69 MD5 | raw file
Possible License(s): LGPL-2.1, LGPL-3.0, ISC, BSD-3-Clause
  1. <?php
  2. namespace ServerGrove\SGLiveChatBundle\Document;
  3. use Doctrine\ODM\MongoDB\DocumentRepository;
  4. use MongoDate;
  5. /**
  6. * Description of VisitRepository
  7. *
  8. * @author Ismael Ambrosi<ismael@servergrove.com>
  9. */
  10. class VisitRepository extends DocumentRepository
  11. {
  12. /**
  13. * @return ServerGrove\SGLiveChatBundle\Document\Visit
  14. */
  15. public function create(Visitor $visitor)
  16. {
  17. $visit = new Visit();
  18. $visit->setVisitor($visitor);
  19. $visit->setKey(md5(time() . $visitor->getAgent() . $visitor->getId()));
  20. #$visit->setLocalTime($localTime);
  21. return $visit;
  22. }
  23. /**
  24. * @return ServerGrove\SGLiveChatBundle\Document\Visit
  25. */
  26. public function getByKey($key, Visitor $visitor)
  27. {
  28. $visit = null;
  29. if (!is_null($key)) {
  30. $visit = $this->findOneBy(array(
  31. 'key' => $key));
  32. }
  33. if (!$visit) {
  34. $visit = $this->create($visitor);
  35. $this->getDocumentManager()->persist($visit);
  36. $this->getDocumentManager()->flush();
  37. }
  38. return $visit;
  39. }
  40. public function getLastVisits()
  41. {
  42. return $this->createQueryBuilder()->field('updatedAt')->range(new MongoDate(time() - 200), new MongoDate(time()))->field('hits')->exists(true)->getQuery()->execute();
  43. }
  44. public function getLastVisitsArray()
  45. {
  46. $array = array();
  47. $visits = $this->getLastVisits();
  48. /* @var $visit Visit */
  49. foreach ($visits as $visit) {
  50. $hits = $visit->getHits();
  51. $array[] = array(
  52. 'id' => $visit->getId(),
  53. 'visitor' => array(
  54. 'id' => $visit->getVisitor()->getId(),
  55. 'visits' => count($visit->getVisitor()->getVisits()),
  56. 'languages' => $visit->getVisitor()->getLanguages(),
  57. 'agent' => $visit->getVisitor()->getAgent(),
  58. 'currentPage' => $visit->getHits()->last()->getVisitLink()->getUrl(),
  59. 'referer' => $hits->last()->getReferer()),
  60. 'hits' => array_map(
  61. function (VisitHit $hit)
  62. {
  63. return array(
  64. 'id' => $hit->getId(),
  65. 'createdAt' => $hit->getCreatedAt()->format('Y-m-d H:i:s'),
  66. 'duration' => 0,
  67. 'link' => $hit->getVisitLink()->getUrl(),
  68. 'referer' => $hit->getReferer());
  69. }, $hits->toArray(true)),
  70. 'localtime' => date('r', (int) $visit->getLocalTime()),
  71. 'hostname' => /* gethostbyaddr($visit->getRemoteAddr()) */'Unknown',
  72. 'remoteAddr' => $visit->getRemoteAddr(),
  73. 'country' => 'unknown',
  74. 'createdAt' => $visit->getCreatedAt()->format('Y-m-d H:i:s'),
  75. 'lastHit' => 'lasthit',
  76. 'duration' => time() - $visit->getCreatedAt()->format('U'));
  77. }
  78. return $array;
  79. }
  80. }