%PDF- %PDF-
Direktori : /home2/vacivi36/ava/reportbuilder/classes/local/helpers/ |
Current File : //home2/vacivi36/ava/reportbuilder/classes/local/helpers/aggregation.php |
<?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\local\helpers; use core_collator; use core_component; use core_reportbuilder\local\aggregation\base; /** * Helper class for column aggregation related methods * * @package core_reportbuilder * @copyright 2021 Paul Holden <paulh@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class aggregation { /** * Helper method to convert aggregation class name into fully qualified namespaced class * * @param string $aggregation * @return string */ public static function get_full_classpath(string $aggregation): string { return "\\core_reportbuilder\\local\\aggregation\\{$aggregation}"; } /** * Validate whether given class is a valid aggregation type * * @param string $aggregationclass Fully qualified namespaced class, see {@see get_full_classpath} for converting value * stored in column persistent to full path * @return bool */ public static function valid(string $aggregationclass): bool { return class_exists($aggregationclass) && is_subclass_of($aggregationclass, base::class); } /** * Return list of all available/valid aggregation types * * @return base[] */ public static function get_aggregations(): array { $classes = core_component::get_component_classes_in_namespace('core_reportbuilder', 'local\\aggregation'); return array_filter(array_keys($classes), static function(string $class): bool { return static::valid($class); }); } /** * Get available aggregation types for given column type * * @param int $columntype * @param array $exclude List of types to exclude, e.g. ['min', 'sum'] * @return string[] Aggregation types indexed by [shortname => name] */ public static function get_column_aggregations(int $columntype, array $exclude = []): array { $types = []; $classes = static::get_aggregations(); foreach ($classes as $class) { if ($class::compatible($columntype) && !in_array($class::get_class_name(), $exclude)) { $types[$class::get_class_name()] = (string) $class::get_name(); } } core_collator::asort($types, core_collator::SORT_STRING); return $types; } }