diff --git a/ajax/condition.php b/ajax/condition.php index 1733ab522..b37869c1c 100644 --- a/ajax/condition.php +++ b/ajax/condition.php @@ -41,13 +41,22 @@ http_response_code(400); die(); } + +// Build an empty item or load it from DB /** @var CommonDBTM $parent */ $parent = new $_POST['itemtype']; -$parent->getEmpty(); -$parent->fields = array_intersect_key($_POST, $parent->fields); +if ($parent::isNewID((int) $_POST['items_id'])) { + $parent->getEmpty(); + $parent->fields = array_intersect_key($_POST, $parent->fields); +} else { + if (!$parent->getFromDB((int) $_POST['items_id'])) { + http_response_code(404); + die(); + } +} // get an empty condition HTML table row $condition = new PluginFormcreatorCondition(); $condition->fields['itemtype'] = $_POST['itemtype']; -$condition->fields['items_id'] = $_POST['items_id']; +$condition->fields['items_id'] = (int) $_POST['items_id']; echo $condition->getConditionHtml($parent); diff --git a/inc/abstracttarget.class.php b/inc/abstracttarget.class.php index ae31a1841..860090386 100644 --- a/inc/abstracttarget.class.php +++ b/inc/abstracttarget.class.php @@ -2525,10 +2525,11 @@ final public static function showConditions(self $item) { $options = []; $item->initForm($item->getID(), $options); $options['candel'] = false; - $options['formoptions'] = sprintf('data-itemtype="%s"', self::getType()); + $options['formoptions'] = sprintf('data-itemtype="%s" data-id="%s"', self::getType(), $item->getID()); TemplateRenderer::getInstance()->display('@formcreator/pages/condition_for_item.html.twig', [ 'item' => $item, 'params' => $options, + 'parent' => $item, ]); return true; } diff --git a/inc/form.class.php b/inc/form.class.php index ce03dfc04..526013b2d 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1962,7 +1962,7 @@ public function isPublicAccess() : bool { * @param CommonDBTM $item * @return null|self */ - public static function getByItem(CommonDBTM $item): ?self { + public static function getByItem( $item): ?self { global $DB; if ($item::getType() == self::getType()) { diff --git a/inc/question.class.php b/inc/question.class.php index 9f94b4fd2..eec211ca9 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -179,7 +179,7 @@ public function getForbiddenStandardMassiveAction() { public static function showForForm(CommonDBTM $item, $withtemplate = '') { $options = [ 'candel' => false, - 'formoptions' => sprintf('data-itemtype="%s"', $item::getType()), + 'formoptions' => sprintf('data-itemtype="%s" data-id="%s"', $item::getType(), $item->getID()), ]; TemplateRenderer::getInstance()->display('@formcreator/pages/question_for_form.html.twig', [ 'item' => $item, @@ -760,6 +760,7 @@ public function showForm($ID, $options = []) { . ' method="post"' . ' action="javascript:;"' . ' data-itemtype="' . self::class . '"' + . ' data-id="' . $ID . '"' . '>'; echo '