/** * {@inheritDoc} */ public function load(ObjectManager $manager) { $users = array(1 => array('name' => 'John Doe', 'email' => '*****@*****.**', 'friends' => array(), 'requests' => array()), 2 => array('name' => 'Sara Doe', 'email' => '*****@*****.**', 'friends' => array(), 'requests' => array(1)), 3 => array('name' => 'James Doe', 'email' => '*****@*****.**', 'friends' => array(), 'requests' => array(1, 2)), 4 => array('name' => 'Jane Smith', 'email' => '*****@*****.**', 'friends' => array(), 'requests' => array(3)), 5 => array('name' => 'Anonymous', 'email' => '*****@*****.**', 'friends' => array(), 'requests' => array(4))); foreach ($users as $id => $userData) { $user = new User(); $user->setName($userData['name']); $user->setEmail($userData['email']); foreach ($userData['friends'] as $friendId) { $user->addFriend($this->getReference('user_' . $friendId)); } foreach ($userData['requests'] as $requestId) { $user->addRequest($this->getReference('user_' . $requestId)); } $manager->persist($user); $this->addReference('user_' . $id, $user); } $manager->flush(); }
/** * @param UserDocument $user * @param UserDocument $request */ public function addRequest($user, $request) { $user->addRequest($request); $this->manager->persist($user); $this->manager->flush(); }
/** * Route to add friends (which also accepts friend requests) * * @param User $friend User to link current user with * * @return null * * @ApiDoc( * resource=false, * description="Creates a friendship request of current user to desired one", * statusCodes={ * 401 = "Unauthorized - log in first", * 204 = "Successfully requested", * 409 = "User already added as friend" * } * ) * @Annotations\Link(requirements={"friend"="\w{24}"}) */ public function linkAction(User $friend) { $currentUser = $this->getUser(); if (!$currentUser instanceof User) { throw new UnauthorizedHttpException('Probably you are not authorized'); } $currentUserId = $currentUser->getId(); $friendId = $friend->getId(); if ($currentUser->hasFriend($friendId)) { $conflictMessage = sprintf('user %s is already your friend', $friendId); throw new ConflictHttpException($conflictMessage); } // Add a friend (subscription) and make friendship request $currentUser->addFriend($friendId); $friend->addRequest($currentUserId); // Accept removes request if exists any $currentUser->removeRequest($friendId); // Persist changes to DB $documentManager = $this->get('doctrine.odm.mongodb.document_manager'); $documentManager->flush(); }