Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.
<?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/>.

declare(strict_types=1);

namespace core_reportbuilder\form;

use context;
use moodle_url;
use core_form\dynamic_form;
use core_reportbuilder\manager;
use core_reportbuilder\permission;
use core_reportbuilder\local\report\base;
< use core_reportbuilder\local\models\filter;
use core_reportbuilder\local\models\report; /** * Dynamic condition form * * @package core_reportbuilder * @copyright 2021 Paul Holden <paulh@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class condition extends dynamic_form { /** * Return instance of the report using the condition form * * @return base */ private function get_report(): base { $report = new report($this->optional_param('reportid', 0, PARAM_INT)); $parameters = (array) json_decode($this->optional_param('parameters', '', PARAM_RAW)); return manager::get_report_from_persistent($report, $parameters); } /** * Return the context for the form, it should be that of the system report itself * * @return context */ protected function get_context_for_dynamic_submission(): context { return $this->get_report()->get_context(); } /** * Ensure current user is able to use this form * * A {@see \core_reportbuilder\report_access_exception} will be thrown if they can't */ protected function check_access_for_dynamic_submission(): void { permission::require_can_edit_report($this->get_report()->get_report_persistent()); } /** * Process the form submission * * @return bool */ public function process_dynamic_submission() { $values = $this->get_data(); // Remove some unneeded fields. unset($values->reportid, $values->parameters); return $this->get_report()->set_condition_values((array) $values); } /** * Load in existing data as form defaults */ public function set_data_for_dynamic_submission(): void { $defaults = [ 'reportid' => $this->optional_param('reportid', 0, PARAM_INT), 'parameters' => $this->optional_param('parameters', 0, PARAM_RAW), ]; $this->set_data(array_merge($defaults, $this->get_report()->get_condition_values())); } /** * URL of the page using this form * * @return moodle_url */ protected function get_page_url_for_dynamic_submission(): moodle_url { return new moodle_url('/'); } /** * Condition form definition */ protected function definition() { global $OUTPUT; $mform = $this->_form; $mform->addElement('hidden', 'reportid'); $mform->setType('reportid', PARAM_INT); $mform->addElement('hidden', 'parameters'); $mform->setType('parameters', PARAM_RAW); // Wrap the form elements inside an outer container, as drag/drop requires draggable elements to be immediate // descendants of said container. Note this is identified by it's data-region property in the editor module. $mform->addElement('html', '<div class="list-group mt-2" data-region="active-conditions">'); // Allow each condition instance to add itself to this form, wrapping each inside custom header/footer template. $conditioninstances = $this->get_report()->get_condition_instances();
< < $conditions = filter::get_condition_records($this->get_report()->get_report_persistent()->get('id'), 'filterorder'); < foreach ($conditions as $condition) { < $conditioninstance = $conditioninstances[$condition->get('uniqueidentifier')] ?? null; < if ($conditioninstance === null) { < continue; < }
> foreach ($conditioninstances as $conditioninstance) { > $persistent = $conditioninstance->get_filter_persistent();
$entityname = $conditioninstance->get_entity_name(); $displayvalue = $conditioninstance->get_header(); $mform->addElement('html', $OUTPUT->render_from_template('core_reportbuilder/local/conditions/header', [
< 'id' => $condition->get('id'),
> 'id' => $persistent->get('id'),
'entityname' => $this->get_report()->get_entity_title($entityname), 'heading' => $displayvalue,
< 'sortorder' => $condition->get('filterorder'),
> 'sortorder' => $persistent->get('filterorder'),
'movetitle' => get_string('movecondition', 'core_reportbuilder', $displayvalue), ])); $conditioninstance->setup_form($mform); $mform->addElement('html', $OUTPUT->render_from_template('core_reportbuilder/local/conditions/footer', [])); } $mform->addElement('html', '</div>'); $this->set_display_vertical(); // We'll add a second submit button to the form that will be used to reset current report conditions. $mform->registerNoSubmitButton('resetconditions'); $buttons = []; $buttons[] = $mform->createElement('submit', 'submitbutton', get_string('apply', 'core_reportbuilder')); $buttons[] = $mform->createElement('submit', 'resetconditions', get_string('resetall', 'core_reportbuilder'), null, null, ['customclassoverride' => 'btn-link']); $mform->addGroup($buttons, 'buttonar', '', [' '], false); $mform->closeHeaderBefore('buttonar'); $mform->disable_form_change_checker(); } }