Proyectos de Subversion LeadersLinked - Services

Rev

Rev 828 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
826 stevensc 1
<?php
2
/**
3
 *
4
 * Controlador: Redes (Networks)
5
 *
6
 */
7
declare(strict_types=1);
8
 
9
namespace LeadersLinked\Controller;
10
 
11
use Laminas\Db\Adapter\AdapterInterface;
12
use Laminas\Mvc\Controller\AbstractActionController;
13
use Laminas\Log\LoggerInterface;
14
use Laminas\View\Model\JsonModel;
15
use LeadersLinked\Mapper\NetworkMapper;
16
use LeadersLinked\Model\Network;
17
use LeadersLinked\Library\Functions;
18
use Laminas\Mvc\I18n\Translator;
19
use LeadersLinked\Cache\CacheInterface;
20
use LeadersLinked\Library\Storage;
21
 
22
class NetworkController extends AbstractActionController
23
{
24
    /**
25
     *
26
     * @var \Laminas\Db\Adapter\AdapterInterface
27
     */
28
    private $adapter;
29
 
30
    /**
31
     *
32
     * @var \LeadersLinked\Cache\CacheInterface
33
     */
34
    private $cache;
35
 
36
    /**
37
     *
38
     * @var \Laminas\Log\LoggerInterface
39
     */
40
    private $logger;
41
 
42
    /**
43
     *
44
     * @var array
45
     */
46
    private $config;
47
 
48
    /**
49
     *
50
     * @var \Laminas\Mvc\I18n\Translator
51
     */
52
    private $translator;
53
 
54
    /**
55
     *
56
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
57
     * @param \LeadersLinked\Cache\CacheInterface $cache
58
     * @param \Laminas\Log\LoggerInterface $logger
59
     * @param array $config
60
     * @param \Laminas\Mvc\I18n\Translator $translator
61
     */
62
    public function __construct($adapter, $cache, $logger, $config, $translator)
63
    {
64
        $this->adapter      = $adapter;
65
        $this->cache        = $cache;
66
        $this->logger       = $logger;
67
        $this->config       = $config;
68
        $this->translator   = $translator;
69
    }
70
 
71
    /**
72
     * Acción por defecto - no permitida
73
     */
74
    public function indexAction()
75
    {
76
        return new JsonModel([
77
            'success' => false,
78
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
79
        ]);
80
    }
81
 
82
    /**
83
     * Obtiene la información de una red específica
84
     */
85
    public function viewAction()
86
    {
87
        $request = $this->getRequest();
88
 
89
        if (!$request->isGet()) {
90
            return new JsonModel([
91
                'success' => false,
92
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
93
            ]);
94
        }
95
 
96
        $id = $this->params()->fromRoute('id');
97
        if (!$id) {
98
            return new JsonModel([
99
                'success' => false,
100
                'data' => 'ERROR_INVALID_PARAMETER'
101
            ]);
102
        }
103
 
104
        $networkMapper = NetworkMapper::getInstance($this->adapter);
105
        $network = $networkMapper->fetchOneByUuid($id);
106
 
107
        if (!$network) {
108
            return new JsonModel([
109
                'success' => false,
110
                'data' => 'ERROR_NETWORK_NOT_FOUND'
111
            ]);
112
        }
113
 
114
        if ($network->status != Network::STATUS_ACTIVE) {
115
            return new JsonModel([
116
                'success' => false,
117
                'data' => 'ERROR_NETWORK_IS_NOT_ACTIVE'
118
            ]);
119
        }
120
 
121
        $storage = Storage::getInstance($this->config, $this->adapter);
122
 
123
        $data = [
124
            'network_id' => $network->id,
125
            'network_uuid' => $network->uuid,
126
            'name' => $network->name,
127
            'main_hostname' => $network->main_hostname,
128
            'alternative_hostname' => $network->alternative_hostname,
129
            'admin_hostname' => $network->admin_hostname,
130
            'service_hostname' => $network->service_hostname,
131
            'status' => $network->status,
132
            'default' => $network->default,
133
            'theme_id' => $network->theme_id,
134
            'relationship_user_mode' => $network->relationship_user_mode,
135
            'moodle_name' => $network->moodle_name,
136
            'moodle_url' => $network->moodle_url,
137
            'moodle_image' => $storage->getNetworkImage($network),
138
            'microlearning_name' => $network->microlearning_name,
139
            'microlearning_appstore' => $network->microlearning_appstore,
140
            'microlearning_playstore' => $network->microlearning_playstore,
141
            'logo' => $storage->getNetworkLogo($network),
142
            'favico' => $storage->getNetworkFavico($network),
143
            'navbar' => $network->navbar,
144
            'intro' => $network->intro,
145
            'css_bg_color' => $network->css_bg_color,
146
            'css_body_bg_color' => $network->css_body_bg_color,
147
            'css_bg_color_secondary' => $network->css_bg_color_secondary,
148
            'css_font_color' => $network->css_font_color,
149
            'css_font_color_hover' => $network->css_font_color_hover,
150
            'css_title_color' => $network->css_title_color,
151
            'css_subtitle_color' => $network->css_subtitle_color,
152
            'css_icons_color' => $network->css_icons_color,
153
            'css_button_bg' => $network->css_button_bg,
154
            'css_button_bg_hover' => $network->css_button_bg_hover,
155
            'css_button_text_color' => $network->css_button_text_color,
156
            'css_button_bg_secondary' => $network->css_button_bg_secondary,
157
            'css_button_bg_secondary_hover' => $network->css_button_bg_secondary_hover,
158
            'css_button_text_color_secondary' => $network->css_button_text_color_secondary,
159
            'css_button_bg_tertiary' => $network->css_button_bg_tertiary,
160
            'css_button_text_color_tertiary' => $network->css_button_text_color_tertiary,
161
            'css_border_primary' => $network->css_border_primary,
162
            'css_border_trasnparent' => $network->css_border_trasnparent,
163
            'css_chat_received' => $network->css_chat_received,
164
            'css_chat_send' => $network->css_chat_send,
165
            'css_chat_color' => $network->css_chat_color,
166
            'css_light_gray' => $network->css_light_gray,
167
            'css_gray' => $network->css_gray,
168
            'css_danger' => $network->css_danger,
169
            'css_danger_hover' => $network->css_danger_hover,
170
            'css_online_green' => $network->css_online_green,
171
            'css_border_gray_primary' => $network->css_border_gray_primary,
172
            'css_white' => $network->css_white,
173
            'css_white_backdrop' => $network->css_white_backdrop,
174
            'css_border_radius' => $network->css_border_radius,
175
            'css_light_shadow' => $network->css_light_shadow,
176
            'css_shadow' => $network->css_shadow,
177
            'xmpp_active' => $network->xmpp_active,
178
            'xmpp_domain' => $network->xmpp_domain,
179
            'xmpp_hostname' => $network->xmpp_hostname,
180
            'xmpp_port' => $network->xmpp_port,
181
            'xmpp_admin_port' => $network->xmpp_admin_port,
182
            'inmail_domain' => $network->inmail_domain,
183
            'added_on' => $network->added_on,
184
            'updated_on' => $network->updated_on
185
        ];
186
 
187
        return new JsonModel([
188
            'success' => true,
189
            'data' => $data
190
        ]);
191
    }
192
 
193
    /**
194
     * Lista todas las redes activas
195
     */
196
    public function listAction()
197
    {
198
        $request = $this->getRequest();
199
 
200
        if (!$request->isGet()) {
201
            return new JsonModel([
202
                'success' => false,
203
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
204
            ]);
205
        }
206
 
207
        $search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));
