mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-06-05 22:09:38 +02:00
Commit iniziale (r1662)
Migrazione da SourceForge, partendo dal commit 1662 della carrtella trunk/openstamanager.
This commit is contained in:
89
lib/classes/HTMLBuilder/Handler/ChoicesHandler.php
Normal file
89
lib/classes/HTMLBuilder/Handler/ChoicesHandler.php
Normal file
@@ -0,0 +1,89 @@
|
||||
<?php
|
||||
|
||||
namespace HTMLBuilder\Handler;
|
||||
|
||||
// Utilizzo della funzione prepareToField (PHP 5.6+)
|
||||
// use function \HTMLBuilder\prepareToField;
|
||||
|
||||
/**
|
||||
* @since 2.3
|
||||
*/
|
||||
class ChoicesHandler implements HandlerInterface
|
||||
{
|
||||
public function handle(&$values, &$extras)
|
||||
{
|
||||
$result = $this->{$values['type']}($values, $extras);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function checkbox(&$values, &$extras)
|
||||
{
|
||||
unset($values['class'][0]);
|
||||
|
||||
$values['value'] = (empty($values['value']) || $values['value'] == 'off') ? false : true;
|
||||
|
||||
if (!empty($values['value']) && !in_array('checked', $extras)) {
|
||||
$extras[] = 'checked';
|
||||
}
|
||||
|
||||
if (in_array('readonly', $extras)) {
|
||||
$extras[] = 'disabled';
|
||||
}
|
||||
|
||||
$values['placeholder'] = (isset($values['placeholder'])) ? $values['placeholder'] : $values['label'];
|
||||
|
||||
$result .= '
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">
|
||||
<input |attr| onchange="$(this).parent().find(\'[type=hidden]\').val( + this.checked)">
|
||||
<input type="hidden" name="|name|" value="|value|">
|
||||
</span>
|
||||
<input type="text" class="form-control" placeholder="|placeholder|" disabled>
|
||||
</div>';
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function bootswitch(&$values, &$extras)
|
||||
{
|
||||
unset($values['class'][0]);
|
||||
|
||||
$values['class'][] = 'bootstrap-switch';
|
||||
|
||||
$values['value'] = (empty($values['value']) || $values['value'] == 'off') ? false : true;
|
||||
|
||||
if (!empty($values['value']) && !in_array('checked', $extras)) {
|
||||
$extras[] = 'checked';
|
||||
}
|
||||
|
||||
return '
|
||||
<div class="input-group">
|
||||
<input type="checkbox" |attr|>
|
||||
<input type="hidden" name="checkbox['.\HTMLBuilder\prepareToField($values['name']).']" value="'.\HTMLBuilder\prepareToField($values['value']).'">
|
||||
</div>';
|
||||
}
|
||||
|
||||
protected function radio(&$values, &$extras)
|
||||
{
|
||||
$result = '';
|
||||
|
||||
$originalExtras = $extras;
|
||||
|
||||
$radios = json_decode('{'.$values['values'].'}', true);
|
||||
|
||||
$values['value'] = !array_key_exists($values['value'], $radios) ? array_keys($radios)[0] : $values['value'];
|
||||
|
||||
foreach ($radios as $key => $value) {
|
||||
$checked = false;
|
||||
if ($key === $values['value']) {
|
||||
$checked = true;
|
||||
}
|
||||
|
||||
$result .= '
|
||||
<input type="radio" class="bootstrap-switch" name="'.\HTMLBuilder\prepareToField($values['name']).'" id="'.\HTMLBuilder\prepareToField($values['id'].'_'.$key).'" value="'.\HTMLBuilder\prepareToField($key).'" data-label-text="'.\HTMLBuilder\prepareToField($value).'"'.($checked ? ' checked' : '').'>';
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
77
lib/classes/HTMLBuilder/Handler/DateHandler.php
Normal file
77
lib/classes/HTMLBuilder/Handler/DateHandler.php
Normal file
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace HTMLBuilder\Handler;
|
||||
|
||||
/**
|
||||
* @since 2.3
|
||||
*/
|
||||
class DateHandler implements HandlerInterface
|
||||
{
|
||||
public function handle(&$values, &$extras)
|
||||
{
|
||||
// Impostazione alla data corrente se il contenuto corrisponde a "now"
|
||||
if ($values['value'] == '-now-') {
|
||||
$values['value'] = date(\Translator::getEnglishFormatter()->getTimestampPattern());
|
||||
}
|
||||
|
||||
if ($values['max-date'] == '-now-') {
|
||||
$values['max-date'] = date(\Translator::getEnglishFormatter()->getTimestampPattern());
|
||||
}
|
||||
|
||||
if ($values['min-date'] == '-now-') {
|
||||
$values['min-date'] = date(\Translator::getEnglishFormatter()->getTimestampPattern());
|
||||
}
|
||||
|
||||
if (\Translator::getEnglishFormatter()->isTimestamp($values['value']) && $values['type'] == 'timestamp') {
|
||||
$values['value'] = \Translator::timestampToLocale($values['value']);
|
||||
} elseif (\Translator::getEnglishFormatter()->isDate($values['value']) && $values['type'] == 'date') {
|
||||
$values['value'] = \Translator::dateToLocale($values['value']);
|
||||
} elseif (\Translator::getEnglishFormatter()->isTime($values['value']) && $values['type'] == 'time') {
|
||||
$values['value'] = \Translator::timeToLocale($values['value']);
|
||||
}
|
||||
|
||||
$resetValues = [
|
||||
\Translator::timestampToLocale('0000-00-00 00:00:00'),
|
||||
\Translator::dateToLocale('0000-00-00'),
|
||||
\Translator::timeToLocale('00:00:00'),
|
||||
];
|
||||
|
||||
$values['value'] = in_array($values['value'], $resetValues) ? '' : $values['value'];
|
||||
|
||||
$result = $this->{$values['type']}($values, $extras);
|
||||
|
||||
$values['type'] = 'text';
|
||||
|
||||
if (empty($result)) {
|
||||
$result = '
|
||||
<input |attr|>';
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function timestamp(&$values, &$extras)
|
||||
{
|
||||
$values['class'][] = 'text-center';
|
||||
$values['class'][] = 'timestamp-picker';
|
||||
|
||||
$values['value'] = (\Translator::getLocaleFormatter()->isTimestamp($values['value'])) ? $values['value'] : '';
|
||||
}
|
||||
|
||||
protected function date(&$values, &$extras)
|
||||
{
|
||||
$values['class'][] = 'text-center';
|
||||
$values['class'][] = 'datepicker';
|
||||
$values['class'][] = 'date-mask';
|
||||
|
||||
$values['value'] = (\Translator::getLocaleFormatter()->isDate($values['value'])) ? $values['value'] : '';
|
||||
}
|
||||
|
||||
protected function time(&$values, &$extras)
|
||||
{
|
||||
$values['class'][] = 'text-center';
|
||||
$values['class'][] = 'timepicker';
|
||||
|
||||
$values['value'] = (\Translator::getLocaleFormatter()->isTime($values['value'])) ? $values['value'] : '';
|
||||
}
|
||||
}
|
98
lib/classes/HTMLBuilder/Handler/DefaultHandler.php
Normal file
98
lib/classes/HTMLBuilder/Handler/DefaultHandler.php
Normal file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace HTMLBuilder\Handler;
|
||||
|
||||
/**
|
||||
* @since 2.3
|
||||
*/
|
||||
class DefaultHandler implements HandlerInterface
|
||||
{
|
||||
public function handle(&$values, &$extras)
|
||||
{
|
||||
if (in_array($values['type'], get_class_methods($this))) {
|
||||
$result = $this->{$values['type']}($values, $extras);
|
||||
} else {
|
||||
$result = $this->custom($values, $extras);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function text(&$values, &$extras)
|
||||
{
|
||||
return '
|
||||
<input |attr|>';
|
||||
}
|
||||
|
||||
protected function file(&$values, &$extras)
|
||||
{
|
||||
return $this->text($values, $extras);
|
||||
}
|
||||
|
||||
protected function password(&$values, &$extras)
|
||||
{
|
||||
return $this->text($values, $extras);
|
||||
}
|
||||
|
||||
protected function hidden(&$values, &$extras)
|
||||
{
|
||||
$original = $values;
|
||||
|
||||
$values = [];
|
||||
$values['type'] = $original['type'];
|
||||
$values['value'] = $original['value'];
|
||||
$values['name'] = $original['name'];
|
||||
$values['class'] = [];
|
||||
|
||||
return $this->text($values, $extras);
|
||||
}
|
||||
|
||||
protected function email(&$values, &$extras)
|
||||
{
|
||||
$values['class'][] = 'email-mask';
|
||||
|
||||
$values['type'] = 'text';
|
||||
|
||||
return $this->text($values, $extras);
|
||||
}
|
||||
|
||||
protected function number(&$values, &$extras)
|
||||
{
|
||||
$values['class'][] = 'inputmask-decimal';
|
||||
|
||||
$values['value'] = !empty($values['value']) ? $values['value'] : 0;
|
||||
|
||||
$decimals = true;
|
||||
if (isset($values['decimals'])) {
|
||||
if (is_numeric($values['decimals'])) {
|
||||
$decimals = $values['decimals'];
|
||||
} elseif (starts_with($values['decimals'], 'qta')) {
|
||||
$parts = explode('|', $values['decimals']);
|
||||
$values['min-value'] = isset($parts[1]) ? $parts[1] : 1;
|
||||
|
||||
$decimals = \Settings::get('Cifre decimali per quantità');
|
||||
$values['decimals'] = $decimals;
|
||||
}
|
||||
}
|
||||
|
||||
$values['value'] = (\Translator::getEnglishFormatter()->isNumber($values['value'])) ? \Translator::numberToLocale($values['value'], $decimals) : $values['value'];
|
||||
|
||||
$values['type'] = 'text';
|
||||
|
||||
return $this->text($values, $extras);
|
||||
}
|
||||
|
||||
protected function custom(&$values, &$extras)
|
||||
{
|
||||
return '
|
||||
<span |attr|>|value|</span>';
|
||||
}
|
||||
|
||||
protected function textarea(&$values, &$extras)
|
||||
{
|
||||
$values['class'][] = 'autosize';
|
||||
|
||||
return '
|
||||
<textarea |attr|>|value|</textarea>';
|
||||
}
|
||||
}
|
12
lib/classes/HTMLBuilder/Handler/HandlerInterface.php
Normal file
12
lib/classes/HTMLBuilder/Handler/HandlerInterface.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace HTMLBuilder\Handler;
|
||||
|
||||
/**
|
||||
*
|
||||
* @since 2.3
|
||||
*/
|
||||
interface HandlerInterface
|
||||
{
|
||||
public function handle(&$values, &$extras);
|
||||
}
|
41
lib/classes/HTMLBuilder/Handler/MediaHandler.php
Normal file
41
lib/classes/HTMLBuilder/Handler/MediaHandler.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace HTMLBuilder\Handler;
|
||||
|
||||
/**
|
||||
* @since 2.3
|
||||
*/
|
||||
class MediaHandler implements HandlerInterface
|
||||
{
|
||||
/**
|
||||
* @since 2.3
|
||||
*
|
||||
* @param array $values
|
||||
* @param array $extras
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function handle(&$values, &$extras)
|
||||
{
|
||||
unset($values['class'][0]);
|
||||
|
||||
// Form upload
|
||||
if (empty($values['value'])) {
|
||||
$values['type'] = 'file';
|
||||
|
||||
return '
|
||||
<input |attr|>';
|
||||
} else {
|
||||
// Visualizzazione dell'immagine e della relativa spunta per la cancellazione
|
||||
$values['class'][] = 'img-thumbnail';
|
||||
$values['class'][] = 'img-responsive';
|
||||
|
||||
return '
|
||||
<img src="|value|" |attr|><br>
|
||||
<label>
|
||||
<input type="checkbox" name="delete_|name|" id="delete_|id|"> '._('Elimina').'
|
||||
</label>
|
||||
<input type="hidden" name="|name|" value="|value|" id="|id|">';
|
||||
}
|
||||
}
|
||||
}
|
202
lib/classes/HTMLBuilder/Handler/SelectHandler.php
Normal file
202
lib/classes/HTMLBuilder/Handler/SelectHandler.php
Normal file
@@ -0,0 +1,202 @@
|
||||
<?php
|
||||
|
||||
namespace HTMLBuilder\Handler;
|
||||
|
||||
// Utilizzo della funzione prepareToField (PHP 5.6+)
|
||||
// use function \HTMLBuilder\prepareToField;
|
||||
|
||||
/**
|
||||
* @since 2.3
|
||||
*/
|
||||
class SelectHandler implements HandlerInterface
|
||||
{
|
||||
public function handle(&$values, &$extras)
|
||||
{
|
||||
$values['class'][] = (!empty($values['ajax-source'])) ? 'superselectajax' : 'superselect';
|
||||
|
||||
$values['data-source'] = (!empty($values['ajax-source'])) ? $values['ajax-source'] : '';
|
||||
|
||||
$values['value'] = explode(',', $values['value']);
|
||||
if (count($values['value']) === 1 && strlen($values['value'][0]) === 0) {
|
||||
$values['value'] = [];
|
||||
}
|
||||
|
||||
// Se il valore presente non è valido, carica l'eventuale valore predefinito
|
||||
if (empty($values['value']) && !is_numeric($values['value']) && !empty($values['valore_predefinito'])) {
|
||||
$values['value'] = get_var($values['valore_predefinito']);
|
||||
}
|
||||
|
||||
$values['value'] = (array) $values['value'];
|
||||
|
||||
$result = '
|
||||
<select |attr|>';
|
||||
|
||||
if (!empty($values['ajax-source'])) {
|
||||
if (!empty($values['value']) || is_numeric($values['value'])) {
|
||||
$result .= $this->select2($values['ajax-source'], $values['value']);
|
||||
}
|
||||
}
|
||||
|
||||
// Generazione <select> da query
|
||||
elseif (preg_match_all('/^query=(.+?)$/', $values['values'], $matches)) {
|
||||
$result .= '
|
||||
<option></option>';
|
||||
|
||||
$result .= $this->selectQuery($matches[1][0], $values['value']);
|
||||
}
|
||||
|
||||
// Generazione <select> da JSON
|
||||
// esempio creazione select con opzioni: Maschio, Femmina, Unisex
|
||||
// {[ "type": "select", "label": "Sesso", "name": "sesso", "values": "list=\"\": \"\", \"M\": \"Maschio\", \"F\": \"Femmina\", \"U\": \"Unisex\"", "value": "$sesso$" ]}
|
||||
elseif (preg_match_all('/^list=(.+?)$/', $values['values'], $matches)) {
|
||||
$result .= '
|
||||
<option></option>';
|
||||
|
||||
$result .= $this->selectList(json_decode('{'.$matches[1][0].'}', true), $values);
|
||||
} elseif (preg_match_all('/^json=(.+?)$/', $values['values'], $matches)) {
|
||||
$result .= '
|
||||
<option></option>';
|
||||
|
||||
$result .= $this->selectJSON(json_decode('[{'.$matches[1][0].'}]', true), $values['value']);
|
||||
}
|
||||
|
||||
$values['placeholder'] = !empty($values['placeholder']) ? $values['placeholder'] : '- '._("Seleziona un'opzione").' -';
|
||||
$values['data-placeholder'] = $values['placeholder'];
|
||||
|
||||
unset($values['values']);
|
||||
|
||||
$result .= '
|
||||
</select>';
|
||||
|
||||
if (in_array('disabled', $extras) || in_array('readonly', $extras)) {
|
||||
$result .= '
|
||||
<script>$("#'.$values['id'].'").prop("disabled", true);</script>';
|
||||
}
|
||||
|
||||
if (in_array('readonly', $extras) && empty($values['ajax-source'])) {
|
||||
$result .= '
|
||||
<select class="hide" name="'.\HTMLBuilder\prepareToField($values['name']).'"'.((in_array('multiple', $extras)) ? ' multiple' : '').'>';
|
||||
|
||||
foreach ($values['value'] as $value) {
|
||||
$result .= '
|
||||
<option value="'.\HTMLBuilder\prepareToField($value).'" selected></option>';
|
||||
}
|
||||
|
||||
$result .= '
|
||||
</select>';
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function select2($op, $elements)
|
||||
{
|
||||
// Richiamo alla pagina ajax_select.php per aggiungere il valore iniziale al select
|
||||
ob_start();
|
||||
$dbo = \Database::getConnection();
|
||||
include DOCROOT.'/ajax_select.php';
|
||||
$text = ob_get_clean();
|
||||
|
||||
$result = '';
|
||||
|
||||
$array = (array) json_decode($text, true);
|
||||
foreach ($array as $element) {
|
||||
$element = (array) $element;
|
||||
if (isset($element['children'][0])) {
|
||||
$element = (array) $element['children'][0];
|
||||
}
|
||||
|
||||
$attributes = [];
|
||||
if (in_array($element['id'], $elements)) {
|
||||
$attributes[] = 'selected';
|
||||
}
|
||||
|
||||
if (!empty($element['_bgcolor_'])) {
|
||||
$attributes[] = 'style="background:'.$element['_bgcolor_'].'; color:'.color_inverse($element['_bgcolor_'].';"');
|
||||
}
|
||||
|
||||
$exclude = ['id', 'text'];
|
||||
// Leggo ulteriori campi oltre a id e descrizione per inserirli nell'option nella forma "data-nomecampo1", "data-nomecampo2", ecc
|
||||
foreach ($element as $key => $value) {
|
||||
if (!in_array($key, $exclude)) {
|
||||
$attributes[] = 'data-'.$key.'="'.\HTMLBuilder\prepareToField($value).'"';
|
||||
}
|
||||
}
|
||||
|
||||
$result .= '
|
||||
<option value="'.\HTMLBuilder\prepareToField($element['id']).'" '.implode(' ', $attributes).'>'.$element['text'].'</option>';
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function selectJSON($array, $values)
|
||||
{
|
||||
$prev = '';
|
||||
foreach ($array as $element) {
|
||||
if (!empty($element['optgroup'])) {
|
||||
if ($prev != $element['optgroup']) {
|
||||
$result .= '
|
||||
<optgroup label="'.\HTMLBuilder\prepareToField($element['optgroup']).'"></optgroup>';
|
||||
$prev = $element['optgroup'];
|
||||
}
|
||||
}
|
||||
|
||||
$element['text'] = empty($element['text']) ? $element['descrizione'] : $element['text'];
|
||||
|
||||
$attributes = [];
|
||||
if (in_array($element['id'], $values)) {
|
||||
$attributes[] = 'selected';
|
||||
}
|
||||
|
||||
if (!empty($element['_bgcolor_'])) {
|
||||
$attributes[] = 'style="background:'.$element['_bgcolor_'].'; color:'.color_inverse($element['_bgcolor_']).';"';
|
||||
}
|
||||
|
||||
$exclude = ['optgroup'];
|
||||
// Leggo ulteriori campi oltre a id e descrizione per inserirli nell'option nella forma "data-nomecampo1", "data-nomecampo2", ecc
|
||||
foreach ($element as $key => $value) {
|
||||
if (!in_array($key, $exclude)) {
|
||||
$attributes[] = 'data-'.$key.'="'.\HTMLBuilder\prepareToField($value).'"';
|
||||
}
|
||||
}
|
||||
|
||||
$result .= '
|
||||
<option value="'.\HTMLBuilder\prepareToField($element['id']).'" '.implode(' ', $attributes).'>'.$element['text'].'</option>';
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function selectQuery($query, $values)
|
||||
{
|
||||
$result = '';
|
||||
|
||||
$database = \Database::getConnection();
|
||||
|
||||
$array = $database->fetchArray($query);
|
||||
|
||||
return $this->selectJSON($array, $values);
|
||||
}
|
||||
|
||||
protected function selectList($datas, &$values)
|
||||
{
|
||||
$result = '';
|
||||
|
||||
foreach ($datas as $key => $value) {
|
||||
if (!empty($key)) {
|
||||
$attributes = [];
|
||||
if (in_array($key, $values['value'])) {
|
||||
$attributes[] = 'selected';
|
||||
}
|
||||
|
||||
$result .= '
|
||||
<option value="'.\HTMLBuilder\prepareToField($key).'" '.implode(' ', $attributes).'>'.$value.'</option>';
|
||||
} elseif (empty($values['placeholder'])) {
|
||||
$values['placeholder'] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user