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\local\models; 20 21 use context; 22 use core_reportbuilder\event\audience_created; 23 use core_reportbuilder\event\audience_deleted; 24 use core_reportbuilder\event\audience_updated; 25 use lang_string; 26 use core\persistent; 27 use core_reportbuilder\local\helpers\audience as helper; 28 29 /** 30 * Persistent class to represent a report audience 31 * 32 * @package core_reportbuilder 33 * @copyright 2021 David Matamoros <davidmc@moodle.com> 34 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 35 */ 36 class audience extends persistent { 37 38 /** @var string Table name */ 39 public const TABLE = 'reportbuilder_audience'; 40 41 /** 42 * Return the definition of the properties of this model. 43 * 44 * @return array 45 */ 46 protected static function define_properties() : array { 47 return [ 48 'reportid' => [ 49 'type' => PARAM_INT, 50 ], 51 'heading' => [ 52 'type' => PARAM_TEXT, 53 'null' => NULL_ALLOWED, 54 'default' => null, 55 ], 56 'classname' => [ 57 'type' => PARAM_TEXT, 58 ], 59 'configdata' => [ 60 'type' => PARAM_RAW, 61 'default' => '{}', 62 ], 63 'usercreated' => [ 64 'type' => PARAM_INT, 65 'default' => static function(): int { 66 global $USER; 67 68 return (int) $USER->id; 69 }, 70 ], 71 ]; 72 } 73 74 /** 75 * Validate reportid property 76 * 77 * @param int $reportid 78 * @return bool|lang_string 79 */ 80 protected function validate_reportid(int $reportid) { 81 if (!report::record_exists($reportid)) { 82 return new lang_string('invaliddata', 'error'); 83 } 84 85 return true; 86 } 87 88 /** 89 * Hook to execute after creation 90 */ 91 protected function after_create(): void { 92 audience_created::create_from_object($this)->trigger(); 93 helper::purge_caches(); 94 } 95 96 /** 97 * Hook to execute after update 98 * 99 * @param bool $result 100 */ 101 protected function after_update($result): void { 102 if ($result) { 103 audience_updated::create_from_object($this)->trigger(); 104 helper::purge_caches(); 105 } 106 } 107 108 /** 109 * Hook to execute after deletion 110 * 111 * @param bool $result 112 */ 113 protected function after_delete($result): void { 114 if ($result) { 115 audience_deleted::create_from_object($this)->trigger(); 116 helper::purge_caches(); 117 } 118 } 119 120 /** 121 * Return the report this audience belongs to 122 * 123 * @return report 124 */ 125 public function get_report(): report { 126 return new report($this->get('reportid')); 127 } 128 129 /** 130 * Return formatted audience heading 131 * 132 * @param context|null $context If the context of the report is already known, it should be passed here 133 * @return string 134 */ 135 public function get_formatted_heading(?context $context = null): string { 136 if ($context === null) { 137 $context = $this->get_report()->get_context(); 138 } 139 140 return format_string($this->raw_get('heading'), true, ['context' => $context]); 141 } 142 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body