208
        $page = (int) $this->params()->fromQuery('page', 1);
209
        $recordsPerPage = (int) $this->params()->fromQuery('records_per_page', 10);
210
        $orderField = Functions::sanitizeFilterString($this->params()->fromQuery('order_field', 'name'));
211
        $orderDirection = Functions::sanitizeFilterString($this->params()->fromQuery('order_direction', 'ASC'));
212
 
213
        $networkMapper = NetworkMapper::getInstance($this->adapter);
214
        $paginator = $networkMapper->fetchAllDataTable($search, $page, $recordsPerPage, $orderField, $orderDirection);
215
 
216
        $storage = Storage::getInstance($this->config, $this->adapter);
217
 
218
        $items = [];
219
        foreach ($paginator as $network) {
220
            $items[] = [
221
                'network_id' => $network->id,
222
                'network_uuid' => $network->uuid,
223
                'name' => $network->name,
224
                'main_hostname' => $network->main_hostname,
225
                'admin_hostname' => $network->admin_hostname,
226
                'status' => $network->status,
227
                'default' => $network->default,
228
                'logo' => $storage->getNetworkLogo($network),
229
                'link_view' => $this->url()->fromRoute('network/view', ['id' => $network->uuid])
230
            ];
231
        }
232
 
233
        return new JsonModel([
234
            'success' => true,
235
            'data' => [
236
                'items' => $items,
237
                'total_count' => $paginator->getTotalItemCount(),
238
                'current_page' => $paginator->getCurrentPageNumber(),
239
                'total_pages' => $paginator->count(),
240
                'items_per_page' => $paginator->getItemCountPerPage()
241
            ]
242
        ]);
