Created
December 5, 2014 07:45
-
-
Save sandosh/c9ed0b6e20396dcfa18e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/Nous/FollowBundle/Repository/FollowRepository.php b/src/Nous/FollowBundle/Repository/FollowRepository.php | |
index 93fdb5b..9de0b0b 100644 | |
--- a/src/Nous/FollowBundle/Repository/FollowRepository.php | |
+++ b/src/Nous/FollowBundle/Repository/FollowRepository.php | |
@@ -157,4 +157,23 @@ class FollowRepository extends EntityRepository | |
return $pager; | |
} | |
+ | |
+ public function getFollowingIdsForUser(User $user) | |
+ { | |
+ $qb = $this->_em->createQueryBuilder(); | |
+ | |
+ $qb | |
+ ->select('IDENTITY(f.following) as id') | |
+ ->from($this->getEntityName(), 'f') | |
+ ->where('f.follower = :user') | |
+ ->andWhere('f.status = :active') | |
+ ->orderBy('f.updatedAt', 'DESC') | |
+ ->setParameter('user', $user) | |
+ ->setParameter('active', Follow::STATUS_ACTIVE) | |
+ ; | |
+ | |
+ $result = $qb->getQuery()->getScalarResult(); | |
+ return array_map('current', $result); | |
+ | |
+ } | |
} | |
diff --git a/src/Nous/UserBundle/Api/Assembler/UserAssembler.php b/src/Nous/UserBundle/Api/Assembler/UserAssembler.php | |
index cef6bc4..303d34a 100644 | |
--- a/src/Nous/UserBundle/Api/Assembler/UserAssembler.php | |
+++ b/src/Nous/UserBundle/Api/Assembler/UserAssembler.php | |
@@ -69,6 +69,11 @@ class UserAssembler extends Assembler | |
$userResource->twitter = $user->getProfile()->getTwitter(); | |
$userResource->instagram = $user->getProfile()->getInstagram(); | |
$userResource->pinterest = $user->getProfile()->getPinterest(); | |
+ if ($this->currentUserService->getUser()) { | |
+ $userResource->isComplete = true; | |
+ } else { | |
+ $userResource->isComplete = !$user->hasRole(User::ROLE_INCOMPLETE); | |
+ } | |
$statistics = new StatisticsResource(); | |
$statistics->followers = $user->getStatistics()->getFollowers(); | |
diff --git a/src/Nous/UserBundle/Api/Controller/UsersController.php b/src/Nous/UserBundle/Api/Controller/UsersController.php | |
index ea5e15a..9f4ccef 100644 | |
--- a/src/Nous/UserBundle/Api/Controller/UsersController.php | |
+++ b/src/Nous/UserBundle/Api/Controller/UsersController.php | |
@@ -14,7 +14,10 @@ use FOS\RestBundle\Controller\Annotations\QueryParam, | |
FOS\RestBundle\Controller\Annotations\View, | |
FOS\RestBundle\Controller\Annotations\Get, | |
FOS\RestBundle\Request\ParamFetcherInterface, | |
- FOS\RestBundle\View\View as FosView | |
+ FOS\RestBundle\View\View as FosView, | |
+ FOS\RestBundle\Controller\Annotations\Post, | |
+ FOS\UserBundle\Event\GetResponseUserEvent, | |
+ FOS\UserBundle\FOSUserEvents | |
; | |
use Nelmio\ApiDocBundle\Annotation\ApiDoc; | |
@@ -23,8 +26,59 @@ use Nous\SiteBundle\Controller\Controller as BaseController; | |
use Nous\UserBundle\Api\Resource\Collection\UserCollection; | |
+use Nous\UserBundle\Api\Form\RegisterType, | |
+ Nous\UserBundle\Api\Resource\NewUser; | |
+ | |
+use Tbbc\RestUtilBundle\Error\Exception\FormErrorException; | |
+ | |
class UsersController extends BaseController | |
{ | |
+ | |
+ /** | |
+ * Create an user | |
+ * | |
+ * @View(statusCode=200) | |
+ * @ApiDoc( | |
+ * input="Nous\UserBundle\Api\Form\RegisterType", | |
+ * output="Nous\UserBundle\Api\Resource\User", | |
+ * statusCodes={ | |
+ * 200="Returned when successful", | |
+ * 400="Returned when posted data contains errors" | |
+ * } | |
+ * ) | |
+ */ | |
+ public function postUsersAction(Request $request) | |
+ { | |
+ | |
+ $new_user = new NewUser(); | |
+ $form = $this->createNamedForm('', new RegisterType(), $new_user); | |
+ $form->handleRequest($request); | |
+ | |
+ if ($form->isValid()) { | |
+ $dispatcher = $this->container->get('event_dispatcher'); | |
+ | |
+ $user = $this->getUserManager()->createUser(); | |
+ $user->setEnabled(true); | |
+ | |
+ $event = new GetResponseUserEvent($user, $request); | |
+ $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event); | |
+ | |
+ if (null !== $event->getResponse()) { | |
+ return $event->getResponse(); | |
+ } | |
+ | |
+ $user->setUsername($new_user->username); | |
+ $user->setPlainPassword($new_user->password); | |
+ $user->setEmail($new_user->email); | |
+ | |
+ $this->getUserManager()->updateUser($user); | |
+ | |
+ return array('user' => $this->getUserAssembler()->entityToResource($user)); | |
+ } | |
+ throw new FormErrorException($form, $this->getTranslator()); | |
+ } | |
+ | |
+ | |
/** | |
* Search users | |
* | |
diff --git a/src/Nous/UserBundle/Api/Resource/User.php b/src/Nous/UserBundle/Api/Resource/User.php | |
index 1833f1f..1b87024 100644 | |
--- a/src/Nous/UserBundle/Api/Resource/User.php | |
+++ b/src/Nous/UserBundle/Api/Resource/User.php | |
@@ -37,4 +37,6 @@ class User | |
public $statistics; | |
public $isFollowing; | |
+ | |
+ public $isComplete; | |
} | |
diff --git a/src/Nous/UserBundle/Resources/config/serializer/Api.Resource.User.xml b/src/Nous/UserBundle/Resources/config/serializer/Api.Resource.User.xml | |
index 2000e2e..aa62dd0 100644 | |
--- a/src/Nous/UserBundle/Resources/config/serializer/Api.Resource.User.xml | |
+++ b/src/Nous/UserBundle/Resources/config/serializer/Api.Resource.User.xml | |
@@ -17,5 +17,6 @@ | |
<property name="pinterest" expose="true" type="string" /> | |
<property name="statistics" expose="true" type="Nous\UserBundle\Api\Resource\Statistics" /> | |
<property name="isFollowing" expose="true" type="boolean" /> | |
+ <property name="isComplete" expose="true" type="boolean" /> | |
</class> | |
</serializer> | |
diff --git a/src/Nous/UserBundle/Resources/config/validation.xml b/src/Nous/UserBundle/Resources/config/validation.xml | |
index 7e0d7ea..d732806 100644 | |
--- a/src/Nous/UserBundle/Resources/config/validation.xml | |
+++ b/src/Nous/UserBundle/Resources/config/validation.xml | |
@@ -185,4 +185,50 @@ | |
</property> | |
</class> | |
+ <class name="Nous\UserBundle\Api\Resource\NewUser"> | |
+ <property name="password"> | |
+ <constraint name="NotBlank"> | |
+ <option name="message">fos_user.password.blank</option> | |
+ </constraint> | |
+ <constraint name="Length"> | |
+ <option name="min">5</option> | |
+ <option name="max">4096</option> | |
+ <option name="minMessage">fos_user.password.short</option> | |
+ </constraint> | |
+ </property> | |
+ | |
+ <property name="username"> | |
+ <constraint name="Length"> | |
+ <option name="min">3</option> | |
+ <option name="max">255</option> | |
+ <option name="groups"> | |
+ <value>Registration</value> | |
+ <value>Profile</value> | |
+ </option> | |
+ </constraint> | |
+ <constraint name="Regex"> | |
+ <option name="pattern">/^(?![0-9]*$)[a-zA-Z0-9]+$/</option> | |
+ <option name="message">Username can only contain letters and numbers</option> | |
+ <option name="groups"> | |
+ <value>Registration</value> | |
+ <value>Profile</value> | |
+ </option> | |
+ </constraint> | |
+ </property> | |
+ | |
+ <property name="email"> | |
+ <constraint name="NotBlank"> | |
+ <option name="message">account.email.NotBlank</option> | |
+ </constraint> | |
+ <constraint name="Email" /> | |
+ <constraint name="Length"> | |
+ <option name="min">2</option> | |
+ <option name="max">254</option> | |
+ </constraint> | |
+ </property> | |
+ | |
+ <constraint name="Nous\UserBundle\Validator\UsernameIsUnique"/> | |
+ <constraint name="Nous\UserBundle\Validator\EmailIsUnique"/> | |
+ </class> | |
+ | |
</constraint-mapping> | |
diff --git a/src/Nous/UserBundle/Security/Listener/RequestListener.php b/src/Nous/UserBundle/Security/Listener/RequestListener.php | |
index 6fd7d5d..d501e0a 100644 | |
--- a/src/Nous/UserBundle/Security/Listener/RequestListener.php | |
+++ b/src/Nous/UserBundle/Security/Listener/RequestListener.php | |
@@ -14,6 +14,8 @@ use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException, | |
Symfony\Component\Security\Core\Authentication\Token\AnonymousToken | |
; | |
+use FOS\OAuthServerBundle\Security\Authentication\Token\OAuthToken; | |
+ | |
use Nous\UserBundle\Entity\User; | |
class RequestListener | |
@@ -34,11 +36,15 @@ class RequestListener | |
public function onKernelRequest(GetResponseEvent $event) | |
{ | |
- if (!$this->security->getToken() instanceof TokenInterface || $this->security->getToken() instanceof AnonymousToken) { | |
+ if (!$this->security->getToken() instanceof TokenInterface | |
+ || $this->security->getToken() instanceof AnonymousToken | |
+ || $this->security->getToken() instanceof OAuthToken) { | |
+ | |
return; | |
} | |
$user = $this->security->getToken()->getUser(); | |
+ | |
if ($user instanceof User) { | |
if ($user->hasRole(User::ROLE_FACEBOOK)) { | |
$route = 'postregistration_facebook'; | |
diff --git a/src/Nous/UserBundle/Service/CurrentUserService.php b/src/Nous/UserBundle/Service/CurrentUserService.php | |
index 721c866..1e76fce 100644 | |
--- a/src/Nous/UserBundle/Service/CurrentUserService.php | |
+++ b/src/Nous/UserBundle/Service/CurrentUserService.php | |
@@ -87,6 +87,8 @@ class CurrentUserService | |
} | |
public function followsUser(User $user) { | |
+ file_put_contents("/tmp/follow", $user->getId().'--->'.json_encode($this->getFollowedUserIDs())); | |
+ | |
return in_array($user->getId(), $this->getFollowedUserIDs()); | |
} | |
@@ -155,10 +157,7 @@ class CurrentUserService | |
return array(); | |
} | |
if (!is_array($this->followed_users)) { | |
- $follows = $this->follow_repo->getAllFollowingsForUser($this->getUser()); | |
- $this->followed_users = $this->mapArrayOfEntitiesToIDs($follows, function(Follow $follow) { | |
- return $follow->getFollowing()->getId(); | |
- }); | |
+ $this->followed_users = $this->follow_repo->getFollowingIdsForUser($this->getUser()); | |
} | |
return $this->followed_users; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment