Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.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  namespace tool_brickfield\local\areas\mod_lesson;
  18  
  19  use tool_brickfield\area_base;
  20  
  21  /**
  22   * Lesson answer base.
  23   *
  24   * @package    tool_brickfield
  25   * @copyright  2020 onward: Brickfield Education Labs, www.brickfield.ie
  26   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  27   */
  28  abstract class answer_base extends area_base {
  29  
  30      /**
  31       * Get table name reference.
  32       * @return string
  33       */
  34      public function get_ref_tablename(): string {
  35          return 'lesson_pages';
  36      }
  37  
  38      /**
  39       * Find recordset of the relevant areas.
  40       * @param \core\event\base $event
  41       * @return \moodle_recordset|null
  42       * @throws \coding_exception
  43       * @throws \dml_exception
  44       */
  45      public function find_relevant_areas(\core\event\base $event): ?\moodle_recordset {
  46          if ($event->eventname == '\mod_lesson\event\page_created' || $event->eventname == '\mod_lesson\event\page_updated') {
  47              if ($event->component === 'mod_lesson') {
  48                  return $this->find_areas(['itemid' => $event->objectid]);
  49              }
  50          }
  51          return null;
  52      }
  53  
  54      /**
  55       * Find recordset of the course areas.
  56       * @param int $courseid
  57       * @return \moodle_recordset
  58       * @throws \coding_exception
  59       * @throws \dml_exception
  60       */
  61      public function find_course_areas(int $courseid): ?\moodle_recordset {
  62          return $this->find_areas(['courseid' => $courseid]);
  63      }
  64  
  65      /**
  66       * Find recordset of areas.
  67       * @param array $params
  68       * @return \moodle_recordset
  69       * @throws \coding_exception
  70       * @throws \dml_exception
  71       */
  72      protected function find_areas(array $params = []): \moodle_recordset {
  73          global $DB;
  74  
  75          $where = [];
  76          if (!empty($params['itemid'])) {
  77              $where[] = 'pa.id = :itemid';
  78          }
  79          if (!empty($params['courseid'])) {
  80              $where[] = 'cm.course = :courseid';
  81          }
  82  
  83          // Filter against approved / non-approved course category listings.
  84          $this->filterfieldname = 'cm.course';
  85          $this->get_courseid_filtering();
  86          if ($this->filter != '') {
  87              $params = $params + $this->filterparams;
  88          }
  89  
  90          $rs = $DB->get_recordset_sql('SELECT
  91            ' . $this->get_type() . ' AS type,
  92            ctx.id AS contextid,
  93            ' . $this->get_standard_area_fields_sql() . '
  94            co.id AS itemid,
  95            ' . $this->get_reftable_field_sql() . '
  96            pa.id AS refid,
  97            cm.id AS cmid,
  98            cm.course AS courseid,
  99            co.'.$this->get_fieldname().' AS content
 100          FROM {lesson} t
 101          JOIN {course_modules} cm ON cm.instance = t.id
 102          JOIN {modules} m ON m.id = cm.module AND m.name = :preftablename2
 103          JOIN {context} ctx ON ctx.instanceid = cm.id AND ctx.contextlevel = :pctxlevelmodule
 104          JOIN {lesson_pages} pa ON pa.lessonid = t.id
 105          JOIN {'.$this->get_tablename().'} co ON co.lessonid = t.id AND co.pageid = pa.id ' .
 106          ($where ? 'WHERE ' . join(' AND ', $where) : '') . $this->filter . '
 107          ORDER BY t.id, co.id',
 108              ['pctxlevelmodule' => CONTEXT_MODULE,
 109               'preftablename2' => 'lesson',
 110              ] + $params);
 111  
 112          return $rs;
 113      }
 114  }