Differences Between: [Versions 400 and 402] [Versions 402 and 403]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 declare(strict_types=1); 18 19 namespace core_reportbuilder\external; 20 21 use renderer_base; 22 use core\external\exporter; 23 use core_reportbuilder\datasource; 24 use core_reportbuilder\form\condition; 25 use core_reportbuilder\local\report\filter; 26 27 /** 28 * Custom report conditions exporter class 29 * 30 * @package core_reportbuilder 31 * @copyright 2021 Paul Holden <paulh@moodle.com> 32 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 33 */ 34 class custom_report_conditions_exporter extends exporter { 35 36 /** 37 * Return a list of objects that are related to the exporter 38 * 39 * @return array 40 */ 41 protected static function define_related(): array { 42 return [ 43 'report' => datasource::class, 44 ]; 45 } 46 47 /** 48 * Return the list of additional properties for read structure and export 49 * 50 * @return array[] 51 */ 52 protected static function define_other_properties(): array { 53 return [ 54 'hasavailableconditions' => [ 55 'type' => PARAM_BOOL, 56 ], 57 'availableconditions' => [ 58 'type' => [ 59 'optiongroup' => [ 60 'type' => [ 61 'text' => ['type' => PARAM_TEXT], 62 'values' => [ 63 'type' => [ 64 'value' => ['type' => PARAM_TEXT], 65 'visiblename' => ['type' => PARAM_TEXT], 66 ], 67 'multiple' => true, 68 ], 69 ], 70 ], 71 ], 72 'multiple' => true, 73 ], 74 'hasactiveconditions' => [ 75 'type' => PARAM_BOOL, 76 ], 77 'activeconditionsform' => [ 78 'type' => PARAM_RAW, 79 ], 80 'helpicon' => [ 81 'type' => PARAM_RAW, 82 ], 83 'javascript' => [ 84 'type' => PARAM_RAW, 85 'optional' => true, 86 ], 87 ]; 88 } 89 90 /** 91 * Get the additional values to inject while exporting 92 * 93 * @param renderer_base $output 94 * @return array 95 */ 96 protected function get_other_values(renderer_base $output): array { 97 /** @var datasource $report */ 98 $report = $this->related['report']; 99 100 // Current condition instances contained in the report. 101 $conditions = $report->get_active_conditions(); 102 $conditionidentifiers = array_map(static function(filter $condition): string { 103 return $condition->get_unique_identifier(); 104 }, $conditions); 105 106 $availableconditions = []; 107 108 // Populate available conditions. 109 foreach ($report->get_conditions() as $condition) { 110 if (in_array($condition->get_unique_identifier(), $conditionidentifiers)) { 111 continue; 112 } 113 114 $entityname = $condition->get_entity_name(); 115 if (!array_key_exists($entityname, $availableconditions)) { 116 $availableconditions[$entityname] = [ 117 'optiongroup' => [ 118 'text' => $report->get_entity_title($entityname)->out(), 119 'values' => [], 120 ], 121 ]; 122 } 123 124 $availableconditions[$entityname]['optiongroup']['values'][] = [ 125 'value' => $condition->get_unique_identifier(), 126 'visiblename' => $condition->get_header(), 127 ]; 128 } 129 130 // Generate conditions form if any present. 131 $conditionspresent = !empty($conditions); 132 if ($conditionspresent) { 133 $conditionsform = new condition(null, null, 'post', '', [], true, [ 134 'reportid' => $report->get_report_persistent()->get('id'), 135 ]); 136 $conditionsform->set_data_for_dynamic_submission(); 137 } 138 139 return [ 140 'hasavailableconditions' => !empty($availableconditions), 141 'availableconditions' => array_values($availableconditions), 142 'hasactiveconditions' => $conditionspresent, 143 'activeconditionsform' => $conditionspresent ? $conditionsform->render() : '', 144 'helpicon' => $output->help_icon('conditions', 'core_reportbuilder'), 145 ]; 146 } 147 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body