Skip to content

Commit

Permalink
feat: use twig to edit questions
Browse files Browse the repository at this point in the history
  • Loading branch information
btry committed Mar 17, 2022
1 parent 0c83da0 commit 338d5fe
Show file tree
Hide file tree
Showing 66 changed files with 2,514 additions and 901 deletions.
5 changes: 2 additions & 3 deletions ajax/question.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,13 @@
include ('../../../inc/includes.php');
Session::checkRight('entity', UPDATE);

$question_id = $_REQUEST['id'] ?? 0;
$question = new PluginFormcreatorQuestion();
if (empty($_REQUEST['question_id'])) {
$question_id = 0;
if ($question_id == 0) {
$question->getEmpty();
$sectionFk = PluginFormcreatorSection::getForeignKeyField();
$question->fields[$sectionFk] = (int) $_REQUEST['plugin_formcreator_sections_id'];
} else {
$question_id = (int) $_REQUEST['question_id'];
$question->getFromDB($question_id);
}
$question->showForm($question_id);
29 changes: 15 additions & 14 deletions ajax/question_design.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,35 +32,36 @@
include ('../../../inc/includes.php');
Session::checkRight('entity', UPDATE);

if (!isset($_REQUEST['questionId'])) {
if (!isset($_REQUEST['id'])) {
http_response_code(400);
exit();
}
if (!isset($_REQUEST['questionType'])) {
if (!isset($_REQUEST['fieldtype'])) {
http_response_code(400);
exit();
}

$question = new PluginFormcreatorQuestion();
$question->getEmpty();
if (!$question->isNewID((int) $_REQUEST['questionId']) && !$question->getFromDB((int) $_REQUEST['questionId'])) {
if (!$question->isNewID((int) $_REQUEST['id']) && !$question->getFromDB((int) $_REQUEST['id'])) {
http_response_code(400);
exit();
}

$question->fields['fieldtype'] = $_REQUEST['questionType'];
// Modify the question to reflect changes in the form
$question->fields['plugin_formcreator_sections_id'] = (int) $_REQUEST['plugin_formcreator_sections_id'];
foreach (array_keys($question->fields) as $key) {
if (!isset($_REQUEST[$key])) {
continue;
}
$question->fields[$key] = $_REQUEST[$key];
}
$field = PluginFormcreatorFields::getFieldInstance(
$question->fields['fieldtype'],
$_REQUEST['fieldtype'],
$question
);
$json = [
'label' => '',
'field' => '',
'additions' => '',
'may_be_empty' => false,
];
$question->fields['fieldtype'] = '';
if ($field !== null) {
$field->deserializeValue($question->fields['default_values']);
$json = $field->getDesignSpecializationField();
$question->fields['fieldtype'] = $_REQUEST['fieldtype'];
}
echo json_encode($json);
$question->showForm($question->getID());
1 change: 0 additions & 1 deletion ajax/target_actor.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
die();
}


switch ($_POST['action']) {
case 'add':
$id = (int) $_POST['id'];
Expand Down
46 changes: 2 additions & 44 deletions inc/abstractfield.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,16 +52,6 @@ public function __construct(PluginFormcreatorQuestion $question) {
$this->question = $question;
}

public function getDesignSpecializationField(): array {
return [
'label' => '',
'field' => '',
'additions' => $this->getParametersHtmlForDesign(),
'may_be_empty' => false,
'may_be_required' => static::canRequire(),
];
}

public function prepareQuestionInputForSave($input) {
$this->value = $input['default_values'];
return $input;
Expand Down Expand Up @@ -268,43 +258,11 @@ protected function getParametersHtmlForDesign() {
return '';
}

$question = new PluginFormcreatorQuestion();
$question->getFromDB($this->question->getID());
$form = PluginFormcreatorForm::getByItem($question);

/** @var integer $column 0 for 2 first columns, 1 for 2 right ones */
$column = 0;
$rowSize = 2;
$additions = '';
foreach ($parameters as $parameter) {
if ($column == 0) {
$additions .= '<tr class="plugin_formcreator_question_specific">';
}
$parameterSize = 1 + $parameter->getParameterFormSize();
if ($column + $parameterSize > $rowSize) {
// The parameter needs more room than available in the current row
if ($column < $rowSize) {
// fill the remaining of the row
$additions .= str_repeat('<td></td><td></td>', $rowSize - $column);
// Close current row and open an new one
$additions .= '</tr><tr class="plugin_formcreator_question_specific">';
$column = 0;
}
}
$additions .= $parameter->getParameterForm($form, $question);
$column += $parameterSize;
if ($column == $rowSize) {
// Finish the row
$additions .= '</tr>';
$column = 0;
}
}
if ($column < $rowSize) {
// fill the remaining of the row
$additions .= str_repeat('<td></td><td></td>', $rowSize - $column);
// Close current row and open an new one
$additions .= "</tr>";
$additions .= $parameter->getParameterForm($this->question);
}

return $additions;
}

Expand Down
46 changes: 9 additions & 37 deletions inc/field/actorfield.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
use User;
use Session;
use GlpiPlugin\Formcreator\Exception\ComparisonException;
use Glpi\Application\View\TemplateRenderer;

/**
* Actors field is a field which accepts several users. Those users may be
Expand All @@ -49,44 +50,15 @@ public function isPrerequisites(): bool {
return true;
}

public function getDesignSpecializationField(): array {
$rand = mt_rand();

$label = '';
$field = '';

$additions = '<tr class="plugin_formcreator_question_specific">';
$additions .= '<td>';
$additions .= '<label for="dropdown_default_values' . $rand . '">';
$additions .= __('Default values');
$additions .= '<small>(' . __('One per line', 'formcreator') . ')</small>';
$additions .= '</label>';
$additions .= '</td>';
$additions .= '<td>';
$additions .= Html::textarea([
'name' => 'default_values',
'id' => 'default_values',
'value' => Html::entities_deep($this->getValueForDesign()),
'cols' => '50',
'display' => false,
public function showForm(array $options): void {
$template = '@formcreator/field/' . $this->question->fields['fieldtype'] . 'field.html.twig';

$this->question->fields['default_values'] = Html::entities_deep($this->getValueForDesign());
$this->deserializeValue($this->question->fields['default_values']);
TemplateRenderer::getInstance()->display($template, [
'item' => $this->question,
'params' => $options,
]);
$additions .= '</td>';
$additions .= '<td>';
$additions .= '</td>';
$additions .= '<td>';
$additions .= '</td>';
$additions .= '</tr>';

$common = parent::getDesignSpecializationField();
$additions .= $common['additions'];

return [
'label' => $label,
'field' => $field,
'additions' => $additions,
'may_be_empty' => false,
'may_be_required' => static::canRequire(),
];
}

public static function getName(): string {
Expand Down
71 changes: 19 additions & 52 deletions inc/field/checkboxesfield.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,66 +37,30 @@
use Toolbox;
use Session;
use PluginFormcreatorQuestionRange;
use Glpi\Application\View\TemplateRenderer;

class CheckboxesField extends PluginFormcreatorAbstractField
{
public function isPrerequisites(): bool {
return true;
}

public function getDesignSpecializationField(): array {
$rand = mt_rand();

$label = '';
$field = '';

$additions = '<tr class="plugin_formcreator_question_specific">';
$additions .= '<td>';
$additions .= '<label for="default_values' . $rand . '">';
$additions .= __('Default values');
$additions .= '<small>(' . __('One per line', 'formcreator') . ')</small>';
$additions .= '</label>';
$additions .= '</td>';
$additions .= '<td>';
$additions .= Html::textarea([
'name' => 'default_values',
'id' => 'default_values',
'value' => Html::entities_deep($this->getValueForDesign()),
'cols' => '50',
'display' => false,
]);
$additions .= '</td>';
$additions .= '<td>';
$additions .= '<label for="values' . $rand . '">';
$additions .= __('Values');
$additions .= '<small>(' . __('One per line', 'formcreator') . ')</small>';
$additions .= '</label>';
$additions .= '</td>';
$additions .= '<td>';
$value = json_decode($this->question->fields['values']);
if ($value === null) {
$value = [];
}
$additions .= Html::textarea([
'name' => 'values',
'id' => 'values',
'value' => implode("\r\n", $value),
'cols' => '50',
'display' => false,
]);
$additions .= '</td>';
$additions .= '</tr>';

$common = parent::getDesignSpecializationField();
$additions .= $common['additions'];
public function showForm(array $options): void {
$template = '@formcreator/field/' . $this->question->fields['fieldtype'] . 'field.html.twig';

return [
'label' => $label,
'field' => $field,
'additions' => $additions,
'may_be_empty' => false,
'may_be_required' => static::canRequire(),
];
$this->question->fields['values'] = json_decode($this->question->fields['values']);
$this->question->fields['values'] = is_array($this->question->fields['values']) ? $this->question->fields['values'] : [];
$this->question->fields['values'] = implode("\r\n", $this->question->fields['values']);
$this->question->fields['default_values'] = Html::entities_deep($this->getValueForDesign());
$this->deserializeValue($this->question->fields['default_values']);

$parameters = $this->getParameters();
TemplateRenderer::getInstance()->display($template, [
'item' => $this->question,
'question_params' => $parameters,
'params' => $options,
]);
}

public function getRenderedHtml($domain, $canEdit = true): string {
Expand Down Expand Up @@ -322,7 +286,10 @@ public function getEmptyParameters(): array {
$range = new PluginFormcreatorQuestionRange();
$range->setField($this, [
'fieldName' => 'range',
'label' => __('Range', 'formcreator'),
'label' => [
__('Range min', 'formcreator'),
__('Range max', 'formcreator'),
],
'fieldType' => ['text'],
]);
return [
Expand Down
77 changes: 43 additions & 34 deletions inc/field/datefield.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,9 @@
use PluginFormcreatorAbstractField;
use Html;
use DateTime;
use Toolbox;
use Session;
use GlpiPlugin\Formcreator\Exception\ComparisonException;

use Glpi\Application\View\TemplateRenderer;

class DateField extends PluginFormcreatorAbstractField
{
Expand All @@ -48,40 +47,50 @@ public function isPrerequisites(): bool {
return true;
}

public function getDesignSpecializationField(): array {
$rand = mt_rand();

$label = '';
$field = '';

$additions = '<tr class="plugin_formcreator_question_specific">';
$additions .= '<td>';
$additions .= '<label for="dropdown_default_values' . $rand . '">';
$additions .= __('Default values');
$additions .= '</label>';
$additions .= '</td>';
$additions .= '<td>';
$value = Html::entities_deep($this->question->fields['default_values']);
$additions .= Html::showDateField('default_values', ['value' => $value, 'display' => false]);
$additions .= '</td>';
$additions .= '<td>';
$additions .= '</td>';
$additions .= '<td>';
$additions .= '</td>';
$additions .= '</tr>';

$common = parent::getDesignSpecializationField();
$additions .= $common['additions'];

return [
'label' => $label,
'field' => $field,
'additions' => $additions,
'may_be_empty' => false,
'may_be_required' => static::canRequire(),
];
public function showForm(array $options): void {
$template = '@formcreator/field/' . $this->question->fields['fieldtype'] . 'field.html.twig';

$this->question->fields['default_values'] = Html::entities_deep($this->question->fields['default_values']);
$this->deserializeValue($this->question->fields['default_values']);
TemplateRenderer::getInstance()->display($template, [
'item' => $this->question,
'params' => $options,
]);
}

// public function getDesignSpecializationField(): string {
// $templateFile = '@formcreator/field/datefield.html.twig';
// $question = $this->question;
// $question->fields['default_values'] = Html::entities_deep($question->fields['default_values']);

// $additions = TemplateRenderer::getInstance()->renderBlock(
// $templateFile,
// 'additions',
// [
// 'item' => $question,
// ]
// );

// $common = parent::getDesignSpecializationField();
// $additions .= $common['additions'];

// return [
// 'field' => TemplateRenderer::getInstance()->renderBlock(
// $templateFile,
// 'subtype'
// ),
// 'additions' => $additions,
// 'required' => TemplateRenderer::getInstance()->renderBlock(
// $templateFile,
// 'required'
// ),
// 'empty' => TemplateRenderer::getInstance()->renderBlock(
// $templateFile,
// 'empty'
// ),
// ];
// }

public function getRenderedHtml($domain, $canEdit = true): string {
if (!$canEdit) {
return $this->value;
Expand Down
Loading

0 comments on commit 338d5fe

Please sign in to comment.