/**
  * @param User       $user
  * @param Restaurant $restaurant
  * @param int        $page
  *
  * @return Pagerfanta
  */
 public function getPagedLeadersPhotos(User $user, Restaurant $restaurant, $page = 1)
 {
     $leadersId = $this->getLeadersOf($user->getId());
     $queryBuilder = $this->getEntityManager()->createQueryBuilder();
     $queryBuilder->select('p,u')->from(Photo::SHORTCUT_CLASS_NAME, 'p')->leftJoin('p.user', 'u')->andWhere('p.restaurant = :restaurant')->andWhere($queryBuilder->expr()->in('u.id', ':leadersId'))->setParameter('restaurant', $restaurant)->setParameter('leadersId', $leadersId);
     return $this->getPager($queryBuilder, $page);
 }
 /**
  * @param User $user
  */
 private function hydrateAvatar(User $user)
 {
     if ($user->getAvatar()) {
         $user->setAvatar($this->cloudfrontUrl . $user->getAvatar());
     } else {
         $user->setAvatar($this->cloudfrontUrl . 'avatar/_default_avatar.png');
     }
 }
 /**
  * @param User $follower
  * @param $leaders
  */
 protected function follow($follower, $leaders)
 {
     $counter = 0;
     $max = rand(1, 100);
     shuffle($leaders);
     /** @var User $leader */
     foreach ($leaders as $leader) {
         $this->connection->executeQuery('INSERT INTO connections (leader_id, follower_id, status) VALUES (' . $leader . ',' . $follower->getId() . ', "APPROVED")');
         $counter++;
         if ($counter > $max) {
             return;
         }
     }
 }
 /**
  * @param User $user
  */
 private function createRandomsReviews(User $user)
 {
     shuffle($this->restaurants);
     $i = 0;
     $max = rand(0, 100);
     /** @var Restaurant $restaurant */
     foreach ($this->restaurants as $restaurant) {
         if ($i > $max) {
             return;
         }
         $tags = $this->getRandomTags();
         $comment = $this->getRandomComment();
         foreach ($tags as $tag) {
             $comment .= ' #' . $tag->getName();
         }
         $this->connection->exec('INSERT INTO reviews (
               cuisine_id,
               geoname_id,
               user_id,
               restaurant_id,
               cost,
               comment,
               position,
               score
               )
               VALUES
               (
               ' . $this->getRandomCuisine()->getId() . ',
               ' . $restaurant->getGeoname()->getId() . ',
               ' . $user->getId() . ',
               ' . $restaurant->getId() . ',
               ' . $this->getRandomCost() . ',
               "' . $comment . '",
               ' . $i . ',
               ' . $this->getRandomScore() . '
               )');
         $id = $this->connection->lastInsertId();
         foreach ($tags as $tag) {
             $this->connection->exec('INSERT INTO review_tag (review_id, tag_id) VALUES (' . $id . ', ' . $tag->getId() . ')');
         }
         $i++;
     }
 }
 /**
  * @param User       $user
  * @param Review $review
  *
  * @return int
  */
 public function getMaxPosition(User $user, Review $review)
 {
     $cuisine = $review->getCuisine();
     $geoname = $review->getGeoname();
     $sql = '
       SELECT MAX(reviews.position) AS maxPosition
       FROM reviews
       WHERE cuisine_id = ?
       AND geoname_id = ?
       AND user_id = ?';
     $stmt = $this->getEntityManager()->getConnection()->prepare($sql);
     $stmt->bindValue(1, $cuisine->getId());
     $stmt->bindValue(2, $geoname->getId());
     $stmt->bindValue(3, $user->getId());
     $stmt->execute();
     $results = $stmt->fetch();
     if (null === $results["maxPosition"]) {
         return 0;
     }
     return (int) $results["maxPosition"];
 }
 /**
  * @param User $user
  */
 public function hydrateIsMyFollower(User $user)
 {
     $isMyLeader = in_array($user->getId(), $this->userRepository->getFollowersOf($this->securityContext->getToken()->getUser()->getId()));
     $user->setIsMyFollower($isMyLeader);
 }
