| @@ 114-164 (lines=51) @@ | ||
| 111 | { |
|
| 112 | $badgeRepository = $this->get('badger.game.repository.badge'); |
|
| 113 | ||
| 114 | if ('POST' === $request->getMethod()) { |
|
| 115 | $validator = $this->get('validator'); |
|
| 116 | ||
| 117 | $user = $this->get('fos_user.user_manager')->findUserByUsername($request->get('user')); |
|
| 118 | $badge = $badgeRepository->find($request->get('badge')); |
|
| 119 | ||
| 120 | $token = new UsernamePasswordToken($user, 'none', 'none', $user->getRoles()); |
|
| 121 | $isUnlockable = $this->get('security.access.decision_manager')->decide($token, ['view'], $badge); |
|
| 122 | ||
| 123 | if (!$isUnlockable) { |
|
| 124 | $this->addFlash('error', sprintf('%s does not have access to badge "%s"', |
|
| 125 | $user->getUsername(), |
|
| 126 | $badge->getTitle() |
|
| 127 | )); |
|
| 128 | ||
| 129 | return $this->redirectToRoute('admin_unlocked_badge_give'); |
|
| 130 | } |
|
| 131 | ||
| 132 | $isUnlocked = $this->get('badger.game.repository.unlocked_badge') |
|
| 133 | ->findOneBy([ |
|
| 134 | 'user' => $user, |
|
| 135 | 'badge' => $badge |
|
| 136 | ]); |
|
| 137 | ||
| 138 | if ($isUnlocked) { |
|
| 139 | $this->addFlash('error', sprintf('%s already has the badge "%s"', |
|
| 140 | $user->getUsername(), |
|
| 141 | $badge->getTitle() |
|
| 142 | )); |
|
| 143 | ||
| 144 | return $this->redirectToRoute('admin_unlocked_badge_give'); |
|
| 145 | } |
|
| 146 | ||
| 147 | $unlockedBadgeFactory = $this->get('badger.game.unlocked_badge.factory'); |
|
| 148 | $unlockedBadge = $unlockedBadgeFactory->create($user, $badge); |
|
| 149 | ||
| 150 | $errors = $validator->validate($unlockedBadge); |
|
| 151 | ||
| 152 | if (0 === count($errors)) { |
|
| 153 | $unlockedBadgeSaver = $this->get('badger.game.saver.unlocked_badge'); |
|
| 154 | $unlockedBadgeSaver->save($unlockedBadge); |
|
| 155 | ||
| 156 | $this->addFlash('notice', sprintf( |
|
| 157 | '%s successfully received the badge "%s"!', |
|
| 158 | $user->getUsername(), |
|
| 159 | $badge->getTitle() |
|
| 160 | )); |
|
| 161 | } else { |
|
| 162 | $this->addFlash('error', (string) $errors); |
|
| 163 | } |
|
| 164 | } |
|
| 165 | ||
| 166 | $badges = $badgeRepository->findAll(); |
|
| 167 | $usernames = $this->get('badger.user.repository.user')->getAllUsernames(); |
|
| @@ 30-80 (lines=51) @@ | ||
| 27 | { |
|
| 28 | $badgeRepository = $this->get('badger.game.repository.badge'); |
|
| 29 | ||
| 30 | if ('POST' === $request->getMethod()) { |
|
| 31 | $validator = $this->get('validator'); |
|
| 32 | ||
| 33 | $user = $this->container->get('fos_user.user_manager')->findUserByUsername($request->get('user')); |
|
| 34 | $badge = $badgeRepository->findOneById($request->get('badge')); |
|
| 35 | ||
| 36 | $token = new UsernamePasswordToken($user, 'none', 'none', $user->getRoles()); |
|
| 37 | $isUnlockable = $this->get('security.access.decision_manager')->decide($token, ['view'], $badge); |
|
| 38 | ||
| 39 | if (!$isUnlockable) { |
|
| 40 | $this->addFlash('error', sprintf('%s does not have access to badge "%s"', |
|
| 41 | $user->getUsername(), |
|
| 42 | $badge->getTitle() |
|
| 43 | )); |
|
| 44 | ||
| 45 | return $this->redirectToRoute('admin_unlocked_badge_give'); |
|
| 46 | } |
|
| 47 | ||
| 48 | $isUnlocked = $this->get('badger.game.repository.unlocked_badge') |
|
| 49 | ->findOneBy([ |
|
| 50 | 'user' => $user, |
|
| 51 | 'badge' => $badge |
|
| 52 | ]); |
|
| 53 | ||
| 54 | if ($isUnlocked) { |
|
| 55 | $this->addFlash('error', sprintf('%s already has the badge "%s"', |
|
| 56 | $user->getUsername(), |
|
| 57 | $badge->getTitle() |
|
| 58 | )); |
|
| 59 | ||
| 60 | return $this->redirectToRoute('admin_unlocked_badge_give'); |
|
| 61 | } |
|
| 62 | ||
| 63 | $unlockedBadgeFactory = $this->get('badger.game.unlocked_badge.factory'); |
|
| 64 | $unlockedBadge = $unlockedBadgeFactory->create($user, $badge); |
|
| 65 | ||
| 66 | $errors = $validator->validate($unlockedBadge); |
|
| 67 | ||
| 68 | if (0 === count($errors)) { |
|
| 69 | $unlockedBadgeSaver = $this->get('badger.game.saver.unlocked_badge'); |
|
| 70 | $unlockedBadgeSaver->save($unlockedBadge); |
|
| 71 | ||
| 72 | $this->addFlash('notice', sprintf( |
|
| 73 | '%s successfully received the badge "%s"!', |
|
| 74 | $user->getUsername(), |
|
| 75 | $badge->getTitle() |
|
| 76 | )); |
|
| 77 | } else { |
|
| 78 | $this->addFlash('error', (string) $errors); |
|
| 79 | } |
|
| 80 | } |
|
| 81 | ||
| 82 | $badges = $badgeRepository->findAll(); |
|
| 83 | ||