openstamanager/src/HTMLBuilder/Wrapper/HTMLWrapper.php

246 lines
8.3 KiB
PHP
Raw Normal View History

<?php
namespace HTMLBuilder\Wrapper;
2018-09-19 10:44:32 +02:00
use Modules;
/**
* @since 2.3
*/
class HTMLWrapper implements WrapperInterface
{
public function before(&$values, &$extras)
{
$result = '';
// Valori particolari
$values['icon-before'] = isset($values['icon-before']) ? $this->parser($values, $extras, $values['icon-before']) : null;
$values['icon-after'] = isset($values['icon-after']) ? $this->parser($values, $extras, $values['icon-after']) : null;
// Generazione dell'etichetta
if (!empty($values['label'])) {
$result .= '
<div class="form-group">
<label for="'.prepareToField($values['id']).'">'.(empty($values['help']) ? $values['label'] : '<span class="tip" title="'.prepareToField($values['help']).'">'.$values['label'].' <i class="fa fa-question-circle-o"></i></span>').'</label>';
}
2019-07-05 12:28:19 +02:00
if (!empty($values['icon-before']) || !empty($values['icon-after']) || !empty($values['validation'])) {
$result .= '
2019-07-30 16:51:33 +02:00
<div class="input-group has-feedback">';
if (!empty($values['icon-before'])) {
$result .= '
<span class="input-group-addon before'.(!empty($values['icon-custom']) ? ' '.$values['icon-custom'] : '').'">'.$values['icon-before'].'</span>';
}
}
return $result;
}
public function after(&$values, &$extras)
{
2019-07-05 12:28:19 +02:00
$rand = rand(0, 99);
$pseudo_id = $values['id'].$rand;
$result = '';
2019-07-05 12:28:19 +02:00
if (!empty($values['icon-before']) || !empty($values['icon-after']) || !empty($values['validation'])) {
if (!empty($values['icon-after'])) {
$result .= '
<span class="input-group-addon after'.(!empty($values['icon-custom']) ? ' '.$values['icon-custom'] : '').'">'.$values['icon-after'].'</span>';
}
2019-07-05 12:28:19 +02:00
if (!empty($values['validation'])) {
$result .= '
2019-07-30 16:51:33 +02:00
<span class="input-group-addon after" id="'.$pseudo_id.'_validation">
2019-07-05 12:28:19 +02:00
<span class="tip" title="'.tr('Validazione').'"><i class="fa fa-question-circle "></i></span>
</span>';
}
$result .= '
</div>';
unset($values['icon-before']);
unset($values['icon-after']);
unset($values['icon-custom']);
}
if (!empty($values['help']) && !empty($values['show-help'])) {
$result .= '
<span class="help-block pull-left"><small>'.$values['help'].'</small></span>';
unset($values['help']);
unset($values['show-help']);
}
2019-07-05 12:28:19 +02:00
$values['data-parsley-errors-container'] = '#'.$pseudo_id.'-errors';
$result .= '
<div id="'.$values['id'].$rand.'-errors"></div>';
if (!empty($values['label'])) {
$result .= '
</div>';
unset($values['label']);
}
2019-07-05 12:28:19 +02:00
if (!empty($values['validation'])) {
$values['valid'] = '1';
$value = explode('|', $values['validation']);
$name = $value[0];
$id_module = $value[1] ?: '$id_module$';
$id_record = $value[2] ?: '$id_record$';
2019-07-05 12:28:19 +02:00
$result .= '
<script>
var container = $("#'.$pseudo_id.'_validation");
container.closest(".input-group").find("input").on("change", function(){
var input = $(this);
var value = input.val();
2019-07-05 12:28:19 +02:00
var container = $("#'.$pseudo_id.'_validation");
var parent = container.closest(".input-group");
var message = container.find("span");
var icon = container.find("i");
2019-07-05 12:28:19 +02:00
icon.attr("class", "fa fa-spinner fa-spin");
$.ajax({
url: globals.rootdir + "/actions.php",
type: "post",
2019-07-05 12:28:19 +02:00
data: {
id_module: "'.$id_module.'",
id_record: "'.$id_record.'",
name: "'.$name.'",
2019-07-05 12:28:19 +02:00
value: value,
op: "validate",
},
success: function(data) {
data = JSON.parse(data);
if (value == "") {
2019-07-30 16:51:33 +02:00
parent.removeClass("has-success").removeClass("has-error");
icon.attr("class", "fa fa-question-circle");
message.tooltipster("content", "'.tr('Validazione').'");
} else {
2019-07-30 16:51:33 +02:00
if(data.result) {
icon.attr("class", "fa fa-check");
parent.addClass("has-success").removeClass("has-error");
} else {
icon.attr("class", "fa fa-close");
parent.addClass("has-error").removeClass("has-success");
}
message.tooltipster("content", data.message);
input.attr("valid", +(data.result));
2019-07-05 12:28:19 +02:00
2019-07-30 16:51:33 +02:00
if (data.fields) {
fields = data.fields;
Object.keys(fields).forEach(function(element) {
var single_input = $("[name=" + element + "]");
if (!single_input.val()) single_input.val(fields[element]);
2019-07-30 16:51:33 +02:00
});
}
2019-07-05 12:28:19 +02:00
}
}
});
});
</script>';
}
return $result;
}
protected function parser(&$values, &$extras, $string)
{
$result = $string;
if (starts_with($string, 'add|')) {
$result = $this->add($values, $extras, $string);
$values['icon-custom'] = 'no-padding';
} elseif (starts_with($string, 'choice|')) {
$result = $this->choice($values, $extras, $string);
$values['icon-custom'] = 'no-padding';
}
return $result;
}
protected function add(&$values, &$extras, $string)
{
$result = null;
$pieces = explode('|', $string);
2018-09-19 10:44:32 +02:00
$module_id = $pieces[1];
$module = Modules::get($module_id);
2018-06-23 15:41:32 +02:00
$get = !empty($pieces[2]) ? '&'.$pieces[2] : null;
$classes = !empty($pieces[3]) ? ' '.$pieces[3] : null;
$btn_extras = !empty($pieces[4]) ? ' '.$pieces[4] : null;
if (in_array('disabled', $extras)) {
$classes .= ' disabled';
$btn_extras .= ' disabled';
}
2018-08-11 15:37:38 +02:00
if (in_array($module->permission, ['r', 'rw'])) {
$result = '
<button '.$btn_extras.' data-href="'.ROOTDIR.'/add.php?id_module='.$module->id.$get.'&select='.$values['id'].'&ajax=yes" data-target="#bs-popup2" data-toggle="modal" data-title="'.tr('Aggiungi').'" type="button" class="btn'.$classes.'">
<i class="fa fa-plus"></i>
</button>';
}
return $result;
}
protected function choice(&$values, &$extras, $string)
{
$result = null;
$pieces = explode('|', $string);
$type = $pieces[1];
2018-06-23 15:41:32 +02:00
$extra = !empty($pieces[3]) ? $pieces[3] : null;
if ($type == 'untprc') {
$choices = [
[
'id' => 'PRC',
'descrizione' => '%',
],
[
'id' => 'UNT',
'descrizione' => currency(),
],
];
} elseif ($type == 'email') {
$choices = [
[
'id' => 'a',
'descrizione' => tr('A').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',
],
[
'id' => 'cc',
'descrizione' => tr('CC').'&nbsp;&nbsp;',
],
[
'id' => 'bcc',
'descrizione' => tr('CCN'),
],
];
}
$value = (empty($pieces[2]) || !in_array($pieces[2], array_column($choices, 'id'))) ? $choices[0]['id'] : $pieces[2];
$result = '{[ "type": "select", "name": "tipo_'.prepareToField($values['name']).'", "value": "'.prepareToField($value).'", "values": '.json_encode($choices).', "class": "no-search", "extra": "'.$extra.'" ]}';
$result = \HTMLBuilder\HTMLBuilder::replace($result);
return $result;
}
}