2022-07-08 18:07:38 +02:00
|
|
|
<?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/>.
|
|
|
|
|
|
|
|
namespace mod_data;
|
|
|
|
|
|
|
|
use context_module;
|
|
|
|
use rating_manager;
|
|
|
|
use stdClass;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Template tests class for mod_data.
|
|
|
|
*
|
|
|
|
* @package mod_data
|
|
|
|
* @category test
|
|
|
|
* @copyright 2022 Ferran Recio <ferran@moodle.com>
|
|
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
|
|
* @coversDefaultClass \mod_data\template
|
|
|
|
*/
|
|
|
|
class template_test extends \advanced_testcase {
|
|
|
|
/**
|
|
|
|
* Setup to ensure that fixtures are loaded.
|
|
|
|
*/
|
|
|
|
public static function setupBeforeClass(): void {
|
|
|
|
global $CFG;
|
|
|
|
require_once($CFG->dirroot . '/rating/lib.php');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test for static create methods.
|
|
|
|
*
|
|
|
|
* @covers ::parse_entries
|
|
|
|
* @dataProvider parse_entries_provider
|
|
|
|
* @param string $templatecontent the template string
|
|
|
|
* @param string $expected expected output
|
|
|
|
* @param string $rolename the user rolename
|
|
|
|
* @param bool $enableexport is portfolio export is enabled
|
|
|
|
* @param bool $approved if the entry is approved
|
|
|
|
* @param bool $enablecomments is comments are enabled
|
|
|
|
* @param bool $enableratings if ratings are enabled
|
|
|
|
* @param array $options extra parser options
|
|
|
|
* @param bool $otherauthor if the entry is from another user
|
|
|
|
*/
|
|
|
|
public function test_parse_entries(
|
|
|
|
string $templatecontent,
|
|
|
|
string $expected,
|
|
|
|
string $rolename = 'editingteacher',
|
|
|
|
bool $enableexport = false,
|
|
|
|
bool $approved = true,
|
|
|
|
bool $enablecomments = false,
|
|
|
|
bool $enableratings = false,
|
|
|
|
array $options = [],
|
|
|
|
bool $otherauthor = false
|
|
|
|
) {
|
|
|
|
global $DB, $PAGE;
|
|
|
|
// Comments, tags, approval, user role.
|
|
|
|
$this->resetAfterTest();
|
|
|
|
|
|
|
|
$params = ['approval' => true];
|
|
|
|
|
|
|
|
// Enable comments.
|
|
|
|
if ($enablecomments) {
|
|
|
|
set_config('usecomments', 1);
|
|
|
|
$params['comments'] = true;
|
|
|
|
$PAGE->reset_theme_and_output();
|
|
|
|
$PAGE->set_url('/mod/data/view.php');
|
|
|
|
}
|
|
|
|
|
|
|
|
$course = $this->getDataGenerator()->create_course();
|
|
|
|
$params['course'] = $course;
|
|
|
|
$activity = $this->getDataGenerator()->create_module('data', $params);
|
|
|
|
$cm = get_coursemodule_from_id('data', $activity->cmid, 0, false, MUST_EXIST);
|
|
|
|
$context = context_module::instance($cm->id);
|
|
|
|
|
|
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
$roleids = $DB->get_records_menu('role', null, '', 'shortname, id');
|
|
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id, $roleids[$rolename]);
|
|
|
|
$author = $user;
|
|
|
|
|
|
|
|
if ($otherauthor) {
|
|
|
|
$user2 = $this->getDataGenerator()->create_user();
|
|
|
|
$this->getDataGenerator()->enrol_user($user2->id, $course->id, $roleids[$rolename]);
|
|
|
|
$author = $user2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Generate an entry.
|
|
|
|
$generator = $this->getDataGenerator()->get_plugin_generator('mod_data');
|
2022-09-09 13:20:27 +02:00
|
|
|
$fieldrecord = (object)['name' => 'myfield', 'type' => 'text'];
|
2022-07-08 18:07:38 +02:00
|
|
|
$field = $generator->create_field($fieldrecord, $activity);
|
2022-09-09 13:20:27 +02:00
|
|
|
$otherfieldrecord = (object)['name' => 'otherfield', 'type' => 'text'];
|
|
|
|
$otherfield = $generator->create_field($otherfieldrecord, $activity);
|
2022-07-08 18:07:38 +02:00
|
|
|
|
|
|
|
$this->setUser($user);
|
|
|
|
|
|
|
|
$entryid = $generator->create_entry(
|
|
|
|
$activity,
|
2022-09-09 13:20:27 +02:00
|
|
|
[
|
|
|
|
$field->field->id => 'Example entry',
|
|
|
|
$otherfield->field->id => 'Another example',
|
|
|
|
],
|
2022-07-08 18:07:38 +02:00
|
|
|
0,
|
|
|
|
['Cats', 'Dogs'],
|
|
|
|
['approved' => $approved]
|
|
|
|
);
|
|
|
|
|
|
|
|
if ($enableexport) {
|
|
|
|
$this->enable_portfolio($user);
|
|
|
|
}
|
|
|
|
|
|
|
|
$manager = manager::create_from_instance($activity);
|
|
|
|
|
|
|
|
$entry = (object)[
|
|
|
|
'id' => $entryid,
|
|
|
|
'approved' => $approved,
|
|
|
|
'timecreated' => 1657618639,
|
|
|
|
'timemodified' => 1657618650,
|
|
|
|
'userid' => $author->id,
|
|
|
|
'groupid' => 0,
|
|
|
|
'dataid' => $activity->id,
|
|
|
|
'picture' => 0,
|
|
|
|
'firstname' => $author->firstname,
|
|
|
|
'lastname' => $author->lastname,
|
|
|
|
'firstnamephonetic' => $author->firstnamephonetic,
|
|
|
|
'lastnamephonetic' => $author->lastnamephonetic,
|
|
|
|
'middlename' => $author->middlename,
|
|
|
|
'alternatename' => $author->alternatename,
|
|
|
|
'imagealt' => 'PIXEXAMPLE',
|
|
|
|
'email' => $author->email,
|
|
|
|
];
|
|
|
|
$entries = [$entry];
|
|
|
|
|
|
|
|
if ($enableratings) {
|
|
|
|
$entries = $this->enable_ratings($context, $activity, $entries, $user);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Some cooked variables for the regular expression.
|
|
|
|
$replace = [
|
|
|
|
'{authorfullname}' => fullname($author),
|
2022-10-03 17:42:00 +02:00
|
|
|
'{timeadded}' => userdate($entry->timecreated, get_string('strftimedatemonthabbr', 'langconfig')),
|
|
|
|
'{timemodified}' => userdate($entry->timemodified, get_string('strftimedatemonthabbr', 'langconfig')),
|
2022-07-08 18:07:38 +02:00
|
|
|
'{fieldid}' => $field->field->id,
|
2022-09-09 13:20:27 +02:00
|
|
|
'{fieldname}' => $field->field->name,
|
|
|
|
'{fielddescription}' => $field->field->description,
|
2022-07-08 18:07:38 +02:00
|
|
|
'{entryid}' => $entry->id,
|
|
|
|
'{cmid}' => $cm->id,
|
|
|
|
'{courseid}' => $course->id,
|
|
|
|
'{authorid}' => $author->id
|
|
|
|
];
|
|
|
|
|
|
|
|
$parser = new template($manager, $templatecontent, $options);
|
|
|
|
$result = $parser->parse_entries($entries);
|
|
|
|
|
|
|
|
// We don't want line breaks for the validations.
|
|
|
|
$result = str_replace("\n", '', $result);
|
|
|
|
$regexp = str_replace(array_keys($replace), array_values($replace), $expected);
|
|
|
|
$this->assertMatchesRegularExpression($regexp, $result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Data provider for test_parse_entries().
|
|
|
|
*
|
|
|
|
* @return array of scenarios
|
|
|
|
*/
|
|
|
|
public function parse_entries_provider(): array {
|
|
|
|
return [
|
|
|
|
// Teacher scenarios.
|
|
|
|
'Teacher id tag' => [
|
|
|
|
'templatecontent' => 'Some ##id## tag',
|
|
|
|
'expected' => '|Some {entryid} tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher delete tag' => [
|
|
|
|
'templatecontent' => 'Some ##delete## tag',
|
|
|
|
'expected' => '|Some .*delete.*{entryid}.*sesskey.*Delete.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher edit tag' => [
|
|
|
|
'templatecontent' => 'Some ##edit## tag',
|
|
|
|
'expected' => '|Some .*edit.*{entryid}.*sesskey.*Edit.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher more tag' => [
|
|
|
|
'templatecontent' => 'Some ##more## tag',
|
|
|
|
'expected' => '|Some .*more.*{cmid}.*rid.*{entryid}.*More.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
2022-08-05 17:03:00 +02:00
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['showmore' => true],
|
|
|
|
],
|
|
|
|
'Teacher more tag with showmore set to false' => [
|
|
|
|
'templatecontent' => 'Some ##more## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['showmore' => false],
|
2022-07-08 18:07:38 +02:00
|
|
|
],
|
|
|
|
'Teacher moreurl tag' => [
|
|
|
|
'templatecontent' => 'Some ##moreurl## tag',
|
|
|
|
'expected' => '|Some .*/mod/data/view.*{cmid}.*rid.*{entryid}.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
2022-08-05 17:03:00 +02:00
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['showmore' => true],
|
|
|
|
],
|
|
|
|
'Teacher moreurl tag with showmore set to false' => [
|
|
|
|
'templatecontent' => 'Some ##moreurl## tag',
|
|
|
|
'expected' => '|Some .*/mod/data/view.*{cmid}.*rid.*{entryid}.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['showmore' => false],
|
2022-07-08 18:07:38 +02:00
|
|
|
],
|
|
|
|
'Teacher delcheck tag' => [
|
|
|
|
'templatecontent' => 'Some ##delcheck## tag',
|
|
|
|
'expected' => '|Some .*input.*checkbox.*value.*{entryid}.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher user tag' => [
|
|
|
|
'templatecontent' => 'Some ##user## tag',
|
|
|
|
'expected' => '|Some .*user/view.*{authorid}.*course.*{courseid}.*{authorfullname}.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher userpicture tag' => [
|
|
|
|
'templatecontent' => 'Some ##userpicture## tag',
|
|
|
|
'expected' => '|Some .*user/view.*{authorid}.*course.*{courseid}.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher export tag' => [
|
|
|
|
'templatecontent' => 'Some ##export## tag',
|
|
|
|
'expected' => '|Some .*portfolio/add.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => true,
|
|
|
|
],
|
|
|
|
'Teacher export tag not configured' => [
|
|
|
|
'templatecontent' => 'Some ##export## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
],
|
|
|
|
'Teacher timeadded tag' => [
|
|
|
|
'templatecontent' => 'Some ##timeadded## tag',
|
2022-10-03 17:42:00 +02:00
|
|
|
'expected' => '|Some <span.*>{timeadded}</span> tag|',
|
2022-07-08 18:07:38 +02:00
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher timemodified tag' => [
|
|
|
|
'templatecontent' => 'Some ##timemodified## tag',
|
2022-10-03 17:42:00 +02:00
|
|
|
'expected' => '|Some <span.*>{timemodified}</span> tag|',
|
2022-07-08 18:07:38 +02:00
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher approve tag approved entry' => [
|
|
|
|
'templatecontent' => 'Some ##approve## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
],
|
|
|
|
'Teacher approve tag disapproved entry' => [
|
|
|
|
'templatecontent' => 'Some ##approve## tag',
|
|
|
|
'expected' => '|Some .*approve.*{entryid}.*sesskey.*Approve.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => false,
|
|
|
|
],
|
|
|
|
'Teacher disapprove tag approved entry' => [
|
|
|
|
'templatecontent' => 'Some ##disapprove## tag',
|
|
|
|
'expected' => '|Some .*disapprove.*{entryid}.*sesskey.*Undo approval.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
],
|
|
|
|
'Teacher disapprove tag disapproved entry' => [
|
|
|
|
'templatecontent' => 'Some ##disapprove## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => false,
|
|
|
|
],
|
|
|
|
'Teacher approvalstatus tag approved entry' => [
|
|
|
|
'templatecontent' => 'Some ##approvalstatus## tag',
|
2022-09-12 18:37:24 +02:00
|
|
|
'expected' => '|Some tag|', // We do not display the approval status anymore.
|
2022-07-08 18:07:38 +02:00
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
],
|
|
|
|
'Teacher approvalstatus tag disapproved entry' => [
|
|
|
|
'templatecontent' => 'Some ##approvalstatus## tag',
|
2022-09-12 18:37:24 +02:00
|
|
|
'expected' => '|Some .*Pending approval.* tag|',
|
2022-07-08 18:07:38 +02:00
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => false,
|
|
|
|
],
|
|
|
|
'Teacher approvalstatusclass tag approved entry' => [
|
|
|
|
'templatecontent' => 'Some ##approvalstatusclass## tag',
|
|
|
|
'expected' => '|Some approved tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
],
|
|
|
|
'Teacher approvalstatusclass tag disapproved entry' => [
|
|
|
|
'templatecontent' => 'Some ##approvalstatusclass## tag',
|
|
|
|
'expected' => '|Some notapproved tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => false,
|
|
|
|
],
|
|
|
|
'Teacher tags tag' => [
|
|
|
|
'templatecontent' => 'Some ##tags## tag',
|
|
|
|
'expected' => '|Some .*Cats.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher field name tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield]] tag',
|
|
|
|
'expected' => '|Some .*Example entry.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
2022-09-09 13:20:27 +02:00
|
|
|
'Teacher field#id tag' => [
|
2022-07-08 18:07:38 +02:00
|
|
|
'templatecontent' => 'Some [[myfield#id]] tag',
|
|
|
|
'expected' => '|Some {fieldid} tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
2022-09-09 13:20:27 +02:00
|
|
|
'Teacher field#name tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield#name]] tag',
|
|
|
|
'expected' => '|Some {fieldname} tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher field#description tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield#description]] tag',
|
|
|
|
'expected' => '|Some {fielddescription} tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
2022-07-08 18:07:38 +02:00
|
|
|
'Teacher comments name tag with comments enabled' => [
|
|
|
|
'templatecontent' => 'Some ##comments## tag',
|
|
|
|
'expected' => '|Some .*Comments.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => true,
|
|
|
|
],
|
|
|
|
'Teacher comments name tag with comments disabled' => [
|
|
|
|
'templatecontent' => 'Some ##comments## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
],
|
|
|
|
'Teacher comment forced with comments enables' => [
|
|
|
|
'templatecontent' => 'No tags',
|
|
|
|
'expected' => '|No tags.*Comments.*|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => true,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['comments' => true],
|
|
|
|
],
|
|
|
|
'Teacher comment forced without comments enables' => [
|
|
|
|
'templatecontent' => 'No tags',
|
|
|
|
'expected' => '|^No tags$|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['comments' => true],
|
|
|
|
],
|
|
|
|
'Teacher adding ratings without ratings configured' => [
|
|
|
|
'templatecontent' => 'No tags',
|
|
|
|
'expected' => '|^No tags$|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['ratings' => true],
|
|
|
|
],
|
|
|
|
'Teacher adding ratings with ratings configured' => [
|
|
|
|
'templatecontent' => 'No tags',
|
|
|
|
'expected' => '|^No tags.*Average of ratings|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => true,
|
|
|
|
'options' => ['ratings' => true],
|
|
|
|
],
|
2022-08-05 17:03:00 +02:00
|
|
|
'Teacher actionsmenu tag with default options' => [
|
|
|
|
'templatecontent' => 'Some ##actionsmenu## tag',
|
|
|
|
'expected' => '|Some .*edit.*{entryid}.*sesskey.*Edit.* .*delete.*{entryid}.*sesskey.*Delete.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher actionsmenu tag with default options (check Show more is not there)' => [
|
|
|
|
'templatecontent' => 'Some ##actionsmenu## tag',
|
|
|
|
'expected' => '|^Some((?!Show more).)*tag$|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher actionsmenu tag with show more enabled' => [
|
|
|
|
'templatecontent' => 'Some ##actionsmenu## tag',
|
|
|
|
'expected' => '|Some .*view.*{cmid}.*rid.*{entryid}.*Show more.* .*Edit.* .*Delete.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => false,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['showmore' => true],
|
|
|
|
],
|
|
|
|
'Teacher actionsmenu tag with export enabled' => [
|
|
|
|
'templatecontent' => 'Some ##actionsmenu## tag',
|
|
|
|
'expected' => '|Some .*Edit.* .*Delete.* .*portfolio/add.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => true,
|
|
|
|
],
|
|
|
|
'Teacher actionsmenu tag with approved enabled' => [
|
|
|
|
'templatecontent' => 'Some ##actionsmenu## tag',
|
|
|
|
'expected' => '|Some .*Edit.* .*Delete.* .*disapprove.*{entryid}.*sesskey.*Undo approval.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
],
|
|
|
|
'Teacher actionsmenu tag with export, approved and showmore enabled' => [
|
|
|
|
'templatecontent' => 'Some ##actionsmenu## tag',
|
|
|
|
'expected' => '|Some .*Show more.* .*Edit.* .*Delete.* .*Undo approval.* .*Export to portfolio.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
'enableexport' => true,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['showmore' => true],
|
|
|
|
],
|
2022-09-09 13:20:27 +02:00
|
|
|
'Teacher otherfields tag' => [
|
|
|
|
'templatecontent' => 'Some ##otherfields## tag',
|
|
|
|
'expected' => '|Some .*{fieldname}.*Example entry.*otherfield.*Another example.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
|
|
|
'Teacher otherfields tag with some field in the template' => [
|
|
|
|
'templatecontent' => 'Some [[myfield]] and ##otherfields## tag',
|
|
|
|
'expected' => '|Some .*Example entry.* and .*otherfield.*Another example.* tag|',
|
|
|
|
'rolename' => 'editingteacher',
|
|
|
|
],
|
2022-07-08 18:07:38 +02:00
|
|
|
// Student scenarios.
|
|
|
|
'Student id tag' => [
|
|
|
|
'templatecontent' => 'Some ##id## tag',
|
|
|
|
'expected' => '|Some {entryid} tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student delete tag' => [
|
|
|
|
'templatecontent' => 'Some ##delete## tag',
|
|
|
|
'expected' => '|Some .*delete.*{entryid}.*sesskey.*Delete.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student delete tag on other author entry' => [
|
|
|
|
'templatecontent' => 'Some ##delete## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => [],
|
|
|
|
'otherauthor' => true,
|
|
|
|
],
|
|
|
|
'Student edit tag' => [
|
|
|
|
'templatecontent' => 'Some ##edit## tag',
|
|
|
|
'expected' => '|Some .*edit.*{entryid}.*sesskey.*Edit.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student edit tag on other author entry' => [
|
|
|
|
'templatecontent' => 'Some ##edit## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => [],
|
|
|
|
'otherauthor' => true,
|
|
|
|
],
|
|
|
|
'Student more tag' => [
|
|
|
|
'templatecontent' => 'Some ##more## tag',
|
|
|
|
'expected' => '|Some .*more.*{cmid}.*rid.*{entryid}.*More.* tag|',
|
|
|
|
'rolename' => 'student',
|
2022-08-05 17:03:00 +02:00
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['showmore' => true],
|
|
|
|
],
|
|
|
|
'Student more tag with showmore set to false' => [
|
|
|
|
'templatecontent' => 'Some ##more## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['showmore' => false],
|
2022-07-08 18:07:38 +02:00
|
|
|
],
|
|
|
|
'Student moreurl tag' => [
|
|
|
|
'templatecontent' => 'Some ##moreurl## tag',
|
|
|
|
'expected' => '|Some .*/mod/data/view.*{cmid}.*rid.*{entryid}.* tag|',
|
|
|
|
'rolename' => 'student',
|
2022-08-05 17:03:00 +02:00
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['showmore' => true],
|
|
|
|
],
|
|
|
|
'Student moreurl tag with showmore set to false' => [
|
|
|
|
'templatecontent' => 'Some ##moreurl## tag',
|
|
|
|
'expected' => '|Some .*/mod/data/view.*{cmid}.*rid.*{entryid}.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['showmore' => false],
|
2022-07-08 18:07:38 +02:00
|
|
|
],
|
|
|
|
'Student delcheck tag' => [
|
|
|
|
'templatecontent' => 'Some ##delcheck## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student user tag' => [
|
|
|
|
'templatecontent' => 'Some ##user## tag',
|
|
|
|
'expected' => '|Some .*user/view.*{authorid}.*course.*{courseid}.*{authorfullname}.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student userpicture tag' => [
|
|
|
|
'templatecontent' => 'Some ##userpicture## tag',
|
|
|
|
'expected' => '|Some .*user/view.*{authorid}.*course.*{courseid}.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student export tag' => [
|
|
|
|
'templatecontent' => 'Some ##export## tag',
|
|
|
|
'expected' => '|Some .*portfolio/add.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => true,
|
|
|
|
],
|
|
|
|
'Student export tag not configured' => [
|
|
|
|
'templatecontent' => 'Some ##export## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
],
|
|
|
|
'Student export tag on other user entry' => [
|
|
|
|
'templatecontent' => 'Some ##export## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => [],
|
|
|
|
'otherauthor' => true,
|
|
|
|
],
|
|
|
|
'Student timeadded tag' => [
|
|
|
|
'templatecontent' => 'Some ##timeadded## tag',
|
2022-10-03 17:42:00 +02:00
|
|
|
'expected' => '|Some <span.*>{timeadded}</span> tag|',
|
2022-07-08 18:07:38 +02:00
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student timemodified tag' => [
|
|
|
|
'templatecontent' => 'Some ##timemodified## tag',
|
2022-10-03 17:42:00 +02:00
|
|
|
'expected' => '|Some <span.*>{timemodified}</span> tag|',
|
2022-07-08 18:07:38 +02:00
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student approve tag approved entry' => [
|
|
|
|
'templatecontent' => 'Some ##approve## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
],
|
|
|
|
'Student approve tag disapproved entry' => [
|
|
|
|
'templatecontent' => 'Some ##approve## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => false,
|
|
|
|
],
|
|
|
|
'Student disapprove tag approved entry' => [
|
|
|
|
'templatecontent' => 'Some ##disapprove## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
],
|
|
|
|
'Student disapprove tag disapproved entry' => [
|
|
|
|
'templatecontent' => 'Some ##disapprove## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => false,
|
|
|
|
],
|
|
|
|
'Student approvalstatus tag approved entry' => [
|
|
|
|
'templatecontent' => 'Some ##approvalstatus## tag',
|
2022-09-12 18:37:24 +02:00
|
|
|
'expected' => '|Some tag|',
|
2022-07-08 18:07:38 +02:00
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
],
|
|
|
|
'Student approvalstatus tag disapproved entry' => [
|
|
|
|
'templatecontent' => 'Some ##approvalstatus## tag',
|
2022-09-12 18:37:24 +02:00
|
|
|
'expected' => '|Some .*Pending approval.* tag|',
|
2022-07-08 18:07:38 +02:00
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => false,
|
|
|
|
],
|
|
|
|
'Student approvalstatusclass tag approved entry' => [
|
|
|
|
'templatecontent' => 'Some ##approvalstatusclass## tag',
|
|
|
|
'expected' => '|Some approved tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
],
|
|
|
|
'Student approvalstatusclass tag disapproved entry' => [
|
|
|
|
'templatecontent' => 'Some ##approvalstatusclass## tag',
|
|
|
|
'expected' => '|Some notapproved tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => false,
|
|
|
|
],
|
|
|
|
'Student tags tag' => [
|
|
|
|
'templatecontent' => 'Some ##tags## tag',
|
|
|
|
'expected' => '|Some .*Cats.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student field name tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield]] tag',
|
|
|
|
'expected' => '|Some .*Example entry.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student field#id name tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield#id]] tag',
|
|
|
|
'expected' => '|Some {fieldid} tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
2022-09-09 13:20:27 +02:00
|
|
|
'Student field#name tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield#name]] tag',
|
|
|
|
'expected' => '|Some {fieldname} tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student field#description tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield#description]] tag',
|
|
|
|
'expected' => '|Some {fielddescription} tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
2022-07-08 18:07:38 +02:00
|
|
|
'Student comments name tag with comments enabled' => [
|
|
|
|
'templatecontent' => 'Some ##comments## tag',
|
|
|
|
'expected' => '|Some .*Comments.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => true,
|
|
|
|
],
|
|
|
|
'Student comments name tag with comments disabled' => [
|
|
|
|
'templatecontent' => 'Some ##comments## tag',
|
|
|
|
'expected' => '|Some tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
],
|
|
|
|
'Student comment forced with comments enables' => [
|
|
|
|
'templatecontent' => 'No tags',
|
|
|
|
'expected' => '|No tags.*Comments.*|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => true,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['comments' => true]
|
|
|
|
],
|
|
|
|
'Student comment forced without comments enables' => [
|
|
|
|
'templatecontent' => 'No tags',
|
|
|
|
'expected' => '|^No tags$|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['comments' => true]
|
|
|
|
],
|
|
|
|
'Student adding ratings without ratings configured' => [
|
|
|
|
'templatecontent' => 'No tags',
|
|
|
|
'expected' => '|^No tags$|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['ratings' => true]
|
|
|
|
],
|
|
|
|
'Student adding ratings with ratings configured' => [
|
|
|
|
'templatecontent' => 'No tags',
|
|
|
|
'expected' => '|^No tags$|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => true,
|
|
|
|
'options' => ['ratings' => true]
|
|
|
|
],
|
2022-08-05 17:03:00 +02:00
|
|
|
'Student actionsmenu tag with default options' => [
|
|
|
|
'templatecontent' => 'Some ##actionsmenu## tag',
|
|
|
|
'expected' => '|Some .*edit.*{entryid}.*sesskey.*Edit.* .*delete.*{entryid}.*sesskey.*Delete.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student actionsmenu tag with default options (check Show more is not there)' => [
|
|
|
|
'templatecontent' => 'Some ##actionsmenu## tag',
|
|
|
|
'expected' => '|^Some((?!Show more).)*tag$|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student actionsmenu tag with show more enabled' => [
|
|
|
|
'templatecontent' => 'Some ##actionsmenu## tag',
|
|
|
|
'expected' => '|Some .*view.*{cmid}.*rid.*{entryid}.*Show more.* .*Edit.* .*Delete.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => false,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['showmore' => true],
|
|
|
|
],
|
|
|
|
'Student actionsmenu tag with export enabled' => [
|
|
|
|
'templatecontent' => 'Some ##actionsmenu## tag',
|
|
|
|
'expected' => '|Some .*Edit.* .*Delete.* .*portfolio/add.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => true,
|
|
|
|
],
|
|
|
|
'Student actionsmenu tag with approved enabled' => [
|
|
|
|
'templatecontent' => 'Some ##actionsmenu## tag',
|
|
|
|
'expected' => '|^Some((?!Approve).)*tag$|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => false,
|
|
|
|
'approved' => true,
|
|
|
|
],
|
|
|
|
'Student actionsmenu tag with export, approved and showmore enabled' => [
|
|
|
|
'templatecontent' => 'Some ##actionsmenu## tag',
|
|
|
|
'expected' => '|Some .*Show more.* .*Edit.* .*Delete.* .*Export to portfolio.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
'enableexport' => true,
|
|
|
|
'approved' => true,
|
|
|
|
'enablecomments' => false,
|
|
|
|
'enableratings' => false,
|
|
|
|
'options' => ['showmore' => true],
|
|
|
|
],
|
2022-09-09 13:20:27 +02:00
|
|
|
'Student otherfields tag' => [
|
|
|
|
'templatecontent' => 'Some ##otherfields## tag',
|
|
|
|
'expected' => '|Some .*{fieldname}.*Example entry.*otherfield.*Another example.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
|
|
|
'Student otherfields tag with some field in the template' => [
|
|
|
|
'templatecontent' => 'Some [[myfield]] and ##otherfields## tag',
|
|
|
|
'expected' => '|Some .*Example entry.* and .*otherfield.*Another example.* tag|',
|
|
|
|
'rolename' => 'student',
|
|
|
|
],
|
2022-07-08 18:07:38 +02:00
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create all the necessary data to enable portfolio export in mod_data
|
|
|
|
*
|
|
|
|
* @param stdClass $user the current user record.
|
|
|
|
*/
|
|
|
|
protected function enable_portfolio(stdClass $user) {
|
|
|
|
global $DB;
|
|
|
|
set_config('enableportfolios', 1);
|
|
|
|
|
|
|
|
$plugin = 'download';
|
|
|
|
$name = 'Download';
|
|
|
|
|
|
|
|
$portfolioinstance = (object) [
|
|
|
|
'plugin' => $plugin,
|
|
|
|
'name' => $name,
|
|
|
|
'visible' => 1
|
|
|
|
];
|
|
|
|
$portfolioinstance->id = $DB->insert_record('portfolio_instance', $portfolioinstance);
|
|
|
|
$userinstance = (object) [
|
|
|
|
'instance' => $portfolioinstance->id,
|
|
|
|
'userid' => $user->id,
|
|
|
|
'name' => 'visible',
|
|
|
|
'value' => 1
|
|
|
|
];
|
|
|
|
$DB->insert_record('portfolio_instance_user', $userinstance);
|
|
|
|
|
|
|
|
$DB->insert_record('portfolio_log', [
|
|
|
|
'portfolio' => $portfolioinstance->id,
|
|
|
|
'userid' => $user->id,
|
|
|
|
'caller_class' => 'data_portfolio_caller',
|
|
|
|
'caller_component' => 'mod_data',
|
|
|
|
'time' => time(),
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Enable the ratings on the database entries.
|
|
|
|
*
|
|
|
|
* @param context_module $context the activity context
|
|
|
|
* @param stdClass $activity the activity record
|
|
|
|
* @param array $entries database entries
|
|
|
|
* @param stdClass $user the current user record
|
|
|
|
* @return stdClass the entries with the rating attribute
|
|
|
|
*/
|
|
|
|
protected function enable_ratings(context_module $context, stdClass $activity, array $entries, stdClass $user) {
|
|
|
|
global $CFG;
|
|
|
|
$ratingoptions = (object)[
|
|
|
|
'context' => $context,
|
|
|
|
'component' => 'mod_data',
|
|
|
|
'ratingarea' => 'entry',
|
|
|
|
'items' => $entries,
|
|
|
|
'aggregate' => RATING_AGGREGATE_AVERAGE,
|
|
|
|
'scaleid' => $activity->scale,
|
|
|
|
'userid' => $user->id,
|
|
|
|
'returnurl' => $CFG->wwwroot . '/mod/data/view.php',
|
|
|
|
'assesstimestart' => $activity->assesstimestart,
|
|
|
|
'assesstimefinish' => $activity->assesstimefinish,
|
|
|
|
];
|
|
|
|
$rm = new rating_manager();
|
|
|
|
return $rm->get_ratings($ratingoptions);
|
|
|
|
}
|
2022-08-29 19:23:30 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Test parse add entry template parsing.
|
|
|
|
*
|
|
|
|
* @covers ::parse_add_entry
|
|
|
|
* @dataProvider parse_add_entry_provider
|
|
|
|
* @param string $templatecontent the template string
|
|
|
|
* @param string $expected expected output
|
|
|
|
* @param bool $newentry if it is a new entry or editing and existing one
|
|
|
|
*/
|
|
|
|
public function test_parse_add_entry(
|
|
|
|
string $templatecontent,
|
|
|
|
string $expected,
|
|
|
|
bool $newentry = false
|
|
|
|
) {
|
|
|
|
global $DB, $PAGE;
|
|
|
|
// Comments, tags, approval, user role.
|
|
|
|
$this->resetAfterTest();
|
|
|
|
|
|
|
|
$params = ['approval' => true];
|
|
|
|
|
|
|
|
$course = $this->getDataGenerator()->create_course();
|
|
|
|
$params['course'] = $course;
|
|
|
|
$activity = $this->getDataGenerator()->create_module('data', $params);
|
|
|
|
$author = $this->getDataGenerator()->create_and_enrol($course, 'teacher');
|
|
|
|
|
|
|
|
// Generate an entry.
|
|
|
|
$generator = $this->getDataGenerator()->get_plugin_generator('mod_data');
|
|
|
|
$fieldrecord = (object)[
|
|
|
|
'name' => 'myfield',
|
|
|
|
'type' => 'text',
|
2022-09-09 13:20:27 +02:00
|
|
|
'description' => 'This is a field'
|
2022-08-29 19:23:30 +02:00
|
|
|
];
|
|
|
|
$field = $generator->create_field($fieldrecord, $activity);
|
2022-09-09 13:20:27 +02:00
|
|
|
$otherfieldrecord = (object)['name' => 'otherfield', 'type' => 'text'];
|
|
|
|
$otherfield = $generator->create_field($otherfieldrecord, $activity);
|
2022-08-29 19:23:30 +02:00
|
|
|
|
|
|
|
if ($newentry) {
|
|
|
|
$entryid = null;
|
|
|
|
$entry = null;
|
|
|
|
} else {
|
|
|
|
$entryid = $generator->create_entry(
|
|
|
|
$activity,
|
2022-09-09 13:20:27 +02:00
|
|
|
[
|
|
|
|
$field->field->id => 'Example entry',
|
|
|
|
$otherfield->field->id => 'Another example',
|
|
|
|
],
|
2022-08-29 19:23:30 +02:00
|
|
|
0,
|
|
|
|
['Cats', 'Dogs']
|
|
|
|
);
|
|
|
|
$entry = (object)[
|
|
|
|
'd' => $activity->id,
|
|
|
|
'rid' => $entryid,
|
|
|
|
"field_{$field->field->id}" => "New value",
|
2022-09-09 13:20:27 +02:00
|
|
|
"field_{$otherfield->field->id}" => "Altered value",
|
2022-08-29 19:23:30 +02:00
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
$manager = manager::create_from_instance($activity);
|
|
|
|
|
|
|
|
// Some cooked variables for the regular expression.
|
|
|
|
$replace = [
|
|
|
|
'{fieldid}' => $field->field->id,
|
2022-09-09 13:20:27 +02:00
|
|
|
'{fieldname}' => $field->field->name,
|
|
|
|
'{fielddescription}' => $field->field->description,
|
|
|
|
'{otherid}' => $otherfield->field->id,
|
2022-08-29 19:23:30 +02:00
|
|
|
];
|
|
|
|
|
|
|
|
$processdata = (object)[
|
|
|
|
'generalnotifications' => ['GENERAL'],
|
2022-09-09 13:20:27 +02:00
|
|
|
'fieldnotifications' => [
|
|
|
|
$field->field->name => ['FIELD'],
|
|
|
|
$otherfield->field->name => ['OTHERFIELD'],
|
|
|
|
],
|
2022-08-29 19:23:30 +02:00
|
|
|
];
|
|
|
|
|
|
|
|
$parser = new template($manager, $templatecontent);
|
|
|
|
$result = $parser->parse_add_entry($processdata, $entryid, $entry);
|
|
|
|
|
|
|
|
// We don't want line breaks for the validations.
|
|
|
|
$result = str_replace("\n", '', $result);
|
|
|
|
$regexp = str_replace(array_keys($replace), array_values($replace), $expected);
|
|
|
|
$this->assertMatchesRegularExpression($regexp, $result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Data provider for test_parse_add_entry().
|
|
|
|
*
|
|
|
|
* @return array of scenarios
|
|
|
|
*/
|
|
|
|
public function parse_add_entry_provider(): array {
|
|
|
|
return [
|
|
|
|
// Editing an entry.
|
|
|
|
'Teacher editing entry tags tag' => [
|
|
|
|
'templatecontent' => 'Some ##tags## tag',
|
|
|
|
'expected' => '|GENERAL.*Some .*select .*tags.*Cats.* tag|',
|
|
|
|
'newentry' => false,
|
|
|
|
],
|
|
|
|
'Teacher editing entry field name tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield]] tag',
|
|
|
|
'expected' => '|GENERAL.*Some .*FIELD.*field_{fieldid}.*input.*New value.* tag|',
|
|
|
|
'newentry' => false,
|
|
|
|
],
|
|
|
|
'Teacher editing entry field#id tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield#id]] tag',
|
|
|
|
'expected' => '|GENERAL.*Some field_{fieldid} tag|',
|
|
|
|
'newentry' => false,
|
|
|
|
],
|
2022-09-09 13:20:27 +02:00
|
|
|
'Teacher editing field#name tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield#name]] tag',
|
|
|
|
'expected' => '|GENERAL.*Some {fieldname} tag|',
|
|
|
|
'newentry' => false,
|
|
|
|
],
|
|
|
|
'Teacher editing field#description tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield#description]] tag',
|
|
|
|
'expected' => '|GENERAL.*Some {fielddescription} tag|',
|
|
|
|
'newentry' => false,
|
|
|
|
],
|
|
|
|
'Teacher editing entry field otherfields tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield]] and ##otherfields## tag',
|
|
|
|
'expected' => '|GENERAL.*Some .*FIELD.*field_{fieldid}.*input.*New value.* '
|
|
|
|
. 'and .*OTHERFIELD.*field_{otherid}.*input.*Altered value.* tag|',
|
|
|
|
'newentry' => false,
|
|
|
|
],
|
2022-08-29 19:23:30 +02:00
|
|
|
// New entry.
|
|
|
|
'Teacher new entry tags tag' => [
|
|
|
|
'templatecontent' => 'Some ##tags## tag',
|
|
|
|
'expected' => '|GENERAL.*Some .*select .*tags\[\].* tag|',
|
|
|
|
'newentry' => true,
|
|
|
|
],
|
|
|
|
'Teacher new entry field name tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield]] tag',
|
|
|
|
'expected' => '|GENERAL.*Some .*FIELD.*field_{fieldid}.*input.*value="".* tag|',
|
|
|
|
'newentry' => true,
|
|
|
|
],
|
|
|
|
'Teacher new entry field#id name tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield#id]] tag',
|
|
|
|
'expected' => '|GENERAL.*Some field_{fieldid} tag|',
|
|
|
|
'newentry' => true,
|
|
|
|
],
|
2022-09-09 13:20:27 +02:00
|
|
|
'Teacher new entry field#name tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield#name]] tag',
|
|
|
|
'expected' => '|GENERAL.*Some {fieldname} tag|',
|
|
|
|
'newentry' => false,
|
|
|
|
],
|
|
|
|
'Teacher new entry field#description tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield#description]] tag',
|
|
|
|
'expected' => '|GENERAL.*Some {fielddescription} tag|',
|
|
|
|
'newentry' => false,
|
|
|
|
],
|
|
|
|
'Teacher new entry field otherfields tag' => [
|
|
|
|
'templatecontent' => 'Some [[myfield]] and ##otherfields## tag',
|
|
|
|
'expected' => '|GENERAL.*Some .*FIELD.*field_{fieldid}.*input.*New value.* '
|
|
|
|
. '.* and .*OTHERFIELD.*field_{otherid}.*input.*Altered value.* |',
|
|
|
|
'newentry' => false,
|
|
|
|
],
|
2022-08-29 19:23:30 +02:00
|
|
|
];
|
|
|
|
}
|
2022-07-08 18:07:38 +02:00
|
|
|
}
|