Skip to content

Commit 9f524eb

Browse files
committed
Merge remote-tracking branch 'origin/support/2.13.0' into support/2.14.0
2 parents e15f454 + 7df2f7a commit 9f524eb

4 files changed

Lines changed: 82 additions & 11 deletions

File tree

inc/field/checkboxesfield.class.php

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,23 @@ public function showForm(array $options): void {
5252

5353
$value = [];
5454
$items = json_decode($this->question->fields['default_values']);
55-
foreach ($items as $item) {
56-
if (trim($item) === '') {
57-
continue;
58-
}
59-
if (!in_array($item, $this->getAvailableValues())) {
60-
continue;
55+
if ($items !== null) {
56+
// when we edit an existing question
57+
foreach ($items as $item) {
58+
if (trim($item) === '') {
59+
continue;
60+
}
61+
if (!in_array($item, $this->getAvailableValues())) {
62+
continue;
63+
}
64+
$value[] = $item;
6165
}
62-
$value[] = $item;
66+
$this->question->fields['default_values'] = implode("\r\n", $value);
67+
$this->deserializeValue($this->question->fields['default_values']);
6368
}
64-
$this->question->fields['default_values'] = implode("\r\n", $value);
6569
$this->question->fields['values'] = json_decode($this->question->fields['values']);
6670
$this->question->fields['values'] = is_array($this->question->fields['values']) ? $this->question->fields['values'] : [];
6771
$this->question->fields['values'] = implode("\r\n", $this->question->fields['values']);
68-
$this->deserializeValue($this->question->fields['default_values']);
6972

7073
$parameters = $this->getParameters();
7174
TemplateRenderer::getInstance()->display($template, [

inc/field/radiosfield.class.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ public function showForm(array $options): void {
5151
$this->question->fields['values'] = json_decode($this->question->fields['values']);
5252
$this->question->fields['values'] = is_array($this->question->fields['values']) ? $this->question->fields['values'] : [];
5353
$this->question->fields['values'] = implode("\r\n", $this->question->fields['values']);
54-
$this->question->fields['default_values'] = Html::entities_deep($this->question->fields['default_values']);
5554
$this->deserializeValue($this->question->fields['default_values']);
5655
TemplateRenderer::getInstance()->display($template, [
5756
'item' => $this->question,

inc/field/selectfield.class.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ public function showForm(array $options): void {
4949
$this->question->fields['values'] = json_decode($this->question->fields['values']);
5050
$this->question->fields['values'] = is_array($this->question->fields['values']) ? $this->question->fields['values'] : [];
5151
$this->question->fields['values'] = implode("\r\n", $this->question->fields['values']);
52-
$this->question->fields['default_values'] = Html::entities_deep($this->question->fields['default_values']);
5352
$this->deserializeValue($this->question->fields['default_values']);
5453
TemplateRenderer::getInstance()->display($template, [
5554
'item' => $this->question,

tests/src/AbstractItilTargetTestCase.php

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@
3131

3232
namespace GlpiPlugin\Formcreator\Tests;
3333

34+
use PluginFormcreatorForm;
3435
use PluginFormcreatorFormanswer;
36+
use PluginFormcreatorTarget_Actor;
37+
use Ticket_User;
3538

3639
abstract class AbstractItilTargetTestCase extends CommonTargetTestCase {
3740
public function beforeTestMethod($method) {
@@ -120,4 +123,71 @@ public function testSetTargetPriority($formanswerData, $expected) {
120123
$generatedTarget = $formanswer->targetList[0]; // Assume the target has been generated
121124
$generatedTarget->fields['priority'] = $expected;
122125
}
126+
127+
public function providerSetTargetRequesters() {
128+
$question = $this->getQuestion([
129+
'fieldtype' => 'email',
130+
]);
131+
$form = PluginFormcreatorForm::getByItem($question);
132+
$target = $this->newTestedInstance();
133+
$target->add([
134+
'name' => $this->getUniqueString(),
135+
'plugin_formcreator_forms_id' => $form->getID(),
136+
]);
137+
$targetActor = new PluginFormcreatorTarget_Actor();
138+
$targetActor->add([
139+
'itemtype' => $target->getType(),
140+
'items_id' => $target->getID(),
141+
'actor_role' => PluginFormcreatorTarget_Actor::ACTOR_ROLE_REQUESTER,
142+
'actor_type' => PluginFormcreatorTarget_Actor::ACTOR_TYPE_QUESTION_PERSON,
143+
'actor_value_4' => $question->getID(),
144+
]);
145+
$this->boolean($targetActor->isNewItem())->isFalse(json_encode($_SESSION['MESSAGE_AFTER_REDIRECT'], JSON_PRETTY_PRINT));
146+
147+
$this->login('glpi', 'glpi');
148+
yield 'One email requester' => [
149+
'formanswerData' => [
150+
PluginFormcreatorForm::getForeignKeyField() => $form->getID(),
151+
'formcreator_field_' . $question->getID() => 'test@example.net',
152+
],
153+
'expected' => [
154+
[
155+
'users_id' => 0,
156+
'alternative_email' => 'test@example.net',
157+
],
158+
],
159+
];
160+
}
161+
162+
/**
163+
* @dataProvider providerSetTargetRequesters
164+
*/
165+
public function testSetTargetRequesters($formanswerData, $expected) {
166+
$formanswer = new PluginFormcreatorFormanswer();
167+
$formanswer->add($formanswerData);
168+
$_SESSION['MESSAGE_AFTER_REDIRECT'] = [];
169+
$this->boolean($formanswer->isNewItem())->isFalse(json_encode($_SESSION['MESSAGE_AFTER_REDIRECT'], JSON_PRETTY_PRINT));
170+
$generatedTarget = $formanswer->targetList[0]; // Assume the target has been generated
171+
$instance = $this->newTestedInstance();
172+
$relationClass = $this->callPrivateMethod($instance, 'getItem_User');
173+
$targetClass = $instance::getTargetItemtypeName();
174+
$ticketUser = new $relationClass;
175+
if (count($expected) === 0) {
176+
$rows = $ticketUser->find([
177+
$targetClass::getForeignKeyField() => $generatedTarget->getID(),
178+
'type' => $relationClass::REQUESTER,
179+
]);
180+
$this->array($rows)->hasSize(0);
181+
} else {
182+
foreach ($expected as $searched) {
183+
$rows = $ticketUser->find([
184+
$targetClass::getForeignKeyField() => $generatedTarget->getID(),
185+
'type' => $relationClass::REQUESTER,
186+
'users_id' => $searched['users_id'],
187+
'alternative_email' => $searched['alternative_email'],
188+
]);
189+
$this->array($rows)->hasSize(1);
190+
}
191+
}
192+
}
123193
}

0 commit comments

Comments
 (0)