mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-16 06:23:18 +00:00
Merge pull request #1671 from bburnichon/admin-management-PHRAS-949
Demote Admin users on request
This commit is contained in:
@@ -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);
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -25,7 +25,7 @@ class UserRepository extends EntityRepository
|
|||||||
/**
|
/**
|
||||||
* Finds admins.
|
* Finds admins.
|
||||||
*
|
*
|
||||||
* @return array
|
* @return User[]
|
||||||
*/
|
*/
|
||||||
public function findAdmins()
|
public function findAdmins()
|
||||||
{
|
{
|
||||||
|
@@ -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>
|
||||||
|
Reference in New Issue
Block a user