Passed
Push — master ( ce2bc1...e68e02 )
by Fran
05:34
created

UserController::deleteUsers()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 2
nop 0
dl 0
loc 9
ccs 0
cts 7
cp 0
crap 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace PSFS\controller;
4
5
use PSFS\base\config\AdminForm;
6
use PSFS\base\exception\ApiException;
7
use PSFS\base\exception\ConfigException;
8
use PSFS\base\Logger;
9
use PSFS\base\Request;
10
use PSFS\base\Router;
11
use PSFS\base\Security;
12
use PSFS\base\Template;
13
use PSFS\base\types\traits\Security\ProfileTrait;
14
use PSFS\controller\base\Admin;
15
use PSFS\services\AdminServices;
16
17
/**
18
 * Class UserController
19
 * @package PSFS\controller
20
 */
21
class UserController extends Admin
22
{
23
    /**
24
     * @return string
25
     * @throws \PSFS\base\exception\GeneratorException
26
     */
27
    public static function showAdminManager()
28
    {
29
        if (Request::getInstance()->getMethod() != 'GET') {
30
            return self::updateAdminUsers();
31
        }
32
        $admins = AdminServices::getInstance()->getAdmins();
33
        $form = new AdminForm();
34
        $form->build();
35
        return Template::getInstance()->render('admin.html.twig', array(
36
            'admins' => $admins,
37
            'form' => $form,
38
            'profiles' => Security::getProfiles(),
39
        ));
40
    }
41
42
    /**
43
     * Método que gestiona los usuarios administradores de la plataforma
44
     * @GET
45
     * @route /admin/setup
46
     * @icon fa-users
47
     * @label Gestor de usuarios PSFS
48
     * @return string|null
49
     */
50
    public function adminers()
51
    {
52
        return self::showAdminManager();
53
    }
54
55
    /**
56
     * @return string
57
     * @throws \PSFS\base\exception\GeneratorException
58
     */
59
    public static function updateAdminUsers()
60
    {
61
        $admins = AdminServices::getInstance()->getAdmins();
62
        $form = new AdminForm();
63
        $form->build();
64
        $form->hydrate();
65
        if ($form->isValid()) {
66
            if (Security::save($form->getData())) {
67
                Logger::log('Configuration saved successful');
68
                Security::getInstance()->setFlash("callback_message", t("Usuario agregado correctamente"));
69
                Security::getInstance()->setFlash("callback_route", Router::getInstance()->getRoute("admin", true));
70
            } else {
71
                throw new ConfigException(t('Error al guardar los administradores, prueba a cambiar los permisos'));
72
            }
73
        }
74
        return Template::getInstance()->render('admin.html.twig', array(
75
            'admins' => $admins,
76
            'form' => $form,
77
            'profiles' => Security::getProfiles(),
78
        ));
79
    }
80
81
    /**
82
     * Servicio que guarda los usuarios de administración
83
     * @POST
84
     * @route /admin/setup
85
     * @visible false
86
     * @return string|void
87
     */
88
    public function setAdminUsers()
89
    {
90
        return self::updateAdminUsers();
91
    }
92
93
    /**
94
     * Acción que pinta un formulario genérico de login pra la zona restringida
95
     * @GET
96
     * @route /admin/login
97
     * @visible false
98
     * @return string HTML
99
     */
100
    public function adminLogin()
101
    {
102
        if ($this->isAdmin()) {
103
            $this->redirect('admin');
104
        } else {
105
            return Admin::staticAdminLogon();
106
        }
107
    }
108
109
    /**
110
     * Delete PSFS admin users
111
     * @PUT
112
     * @route /admin/setup
113
     */
114
    public function deleteUsers()
115
    {
116
        $data = Request::getInstance()->getData();
117
        $username = $data['user'] ?? null;
118
        if (empty($username)) {
119
            throw new ApiException(t('No se ha indicado el usuario a eliminar'), 400);
120
        }
121
        Security::getInstance()->deleteUser($username);
122
        return $this->json('OK');
123
    }
124
}
125