/** * @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); }
/** * @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; }