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.
   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_cohort\reportbuilder\local\entities;
  20  
  21  use lang_string;
  22  use core_reportbuilder\local\entities\base;
  23  use core_reportbuilder\local\filters\date;
  24  use core_reportbuilder\local\helpers\format;
  25  use core_reportbuilder\local\report\column;
  26  use core_reportbuilder\local\report\filter;
  27  
  28  /**
  29   * Cohort member entity
  30   *
  31   * @package     core_cohort
  32   * @copyright   2021 Paul Holden <paulh@moodle.com>
  33   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  34   */
  35  class cohort_member extends base {
  36  
  37      /**
  38       * Database tables that this entity uses and their default aliases
  39       *
  40       * @return array
  41       */
  42      protected function get_default_table_aliases(): array {
  43          return ['cohort_members' => 'cm'];
  44      }
  45  
  46      /**
  47       * The default title for this entity
  48       *
  49       * @return lang_string
  50       */
  51      protected function get_default_entity_title(): lang_string {
  52          return new lang_string('cohortmember', 'core_cohort');
  53      }
  54  
  55      /**
  56       * Initialise the entity
  57       *
  58       * @return base
  59       */
  60      public function initialise(): base {
  61          $columns = $this->get_all_columns();
  62          foreach ($columns as $column) {
  63              $this->add_column($column);
  64          }
  65  
  66          // All the filters defined by the entity can also be used as conditions.
  67          $filters = $this->get_all_filters();
  68          foreach ($filters as $filter) {
  69              $this
  70                  ->add_filter($filter)
  71                  ->add_condition($filter);
  72          }
  73  
  74          return $this;
  75      }
  76  
  77      /**
  78       * Returns list of all available columns
  79       *
  80       * @return column[]
  81       */
  82      protected function get_all_columns(): array {
  83          $tablealias = $this->get_table_alias('cohort_members');
  84  
  85          // Time added column.
  86          $columns[] = (new column(
  87              'timeadded',
  88              new lang_string('timeadded', 'core_reportbuilder'),
  89              $this->get_entity_name()
  90          ))
  91              ->add_joins($this->get_joins())
  92              ->set_type(column::TYPE_TIMESTAMP)
  93              ->add_fields("{$tablealias}.timeadded")
  94              ->set_is_sortable(true)
  95              ->set_callback([format::class, 'userdate']);
  96  
  97          return $columns;
  98      }
  99  
 100      /**
 101       * Return list of all available filters
 102       *
 103       * @return filter[]
 104       */
 105      protected function get_all_filters(): array {
 106          $tablealias = $this->get_table_alias('cohort_members');
 107  
 108          // Time added filter.
 109          $filters[] = (new filter(
 110              date::class,
 111              'timeadded',
 112              new lang_string('timeadded', 'core_reportbuilder'),
 113              $this->get_entity_name(),
 114              "{$tablealias}.timeadded"
 115          ))
 116              ->add_joins($this->get_joins());
 117  
 118          return $filters;
 119      }
 120  }