| 177 |
ariadna |
1 |
<?php
|
| 279 |
ariadna |
2 |
|
| 177 |
ariadna |
3 |
require_once(__DIR__ . '/cesa.php');
|
| 183 |
ariadna |
4 |
|
| 177 |
ariadna |
5 |
class StaticsBlocks extends Cesa
|
|
|
6 |
{
|
| 261 |
ariadna |
7 |
|
| 254 |
ariadna |
8 |
public function __construct($title)
|
| 177 |
ariadna |
9 |
{
|
| 255 |
ariadna |
10 |
global $USER, $PAGE, $SITE;
|
|
|
11 |
require_login(null, false);
|
|
|
12 |
|
|
|
13 |
if (isguestuser()) {
|
|
|
14 |
throw new require_login_exception('Guests are not allowed here.');
|
|
|
15 |
}
|
|
|
16 |
|
|
|
17 |
$this->userID = optional_param('userid', $USER->id, PARAM_INT);
|
|
|
18 |
$this->currentUser = $this->userID == $USER->id;
|
|
|
19 |
$this->user = core_user::get_user($this->userID);
|
|
|
20 |
$this->title = get_string($title);
|
|
|
21 |
$this->blockManager = $PAGE->blocks;
|
| 261 |
ariadna |
22 |
|
|
|
23 |
// Definimos varias regiones
|
| 289 |
ariadna |
24 |
$this->regions = ['side-post', 'side-pre', 'bellow-content', 'right'];
|
| 271 |
ariadna |
25 |
$this->blockNames = ['cesa_course_rating', 'comments', 'messageteacher', 'mynotes'];
|
| 255 |
ariadna |
26 |
$this->blockExists = true;
|
|
|
27 |
|
|
|
28 |
if (!$this->user || !core_user::is_real_user($this->userID)) {
|
|
|
29 |
throw new moodle_exception('invaliduser', 'error');
|
|
|
30 |
}
|
| 261 |
ariadna |
31 |
|
| 264 |
ariadna |
32 |
// Asignar y validar los bloques en todas las regiones
|
|
|
33 |
foreach ($this->regions as $region) {
|
|
|
34 |
$this->regionName = $region;
|
| 279 |
ariadna |
35 |
|
|
|
36 |
// Añadir la región si no existe
|
|
|
37 |
$this->addRegion($this->regionName);
|
|
|
38 |
|
|
|
39 |
// Validar si los bloques existen
|
|
|
40 |
if (!$this->validateIfExistBlocks($this->regionName)) {
|
|
|
41 |
// Añadir bloques si no existen
|
|
|
42 |
$this->addBlocksIfNotExist($this->regionName);
|
|
|
43 |
}
|
| 261 |
ariadna |
44 |
}
|
| 177 |
ariadna |
45 |
}
|
|
|
46 |
|
| 286 |
ariadna |
47 |
public function addRegion($region)
|
|
|
48 |
{
|
|
|
49 |
// Validación alternativa: Verificamos si la región está en una lista predefinida de regiones.
|
|
|
50 |
$existingRegions = $this->blockManager->get_regions();
|
|
|
51 |
|
|
|
52 |
// Si la región no está presente en las regiones existentes, la añadimos.
|
|
|
53 |
if (!in_array($region, $existingRegions)) {
|
|
|
54 |
$this->blockManager->add_region($region);
|
|
|
55 |
}
|
|
|
56 |
}
|
|
|
57 |
|
| 288 |
ariadna |
58 |
public function validateIfExistBlocks($region)
|
|
|
59 |
{
|
|
|
60 |
// Obtener los bloques de la región actual.
|
|
|
61 |
$blocks = $this->blockManager->get_blocks_for_region($region);
|
| 279 |
ariadna |
62 |
|
| 289 |
ariadna |
63 |
// Crear un array para llevar el registro de los bloques encontrados.
|
|
|
64 |
$foundBlocks = [];
|
|
|
65 |
|
|
|
66 |
// Validar si todos los bloques especificados existen en esta región y que no se repitan.
|
|
|
67 |
foreach ($blocks as $block) {
|
|
|
68 |
$blockClass = get_class($block);
|
|
|
69 |
if (in_array($blockClass, $foundBlocks)) {
|
|
|
70 |
// Si el bloque ya fue encontrado antes, devolvemos false.
|
|
|
71 |
return false;
|
|
|
72 |
}
|
|
|
73 |
$foundBlocks[] = $blockClass;
|
|
|
74 |
}
|
|
|
75 |
|
|
|
76 |
// Verificar si todos los bloques especificados están en la región.
|
| 288 |
ariadna |
77 |
foreach ($this->blockNames as $blockName) {
|
| 289 |
ariadna |
78 |
$expectedBlockClass = 'block_' . $blockName;
|
|
|
79 |
if (!in_array($expectedBlockClass, $foundBlocks)) {
|
|
|
80 |
// Si algún bloque esperado no se encuentra, devolvemos false.
|
| 288 |
ariadna |
81 |
return false;
|
|
|
82 |
}
|
|
|
83 |
}
|
| 279 |
ariadna |
84 |
|
| 289 |
ariadna |
85 |
// Si todos los bloques existen y son únicos, devolvemos true.
|
| 288 |
ariadna |
86 |
return true;
|
|
|
87 |
}
|
|
|
88 |
|
|
|
89 |
|
| 269 |
ariadna |
90 |
public function renderBlocks()
|
|
|
91 |
{
|
|
|
92 |
global $OUTPUT;
|
|
|
93 |
|
|
|
94 |
$blocksView = '';
|
|
|
95 |
// Renderizar bloques para cada región
|
|
|
96 |
foreach ($this->regions as $region) {
|
|
|
97 |
$this->regionName = $region;
|
|
|
98 |
$this->blockManager->load_blocks(true); // Cargar bloques en la región
|
|
|
99 |
$blocksView .= $OUTPUT->blocks_for_region($this->regionName); // Renderizar bloques
|
|
|
100 |
}
|
|
|
101 |
|
|
|
102 |
return $blocksView; // Devolver bloques renderizados
|
|
|
103 |
}
|
| 177 |
ariadna |
104 |
}
|
|
|
105 |
|
| 269 |
ariadna |
106 |
|
|
|
107 |
|
| 193 |
ariadna |
108 |
/* // Instanciamos y renderizamos la página con los bloques estáticos
|
| 177 |
ariadna |
109 |
$statics_blocks = new StaticsBlocks();
|
| 193 |
ariadna |
110 |
echo $statics_blocks->renderBlocks(); */
|