243
    }
244
 
245
    /**
246
     * Obtiene la red por defecto
247
     */
248
    public function defaultAction()
249
    {
250
        $request = $this->getRequest();
251
 
252
        if (!$request->isGet()) {
253
            return new JsonModel([
254
                'success' => false,
255
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
256
            ]);
257
        }
258
 
259
        $networkMapper = NetworkMapper::getInstance($this->adapter);
260
        $network = $networkMapper->fetchOneByDefault();
261
 
262
        if (!$network) {
263
            return new JsonModel([
264
                'success' => false,
265
                'data' => 'ERROR_NO_DEFAULT_NETWORK_FOUND'
266
            ]);
267
        }
268
 
269
        $storage = Storage::getInstance($this->config, $this->adapter);
270
 
271
        $data = [
272
            'network_id' => $network->id,
273
            'network_uuid' => $network->uuid,
274
            'name' => $network->name,
275
            'main_hostname' => $network->main_hostname,
276
            'alternative_hostname' => $network->alternative_hostname,
277
            'admin_hostname' => $network->admin_hostname,
278
            'service_hostname' => $network->service_hostname,
279
            'status' => $network->status,
280
            'default' => $network->default,
281
            'theme_id' => $network->theme_id,
282
            'relationship_user_mode' => $network->relationship_user_mode,
283
            'moodle_name' => $network->moodle_name,
284
            'moodle_url' => $network->moodle_url,
285
            'moodle_image' => $storage->getNetworkImage($network),
286
            'microlearning_name' => $network->microlearning_name,
287
            'microlearning_appstore' => $network->microlearning_appstore,
288
            'microlearning_playstore' => $network->microlearning_playstore,
289
            'logo' => $storage->getNetworkLogo($network),
290
            'favico' => $storage->getNetworkFavico($network),
291
            'navbar' => $network->navbar,
292
            'intro' => $network->intro
293
        ];
294
 
295
        return new JsonModel([
296
            'success' => true,
297
            'data' => $data
298
        ]);
299
    }
300
 
301
    /**
302
     * Busca una red por hostname
303
     */
304
    public function findByHostnameAction()
