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/>.declare(strict_types=1);namespace customfield_number;use context;use MoodleQuickForm;/*** Class provider_base** @package customfield_number* @author 2024 Marina Glancy* @copyright 2024 Moodle Pty Ltd <support@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/abstract class provider_base {/*** Constructor.** @param field_controller $field A field controller.*/public function __construct(/** @var field_controller the custom field controller */protected field_controller $field,) {}/*** Provider name*/abstract public function get_name(): string;/*** If provide is available for the current field.*/abstract public function is_available(): bool;/*** Add provider specific fields for form.** @param \MoodleQuickForm $mform*/public function config_form_definition(MoodleQuickForm $mform): void {}/*** Recalculate field value.** @param int|null $instanceid*/public function recalculate(?int $instanceid = null): void {}/*** Default value if there is no value in the database (or there is a null)** Usually returns either null or 0** @return null|float*/public function get_default_value(): ?float {return null;}/*** How the field should be displayed** Called from {@see field_controller::prepare_field_for_display()}* The return value may contain safe HTML but all user input must be passed through* format_string/format_text functions** @param mixed $value String or float* @param context|null $context Context* @return ?string null if the field should not be displayed or string representation of the field*/public function prepare_export_value(mixed $value, ?\context $context = null): ?string {if ($value === null) {return null;}// By default assumes that configuration 'decimalplaces' and 'displaywhenzero' are// present. If they are not used in this provider, override the method.$decimalplaces = (int) $this->field->get_configdata_property('decimalplaces');if (round((float) $value, $decimalplaces) == 0) {$result = $this->field->get_configdata_property('displaywhenzero');if ((string) $result === '') {return null;} else {return format_string($result, true, ['context' => $context ?? \core\context\system::instance()]);}} else {return format_float((float)$value, $decimalplaces);}}/*** Returns a new provider instance.** @param field_controller $field Field*/final public static function instance(\core_customfield\field_controller $field): ?self {if ($field->get('type') !== 'number' || !($field instanceof field_controller)) {return null;}$classname = $field->get_configdata_property('fieldtype');if (!$classname) {return null;}if (!class_exists($classname) || !is_a($classname, self::class, true)) {return new missing_provider($field);}return new $classname($field);}/*** List of applicable automatic providers for this field** @param field_controller $field* @return provider_base[]*/final public static function get_all_providers(field_controller $field): array {/** @var provider_base[] $allproviders */$allproviders = [new \customfield_number\local\numberproviders\nofactivities($field),];// Custom providers.$hook = new \customfield_number\hook\add_custom_providers($field);// Dispatch the hook and collect custom providers.\core\di::get(\core\hook\manager::class)->dispatch($hook);$allproviders = array_merge($allproviders, $hook->get_providers());return array_filter($allproviders, fn($p) => $p->is_available());}/*** Validate the data on the field configuration form** Providers can override it** @param array $data* @param array $files* @return array associative array of error messages*/public function config_form_validation(array $data, array $files = []): array {return [];}}