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.
<?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/>.

/**
 * Behat data generator for mod_data.
 *
 * @package   mod_data
 * @category  test
 * @copyright 2022 Noel De Martin
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
class behat_mod_data_generator extends behat_generator_base {

    /**
     * Get a list of the entities that Behat can create using the generator step.
     *
     * @return array
     */
    protected function get_creatable_entities(): array {
        return [
            'entries' => [
                'singular' => 'entry',
                'datagenerator' => 'entry',
                'required' => ['database'],
< 'switchids' => ['database' => 'databaseid', 'user' => 'userid'],
> 'switchids' => ['database' => 'databaseid', 'user' => 'userid', 'group' => 'groupid'],
], 'fields' => [ 'singular' => 'field', 'datagenerator' => 'field', 'required' => ['database', 'type', 'name'], 'switchids' => ['database' => 'databaseid'], ], 'templates' => [ 'singular' => 'template', 'datagenerator' => 'template', 'required' => ['database', 'name'], 'switchids' => ['database' => 'databaseid'], ], 'presets' => [ 'singular' => 'preset', 'datagenerator' => 'preset', 'required' => ['database', 'name'], 'switchids' => ['database' => 'databaseid', 'user' => 'userid'], ], ]; } /** * Get the database id using an activity idnumber. * * @param string $idnumber * @return int The database id */ protected function get_database_id(string $idnumber): int { $cm = $this->get_cm_by_activity_name('data', $idnumber); return $cm->instance; } /** * Add an entry. * * @param array $data Entry data. */ public function process_entry(array $data): void { global $DB; $database = $DB->get_record('data', ['id' => $data['databaseid']], '*', MUST_EXIST); unset($data['databaseid']); $userid = 0; if (array_key_exists('userid', $data)) { $userid = $data['userid']; unset($data['userid']); }
> if (array_key_exists('groupid', $data)) { > $groupid = $data['groupid']; $data = array_reduce(array_keys($data), function ($fields, $fieldname) use ($data, $database) { > unset($data['groupid']); global $DB; > } else { > $groupid = 0; $field = $DB->get_record('data_fields', ['name' => $fieldname, 'dataid' => $database->id], 'id', MUST_EXIST); > }
$fields[$field->id] = $data[$fieldname]; return $fields; }, []);
< $this->get_data_generator()->create_entry($database, $data, 0, [], null, $userid);
> $this->get_data_generator()->create_entry($database, $data, $groupid, [], null, $userid);
} /** * Add a field. * * @param array $data Field data. */ public function process_field(array $data): void { global $DB; $database = $DB->get_record('data', ['id' => $data['databaseid']], '*', MUST_EXIST); unset($data['databaseid']); $this->get_data_generator()->create_field((object) $data, $database); } /** * Add a template. * * @param array $data Template data. */ public function process_template(array $data): void { global $DB; $database = $DB->get_record('data', ['id' => $data['databaseid']], '*', MUST_EXIST); if (empty($data['content'])) { data_generate_default_template($database, $data['name']); } else { $newdata = new stdClass(); $newdata->id = $database->id; $newdata->{$data['name']} = $data['content']; $DB->update_record('data', $newdata); } } /** * Saves a preset. * * @param array $data Preset data. */ protected function process_preset(array $data): void { global $DB; $instance = $DB->get_record('data', ['id' => $data['databaseid']], '*', MUST_EXIST); $this->get_data_generator()->create_preset($instance, (object) $data); } /** * Get the module data generator. * * @return mod_data_generator Database data generator. */ protected function get_data_generator(): mod_data_generator { return $this->componentdatagenerator; } }