Merge pull request #1671 from bburnichon/admin-management-PHRAS-949

Demote Admin users on request
This commit is contained in:
Thibaud Fabre
2016-02-09 13:44:32 +01:00
4 changed files with 21 additions and 7 deletions

View File

@@ -124,6 +124,10 @@ class DashboardController extends Controller
public function addAdmins(Request $request) public function addAdmins(Request $request)
{ {
$admins = $request->request->get('admins', []); $admins = $request->request->get('admins', []);
// Remove empty values
$admins = array_filter($admins);
if (!is_array($admins) || count($admins) === 0) { if (!is_array($admins) || count($admins) === 0) {
$this->app->abort(400, '"admins" parameter must contains at least one value.'); $this->app->abort(400, '"admins" parameter must contains at least one value.');
} }
@@ -134,6 +138,15 @@ class DashboardController extends Controller
} }
$userRepository = $this->getUserRepository(); $userRepository = $this->getUserRepository();
$demotedAdmins = [];
foreach ($userRepository->findAdmins() as $admin) {
if (!in_array($admin->getId(), $admins)) {
$demotedAdmins[$admin->getId()] = $admin;
}
}
$userRepository->findBy(['id' => $admins]); $userRepository->findBy(['id' => $admins]);
$admins = array_map(function ($usrId) use ($userRepository) { $admins = array_map(function ($usrId) use ($userRepository) {
if (null === $user = $userRepository->find($usrId)) { if (null === $user = $userRepository->find($usrId)) {
@@ -145,7 +158,10 @@ class DashboardController extends Controller
/** @var UserManipulator $userManipulator */ /** @var UserManipulator $userManipulator */
$userManipulator = $this->app['manipulator.user']; $userManipulator = $this->app['manipulator.user'];
$userManipulator->demote($demotedAdmins);
$userManipulator->promote($admins); $userManipulator->promote($admins);
/** @var ACLManipulator $aclManipulator */ /** @var ACLManipulator $aclManipulator */
$aclManipulator = $this->app['manipulator.acl']; $aclManipulator = $this->app['manipulator.acl'];
$aclManipulator->resetAdminRights($admins); $aclManipulator->resetAdminRights($admins);

View File

@@ -347,9 +347,9 @@ class UserManipulator implements ManipulatorInterface
/** /**
* Makes given variable traversable. * Makes given variable traversable.
* *
* @param mixed $var * @param User|User[] $var
* *
* @return array * @return array|\Traversable|User[]
*/ */
private function makeTraversable($var) private function makeTraversable($var)
{ {

View File

@@ -25,7 +25,7 @@ class UserRepository extends EntityRepository
/** /**
* Finds admins. * Finds admins.
* *
* @return array * @return User[]
*/ */
public function findAdmins() public function findAdmins()
{ {

View File

@@ -106,11 +106,9 @@
</label> </label>
</li> </li>
{% endfor %} {% endfor %}
</ul>
<div class="input-append" style="margin-left:20px">
<input class="admin_adder input-large" placeholder="{{ 'Add an admin' | trans }}"/> <input class="admin_adder input-large" placeholder="{{ 'Add an admin' | trans }}"/>
<input type="submit" class="btn btn-warning" value="{{ 'boutton::valider' | trans }}" /> </ul>
</div> <input type="submit" class="btn btn-warning" value="{{ 'boutton::valider' | trans }}" />
<input type="hidden" class="new" name="admins[]" /> <input type="hidden" class="new" name="admins[]" />
</fieldset> </fieldset>
</form> </form>