Proyectos de Subversion Moodle

Rev

Rev 284 | Rev 287 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

<?php

require_once(__DIR__ . '/cesa.php');

class StaticsBlocks extends Cesa
{

    public function __construct($title)
    {
        global $USER, $PAGE, $SITE;
        require_login(null, false);

        if (isguestuser()) {
            throw new require_login_exception('Guests are not allowed here.');
        }

        $this->userID = optional_param('userid', $USER->id, PARAM_INT);
        $this->currentUser = $this->userID == $USER->id;
        $this->user = core_user::get_user($this->userID);
        $this->title = get_string($title);
        $this->blockManager = $PAGE->blocks;

        // Definimos varias regiones
        $this->regions = ['side-post'];
        $this->blockNames = ['cesa_course_rating', 'comments', 'messageteacher', 'mynotes'];
        $this->blockExists = true;

        if (!$this->user || !core_user::is_real_user($this->userID)) {
            throw new moodle_exception('invaliduser', 'error');
        }

        // Asignar y validar los bloques en todas las regiones
        foreach ($this->regions as $region) {
            $this->regionName = $region;

            // Añadir la región si no existe
            $this->addRegion($this->regionName);

            // Validar si los bloques existen
            if (!$this->validateIfExistBlocks($this->regionName)) {
                // Añadir bloques si no existen
                $this->addBlocksIfNotExist($this->regionName);
            }
        }
    }

    public function addRegion($region)
    {
        // Validación alternativa: Verificamos si la región está en una lista predefinida de regiones.
        $existingRegions = $this->blockManager->get_regions();

        // Si la región no está presente en las regiones existentes, la añadimos.
        if (!in_array($region, $existingRegions)) {
            $this->blockManager->add_region($region);
        }
    }

    public function validateIfExistBlocks($region)
    {
        // Obtener los bloques de la región actual.
        $blocks = $this->blockManager->get_blocks_for_region($region);

        // Validar si todos los bloques especificados existen en esta región.
        foreach ($this->blockNames as $blockName) {
            $blockFound = false;
            foreach ($blocks as $block) {
                if (get_class($block) == 'block_' . $blockName) {
                    $blockFound = true;
                    break;
                }
            }
            // Si algún bloque no se encuentra, devolvemos false.
            if (!$blockFound) {
                return false;
            }
        }

        // Si todos los bloques existen, devolvemos true.
        return true;
    }

    public function addBlocksIfNotExist($region)
    {
        // Si la variable blockExists es false, intentamos agregar los bloques.
        if (!$this->blockExists) {
            // Obtener los bloques de la región actual.
            $blocks = $this->blockManager->get_blocks_for_region($region);

            // Solo añadimos bloques si no existe ninguno de los especificados en blockNames.
            foreach ($this->blockNames as $blockName) {
                $blockFound = false;

                // Buscar si el bloque ya está presente en la región.
                foreach ($blocks as $block) {
                    if (get_class($block) == 'block_' . $blockName) {
                        $blockFound = true;
                        break;
                    }
                }

                // Si el bloque no está presente, lo añadimos en la región actual.
                if (!$blockFound) {
                    $this->blockManager->add_block($blockName, $region, 1, true);
                }
            }
        }
    }



    public function renderBlocks()
    {
        global $OUTPUT;

        $blocksView = '';
        // Renderizar bloques para cada región
        foreach ($this->regions as $region) {
            $this->regionName = $region;
            $this->blockManager->load_blocks(true); // Cargar bloques en la región
            $blocksView .= $OUTPUT->blocks_for_region($this->regionName); // Renderizar bloques
        }

        return $blocksView; // Devolver bloques renderizados
    }
}



/* // Instanciamos y renderizamos la página con los bloques estáticos
$statics_blocks = new StaticsBlocks();
echo $statics_blocks->renderBlocks(); */