示例#7
0
 /**
  * @param User $user
  */
 public function sendWelcomeEmail(User $user)
 {
     $template = 'TastdCoreBundle:Email:welcome.html.twig';
     $html = $this->templating->render($template, array('user' => $user));
     $this->sendEmailMessage('[TASTD] Welcome', $html, $this->adminSender, $user->getEmail());
 }
 /**
  * @return User
  */
 public function create()
 {
     $isMale = rand(0, 1);
     $this->counter++;
     $user = new User();
     $user->setBirthYear($this->getRandomBirthYear());
     $email = $this->getRandomEmail();
     $user->setEmail($email);
     $user->setEmailCanonical($email);
     $user->setLastName($this->getRandomLastName());
     $user->setEnabled(true);
     $user->setHeadline($this->getRandomHeadline());
     $user->setAbout($this->getRandomAbout());
     $user->setPlainPassword($this->getRandomPassword());
     $user->setScore($this->getRandomScore());
     if ($isMale) {
         $user->setFirstName($this->getRandomMaleFirstName());
         $user->setAvatar($this->getRandomMaleAvatar());
     } else {
         $user->setFirstName($this->getRandomFemaleFirstName());
         $user->setAvatar($this->getRandomFemaleAvatar());
     }
     $this->entityManager->persist($user);
     return $user;
 }
 /**
  * @param User $user
  */
 protected function sendEmail(User $user)
 {
     $data = array();
     $data['userId'] = $user->getId();
     $data['email'] = $user->getEmail();
     $data['total'] = $user->getScore();
     $data['position'] = $this->scoreManager->getScorePosition($user->getId());
     $data['restaurantsCount'] = $this->scoreManager->getLastWeekRestaurantsCount($user->getId());
     $data['restaurantsScore'] = $data['restaurantsCount'] * ScoreManager::COUNT_RESTAURANT_MULTIPLIER;
     $data['followersCount'] = $this->scoreManager->getLastWeekFollowersCount($user->getId());
     $data['followersScore'] = $data['followersCount'] * ScoreManager::COUNT_FOLLOWERS_MULTIPLIER;
     $data['sharedScore'] = $this->scoreManager->getLastWeekCommonReviewsCount($user->getId());
     $data['sharedCount'] = $data['sharedScore'] * ScoreManager::COMMON_REVIEW_MULTIPLIER;
     $this->output->write('    ' . json_encode($data) . PHP_EOL);
     if ($this->isCsvEmail) {
         $this->csv .= implode(',', $data) . PHP_EOL;
     } else {
         $this->mailer->sendRecapEmail($user, $data);
     }
 }
 /**
  * @param Request $request
  * @param User    $user
  *
  * @throws \Doctrine\DBAL\DBALException
  *
  * @return ArrayAdapter
  */
 public function getAllExperiencedBy(Request $request, User $user)
 {
     $userId = $request->query->get('user');
     $pageNumber = $request->query->get('page', 1);
     $sql = '
         SELECT DISTINCT
           geonames.id,
           ascii_name as asciiName,
           lat,
           lng,
           country,
           admin1,
           population,
           timezone,
           ascii_name as formattedName,
           currency_symbol as currencySymbol,
           currency_code as currencyCode
         FROM geonames
         RIGHT JOIN reviews ON geonames.id = reviews.geoname_id
         WHERE reviews.user_id = :user_id
         OR geonames.id = :geonames_id
         ORDER BY geonames.population DESC';
     $stmt = $this->getEntityManager()->getConnection()->prepare($sql);
     $stmt->bindValue('user_id', $userId);
     $stmt->bindValue('geonames_id', $user->getId());
     $stmt->execute();
     $results = $stmt->fetchAll();
     $adapter = new ArrayAdapter($results);
     $pager = new Pagerfanta($adapter);
     try {
         $pager = $pager->setCurrentPage($pageNumber);
     } catch (\Exception $e) {
         $adapter = new ArrayAdapter(array());
         $pager = new OutOfRangePager($adapter);
         $pager->setOriginalPage($pageNumber);
     }
     $pager->setMaxPerPage(20);
     return $pager;
 }
 /**
  * @param User $user
  *
  * @return User
  */
 public function setRandomDefaultAvatar(User $user)
 {
     if ($user->getAvatar() === null) {
         $user->setAvatar('avatar/default' . rand(0, 2) . '.jpg');
     }
     return $user;
 }
 /**
  * @param string $name
  * @param User   $user
  * @param int    $pageNumber
  *
  * @return Pagerfanta
  */
 public function getUsersWithCommonFollowers($name, User $user, $pageNumber = 1)
 {
     $sqlAllUsers = "SELECT\n                users.id as user_id,\n                users.full_name as full_name,\n                users.avatar as avatar,\n                0 as common_followers_count\n            FROM users\n            WHERE users.id <> :user_id\n            AND full_name LIKE :name";
     $sqlCommonLeaders = "SELECT\n                c2.leader_id as user_id,\n                '' as full_name,\n                '' as avatar,\n                COUNT(c1.follower_id) as common_followers_count\n            FROM connections c1\n            INNER JOIN connections c2\n                ON c1.follower_id = c2.follower_id\n                AND c1.leader_id <> c2.leader_id\n            WHERE c1.leader_id = :user_id\n            AND c1.status = :connection_status\n            GROUP BY c1.leader_id, c2.leader_id";
     $sql = "SELECT\n                results.user_id as id,\n                results.full_name as full_name,\n                results.avatar as avatar,\n                SUM(results.common_followers_count) as common_followers_count\n            FROM (%s UNION ALL %s) AS results\n            GROUP BY id\n            HAVING full_name LIKE :name\n            ORDER BY common_followers_count DESC";
     $sql = sprintf($sql, $sqlAllUsers, $sqlCommonLeaders);
     $stmt = $this->getEntityManager()->getConnection()->prepare($sql);
     $stmt->bindValue('connection_status', ConnectionStatus::APPROVED);
     $stmt->bindValue('user_id', $user->getId());
     $stmt->bindValue('name', '%' . $name . '%');
     $stmt->execute();
     $results = $stmt->fetchAll();
     $adapter = new ArrayAdapter($results);
     $pager = new Pagerfanta($adapter);
     try {
         $pager = $pager->setCurrentPage($pageNumber);
     } catch (\Exception $e) {
         $adapter = new ArrayAdapter(array());
         $pager = new OutOfRangePager($adapter);
         $pager->setOriginalPage($pageNumber);
     }
     return $pager;
 }