1
0
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:
Thomas Zilio
2017-08-04 16:28:16 +02:00
parent 662fcbd7b9
commit 1c9e7b1634
383 changed files with 55144 additions and 0 deletions

View 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;
}
}

View 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'] : '';
}
}

View 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>';
}
}

View File

@@ -0,0 +1,12 @@
<?php
namespace HTMLBuilder\Handler;
/**
*
* @since 2.3
*/
interface HandlerInterface
{
public function handle(&$values, &$extras);
}

View 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|">';
}
}
}

View 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;
}
}