305
    {
306
        $request = $this->getRequest();
307
 
308
        if (!$request->isGet()) {
309
            return new JsonModel([
310
                'success' => false,
311
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
312
            ]);
313
        }
314
 
315
        $hostname = Functions::sanitizeFilterString($this->params()->fromQuery('hostname', ''));
316
        if (!$hostname) {
317
            return new JsonModel([
318
                'success' => false,
319
                'data' => 'ERROR_INVALID_PARAMETER'
320
            ]);
321
        }
322
 
323
        $networkMapper = NetworkMapper::getInstance($this->adapter);
324
        $network = $networkMapper->fetchOneByHostnameForFrontend($hostname);
325
 
326
        if (!$network) {
327
            return new JsonModel([
328
                'success' => false,
329
                'data' => 'ERROR_NETWORK_NOT_FOUND'
330
            ]);
331
        }
332
 
333
        $storage = Storage::getInstance($this->config, $this->adapter);
334
 
335
        $data = [
336
            'network_id' => $network->id,
337
            'network_uuid' => $network->uuid,
338
            'name' => $network->name,
339
            'main_hostname' => $network->main_hostname,
340
            'alternative_hostname' => $network->alternative_hostname,
341
            'admin_hostname' => $network->admin_hostname,
342
            'service_hostname' => $network->service_hostname,
343
            'status' => $network->status,
344
            'default' => $network->default,
345
            'theme_id' => $network->theme_id,
346
            'relationship_user_mode' => $network->relationship_user_mode,
347
            'logo' => $storage->getNetworkLogo($network),
348
            'favico' => $storage->getNetworkFavico($network),
349
            'navbar' => $network->navbar,
350
            'intro' => $network->intro
351
        ];
352
 
353
        return new JsonModel([
354
            'success' => true,
355
            'data' => $data
356
        ]);
357
    }
358
 
359
    /**
360
     * Obtiene solo los estilos CSS de una red específica
361
     */
362
    public function getNetworkStylesAction()
363
    {
364
        $request = $this->getRequest();
365
 
366
        if (!$request->isGet()) {
367
            return new JsonModel([
368
                'success' => false,
369
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
370
            ]);
371
        }
372
 
827 stevensc 373
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
374
        $network = $currentNetworkPlugin->getNetwork();
826 stevensc 375
 
376
        if (!$network) {
377
            return new JsonModel([
378
                'success' => false,
379
                'data' => 'ERROR_NETWORK_NOT_FOUND'
380
            ]);
381
        }
382
 
383
        if ($network->status != Network::STATUS_ACTIVE) {
384
            return new JsonModel([
385
                'success' => false,
386
                'data' => 'ERROR_NETWORK_IS_NOT_ACTIVE'
387
            ]);
388
        }
389
 
390
        $styles = [
828 stevensc 391
            'bg_color' => $network->css_bg_color,
392
            'body_bg_color' => $network->css_body_bg_color,
393
            'bg_color_secondary' => $network->css_bg_color_secondary,
394
            'font_color' => $network->css_font_color,
395
            'font_color_hover' => $network->css_font_color_hover,
396
            'title_color' => $network->css_title_color,
397
            'subtitle_color' => $network->css_subtitle_color,
398
            'icons_color' => $network->css_icons_color,
399
            'button_bg' => $network->css_button_bg,
400
            'button_bg_hover' => $network->css_button_bg_hover,
401
            'button_text_color' => $network->css_button_text_color,
402
            'button_bg_secondary' => $network->css_button_bg_secondary,
403
            'button_bg_secondary_hover' => $network->css_button_bg_secondary_hover,
404
            'button_text_color_secondary' => $network->css_button_text_color_secondary,
405
            'button_bg_tertiary' => $network->css_button_bg_tertiary,
406
            'button_text_color_tertiary' => $network->css_button_text_color_tertiary,
407
            'border_primary' => $network->css_border_primary,
408
            'border_trasnparent' => $network->css_border_trasnparent,
409
            'chat_received' => $network->css_chat_received,
410
            'chat_send' => $network->css_chat_send,
411
            'chat_color' => $network->css_chat_color,
412
            'light_gray' => $network->css_light_gray,
413
            'gray' => $network->css_gray,
414
            'danger' => $network->css_danger,
415
            'danger_hover' => $network->css_danger_hover,
416
            'online_green' => $network->css_online_green,
417
            'border_gray_primary' => $network->css_border_gray_primary,
418
            'white' => $network->css_white,
419
            'white_backdrop' => $network->css_white_backdrop,
420
            'border_radius' => $network->css_border_radius,
421
            'light_shadow' => $network->css_light_shadow,
829 stevensc 422
            'shadow' => $network->css_shadow
826 stevensc 423
        ];
424
 
425
        return new JsonModel([
426
            'success' => true,
427
            'data' => $styles
428
        ]);
429
    }
430
}