| 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
|
| 271 |
ariadna |
24 |
$this->regions = ['side-post'];
|
|
|
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 |
|
| 288 |
ariadna |
63 |
// Validar si todos los bloques especificados existen en esta región.
|
|
|
64 |
foreach ($this->blockNames as $blockName) {
|
|
|
65 |
$blockFound = false;
|
|
|
66 |
foreach ($blocks as $block) {
|
|
|
67 |
if (get_class($block) == 'block_' . $blockName) {
|
|
|
68 |
$blockFound = true;
|
|
|
69 |
break;
|
|
|
70 |
}
|
|
|
71 |
}
|
|
|
72 |
// Si algún bloque no se encuentra, devolvemos false.
|
|
|
73 |
if (!$blockFound) {
|
|
|
74 |
return false;
|
|
|
75 |
}
|
|
|
76 |
}
|
| 279 |
ariadna |
77 |
|
| 288 |
ariadna |
78 |
// Si todos los bloques existen, devolvemos true.
|
|
|
79 |
return true;
|
|
|
80 |
}
|
|
|
81 |
|
|
|
82 |
|
| 269 |
ariadna |
83 |
public function renderBlocks()
|
|
|
84 |
{
|
|
|
85 |
global $OUTPUT;
|
|
|
86 |
|
|
|
87 |
$blocksView = '';
|
|
|
88 |
// Renderizar bloques para cada región
|
|
|
89 |
foreach ($this->regions as $region) {
|
|
|
90 |
$this->regionName = $region;
|
|
|
91 |
$this->blockManager->load_blocks(true); // Cargar bloques en la región
|
|
|
92 |
$blocksView .= $OUTPUT->blocks_for_region($this->regionName); // Renderizar bloques
|
|
|
93 |
}
|
|
|
94 |
|
|
|
95 |
return $blocksView; // Devolver bloques renderizados
|
|
|
96 |
}
|
| 177 |
ariadna |
97 |
}
|
|
|
98 |
|
| 269 |
ariadna |
99 |
|
|
|
100 |
|
| 193 |
ariadna |
101 |
/* // Instanciamos y renderizamos la página con los bloques estáticos
|
| 177 |
ariadna |
102 |
$statics_blocks = new StaticsBlocks();
|
| 193 |
ariadna |
103 |
echo $statics_blocks->renderBlocks(); */
|