Skip to content

Commit

Permalink
feat: add generated_id_element
Browse files Browse the repository at this point in the history
  • Loading branch information
MHajoha committed Dec 19, 2024
1 parent dc39584 commit b251136
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 1 deletion.
3 changes: 2 additions & 1 deletion classes/form/elements/form_element.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
* @copyright 2022 TU Berlin, innoCampus {@link https://www.questionpy.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
#[array_polymorphic('kind', variants: [
#[array_polymorphic(discriminator: 'kind', variants: [
'checkbox' => checkbox_element::class,
'checkbox_group' => checkbox_group_element::class,
'group' => group_element::class,
Expand All @@ -38,6 +38,7 @@
'static_text' => static_text_element::class,
'input' => text_input_element::class,
'textarea' => text_area_element::class,
'id' => generated_id_element::class,
], fallbackvariant: fallback_element::class)]
abstract class form_element implements qpy_renderable {
}
60 changes: 60 additions & 0 deletions classes/form/elements/generated_id_element.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<?php
// This file is part of the QuestionPy Moodle plugin - https://questionpy.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 qtype_questionpy\form\elements;

use core\uuid;
use qtype_questionpy\form\context\render_context;


/**
* Generates a unique ID which won't change across form saves.
*
* @package qtype_questionpy
* @author Maximilian Haye
* @copyright 2024 TU Berlin, innoCampus {@link https://www.questionpy.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class generated_id_element extends form_element {
/**
* Trivial constructor.
*
* @param string $name
*/
public function __construct(
/** @var string $name */
public string $name
) {
}

/**
* Render this item to the given context.
*
* @param render_context $context target context
* @package qtype_questionpy
*/
public function render_to(render_context $context): void {
$mangledname = $context->mangle_name($this->name);
$value = $context->moodleform->optional_param(
$mangledname,
null,
PARAM_ALPHANUMEXT
) ?? $context->data[$this->name] ?? uuid::generate();

$context->add_element('hidden', $mangledname, $value);
$context->set_type($this->name, PARAM_ALPHANUMEXT);
}
}

0 comments on commit b251136

Please sign in to comment.