AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>./*** Helper class for creating block instance content.** @package block_dash* @copyright 2019 bdecent gmbh <https://bdecent.de>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/namespace block_dash\local;use block_dash\local\configuration\configuration_interface;use block_dash\local\configuration\configuration;use block_dash\output\query_debug;use block_dash\output\renderer;use html_writer;/*** Helper class for creating block instance content.** @package block_dash*/class block_builder {/*** @var configuration_interface*/private $configuration;/*** @var \block_base*/private $blockinstance;/*** block_builder constructor.** @param \block_base $blockinstance* @throws \coding_exception*/protected function __construct(\block_base $blockinstance) {$this->blockinstance = $blockinstance;$this->configuration = configuration::create_from_instance($blockinstance);}/*** Get configuration.** @return configuration_interface*/public function get_configuration() {return $this->configuration;}/*** Verify the datasource is collapsible addon.** @param bool $checksection* @return bool*/public function is_collapsible_content_addon($checksection = false) {if ($this->blockinstance->page->course->id != SITEID) {$format = course_get_format($this->blockinstance->page->course->id);$course = $format->get_course();if (isset($this->blockinstance->config->data_source_idnumber) && $this->blockinstance->page->user_is_editing() &&$this->blockinstance->config->data_source_idnumber == 'dashaddon_content\local\block_dash\content_customtype') {return true;}}return false;}/*** Confirm the block is configured to display only for the section.** @return bool*/public function is_section_expand_content_addon() {if ($this->is_collapsible_content_addon()) {$currentsection = optional_param('section', 0, PARAM_INT);if (isset($this->blockinstance->config->preferences)) {$preferneces = $this->blockinstance->config->preferences;if (isset($preferneces['filters'])) {$restrictedsections = isset($preferneces['filters']['sectiondisplay']['sections']) ?$preferneces['filters']['sectiondisplay']['sections'] : [];if (in_array((int)$currentsection, $restrictedsections)) {return true;}}}}return false;}/*** Get content object for block instance.** @return \stdClass* @throws \coding_exception* @throws \moodle_exception*/public function get_block_content() {global $OUTPUT, $CFG;/** @var renderer $renderer */$renderer = $this->blockinstance->page->get_renderer('block_dash');$text = '';$editing = ($this->blockinstance->page->user_is_editing() &&has_capability('block/dash:addinstance', $this->blockinstance->context));$data = ['block_instance_id' => $this->blockinstance->instance->id,'block_context_id' => $this->blockinstance->context->id,'editing' => $editing,'istotara' => block_dash_is_totara(),'pagelayout' => $this->blockinstance->page->pagelayout,'pagecontext' => $this->blockinstance->page->context->id,'collapseaction' => $this->is_collapsible_content_addon(),'showcollapseblock' => $this->is_section_expand_content_addon(),];if ($this->configuration->is_fully_configured()) {$bb = self::create($this->blockinstance);$supportsdebug = false;$prefernece = true;$bb->get_configuration()->get_data_source()->get_paginator()->set_current_page(0);if ($bb->get_configuration()->get_data_source()->is_widget()) {$source = $bb->get_configuration()->get_data_source();$preload = $renderer->render_data_source($source);} else {$supportsdebug = true;$source = $bb->get_configuration()->get_data_source();$preload = $renderer->render_data_source($source);}$editing = ($this->blockinstance->page->user_is_editing() &&has_capability('block/dash:addinstance', $this->blockinstance->context) && $prefernece);$data += ['preloaded' => $preload,'editing' => $editing,];if (isset($this->blockinstance->config->header_content)) {$data['header_content'] = format_text($this->blockinstance->config->header_content['text'],$this->blockinstance->config->header_content['format'], ['noclean' => true]);}if (isset($this->blockinstance->config->footer_content)) {$data['footer_content'] = format_text($this->blockinstance->config->footer_content['text'],$this->blockinstance->config->footer_content['format'], ['noclean' => true]);}$source->update_data_before_render($data);$text .= $OUTPUT->render_from_template('block_dash/block', $data);if (is_siteadmin() && $supportsdebug && $CFG->debug > 0) {[$sql, $params] = $bb->get_configuration()->get_data_source()->get_query()->get_sql_and_params();$text .= $renderer->render(new query_debug($sql, $params));}} else {// @codingStandardsIgnoreStart// Ignore the phplint due to block class not allowed to include the PAGE global variable.if ($this->blockinstance->page->user_is_editing()) {// @codingStandardsIgnoreEndrequire_once($CFG->dirroot.'/blocks/edit_form.php');require_once($CFG->dirroot.'/blocks/dash/edit_form.php');$form = new \block_dash_featuresform(null, ['block' => $this->blockinstance->context]);$desc = html_writer::tag('p', get_string('choosefeature', 'block_dash'));$data['preloaded'] = html_writer::tag('div',$desc.$form->render(), ['class' => 'dash-configuration-form hide']);$text .= $OUTPUT->render_from_template('block_dash/block', $data);} else {$text .= \html_writer::tag('p', get_string('editthisblock', 'block_dash'));}}$content = new \stdClass();$content->text = $text;return $content;}/*** Create block builder.** @param \block_base $blockinstance* @return block_builder* @throws \coding_exception*/public static function create(\block_base $blockinstance) {return new block_builder($blockinstance);}}