ZwiiCMS, le gestionnaire de site Web sans base de données à installer.
Conçu en 2008 par Rémi Jean, le développement a été repris par Frédéric Tempez en 2018.
zwii cms nosql json flat file
https://www.zwiicms.fr
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
854 lines
30 KiB
854 lines
30 KiB
<?php |
|
|
|
class template { |
|
|
|
/** |
|
* Crée un bouton |
|
* @param string $nameId Nom et id du champ |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function button($nameId, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'class' => '', |
|
'disabled' => false, |
|
'href' => 'javascript:void(0);', |
|
'ico' => '', |
|
'id' => $nameId, |
|
'name' => $nameId, |
|
'target' => '', |
|
'uniqueSubmission' => false, |
|
'value' => 'Bouton' |
|
], $attributes); |
|
// Retourne le html |
|
return sprintf( |
|
'<a %s class="button %s %s %s">%s</a>', |
|
helper::sprintAttributes($attributes, ['class', 'disabled', 'ico', 'value']), |
|
$attributes['disabled'] ? 'disabled' : '', |
|
$attributes['class'], |
|
$attributes['uniqueSubmission'] ? 'uniqueSubmission' : '', |
|
($attributes['ico'] ? template::ico($attributes['ico'], 'right') : '') . $attributes['value'] |
|
); |
|
} |
|
|
|
/** |
|
* Crée un champ captcha |
|
* @param string $nameId Nom et id du champ |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function captcha($nameId, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'class' => '', |
|
'classWrapper' => '', |
|
'help' => '', |
|
'id' => $nameId, |
|
'name' => $nameId, |
|
'value' => '', |
|
'limit' => false // captcha simple |
|
], $attributes); |
|
|
|
// Captcha quatre opérations |
|
// Limite addition et soustraction selon le type de captcha |
|
$numbers = [0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20]; |
|
$letters = ['u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a']; |
|
$limit = $attributes['limit'] ? count($letters)-1 : 10; |
|
|
|
// Tirage de l'opération |
|
mt_srand((float) microtime()*1000000); |
|
// Captcha simple limité à l'addition |
|
$operator = $attributes['limit'] ? mt_rand (1, 4) : 1; |
|
|
|
// Limite si multiplication ou division |
|
if ($operator > 2) { |
|
$limit = 10; |
|
} |
|
|
|
// Tirage des nombres |
|
mt_srand((float) microtime()*1000000); |
|
$firstNumber = mt_rand (1, $limit); |
|
mt_srand((float) microtime()*1000000); |
|
$secondNumber = mt_rand (1, $limit); |
|
|
|
// Permutation si addition ou soustraction |
|
if (($operator < 3) and ($firstNumber < $secondNumber)) { |
|
$temp = $firstNumber; |
|
$firstNumber = $secondNumber; |
|
$secondNumber = $temp; |
|
} |
|
|
|
// Icône de l'opérateur et calcul du résultat |
|
switch ($operator) { |
|
case 1: |
|
$operator = template::ico('plus'); |
|
$result = $firstNumber + $secondNumber; |
|
break; |
|
case 2: |
|
$operator = template::ico('minus'); |
|
$result = $firstNumber - $secondNumber; |
|
break; |
|
case 3: |
|
$operator = template::ico('cancel'); |
|
$result = $firstNumber * $secondNumber; |
|
break; |
|
case 4: |
|
$operator = template::ico('divide'); |
|
$limit2 = [10, 10, 6, 5, 4, 3, 2, 2, 2, 2]; |
|
for ($i = 1; $i <= $firstNumber; $i++) { |
|
$limit = $limit2[$i-1]; |
|
} |
|
mt_srand((float) microtime()*1000000); |
|
$secondNumber = mt_rand(1, $limit); |
|
$firstNumber = $firstNumber * $secondNumber; |
|
$result = $firstNumber / $secondNumber; |
|
break; |
|
} |
|
|
|
// Hashage du résultat |
|
$result = password_hash($result, PASSWORD_BCRYPT); |
|
|
|
// Codage des valeurs de l'opération |
|
$firstLetter = uniqid(); |
|
$secondLetter = uniqid(); |
|
|
|
// Masquage image source pour éviter un décodage |
|
copy ('core/vendor/zwiico/png/'.$letters[$firstNumber] . '.png', 'site/tmp/' . $firstLetter . '.png'); |
|
copy ('core/vendor/zwiico/png/'.$letters[$secondNumber] . '.png', 'site/tmp/' . $secondLetter . '.png'); |
|
|
|
// Début du wrapper |
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="captcha inputWrapper ' . $attributes['classWrapper'] . '">'; |
|
// Label |
|
$html .= self::label($attributes['id'], |
|
'<img src="' . helper::baseUrl(false) . 'site/tmp/' . $firstLetter . '.png" /> <strong>' . $operator . '</strong> <img class="captchaNumber" src="' . helper::baseUrl(false) . 'site/tmp/' . $secondLetter . '.png" /> en chiffres ?', [ |
|
'help' => $attributes['help'] |
|
]); |
|
|
|
// Notice |
|
$notice = ''; |
|
if(array_key_exists($attributes['id'], common::$inputNotices)) { |
|
$notice = common::$inputNotices[$attributes['id']]; |
|
$attributes['class'] .= ' notice'; |
|
} |
|
$html .= self::notice($attributes['id'], $notice); |
|
|
|
// captcha |
|
$html .= sprintf( |
|
'<input type="text" %s>', |
|
helper::sprintAttributes($attributes) |
|
); |
|
|
|
// Champ résultat codé |
|
$html .= self::hidden($attributes['id'] . 'Result', [ |
|
'value' => $result, |
|
'before' => false |
|
]); |
|
|
|
// Fin du wrapper |
|
$html .= '</div>'; |
|
|
|
// Retourne le html |
|
return $html; |
|
} |
|
|
|
/** |
|
* Crée une case à cocher à sélection multiple |
|
* @param string $nameId Nom et id du champ |
|
* @param string $value Valeur de la case à cocher |
|
* @param string $label Label de la case à cocher |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function checkbox($nameId, $value, $label, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'before' => true, |
|
'checked' => '', |
|
'class' => '', |
|
'classWrapper' => '', |
|
'disabled' => false, |
|
'help' => '', |
|
'id' => $nameId, |
|
'name' => $nameId |
|
], $attributes); |
|
// Sauvegarde des données en cas d'erreur |
|
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) { |
|
$attributes['checked'] = (bool) common::$inputBefore[$attributes['id']]; |
|
} |
|
// Début du wrapper |
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">'; |
|
// Notice |
|
$notice = ''; |
|
if(array_key_exists($attributes['id'], common::$inputNotices)) { |
|
$notice = common::$inputNotices[$attributes['id']]; |
|
$attributes['class'] .= ' notice'; |
|
} |
|
$html .= self::notice($attributes['id'], $notice); |
|
// Case à cocher |
|
$html .= sprintf( |
|
'<input type="checkbox" value="%s" %s>', |
|
$value, |
|
helper::sprintAttributes($attributes) |
|
); |
|
// Label |
|
$html .= self::label($attributes['id'], '<span>' . $label . '</span>', [ |
|
'help' => $attributes['help'] |
|
]); |
|
// Fin du wrapper |
|
$html .= '</div>'; |
|
// Retourne le html |
|
return $html; |
|
} |
|
|
|
/** |
|
* Crée un champ date |
|
* @param string $nameId Nom et id du champ |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function date($nameId, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'autocomplete' => 'on', |
|
'before' => true, |
|
'class' => '', |
|
'classWrapper' => '', |
|
'noDirty' => false, |
|
'disabled' => false, |
|
'help' => '', |
|
'id' => $nameId, |
|
'label' => '', |
|
'name' => $nameId, |
|
'placeholder' => '', |
|
'readonly' => true, |
|
'value' => '' |
|
], $attributes); |
|
// Sauvegarde des données en cas d'erreur |
|
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) { |
|
$attributes['value'] = common::$inputBefore[$attributes['id']]; |
|
} |
|
else { |
|
$attributes['value'] = ($attributes['value'] ? helper::filter($attributes['value'], helper::FILTER_TIMESTAMP) : ''); |
|
} |
|
// Début du wrapper |
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">'; |
|
// Label |
|
if($attributes['label']) { |
|
$html .= self::label($attributes['id'], $attributes['label'], [ |
|
'help' => $attributes['help'] |
|
]); |
|
} |
|
// Notice |
|
$notice = ''; |
|
if(array_key_exists($attributes['id'], common::$inputNotices)) { |
|
$notice = common::$inputNotices[$attributes['id']]; |
|
$attributes['class'] .= ' notice'; |
|
} |
|
$html .= self::notice($attributes['id'], $notice); |
|
// Date visible |
|
$html .= '<div class="inputDateManagerWrapper">'; |
|
$html .= sprintf( |
|
'<input type="text" class="datepicker %s" value="%s" %s>', |
|
$attributes['class'], |
|
$attributes['value'], |
|
helper::sprintAttributes($attributes, ['class', 'value']) |
|
); |
|
$html .= self::button($attributes['id'] . 'Delete', [ |
|
'class' => 'inputDateDelete', |
|
'value' => self::ico('cancel') |
|
]); |
|
$html .= '</div>'; |
|
// Fin du wrapper |
|
$html .= '</div>'; |
|
// Retourne le html |
|
return $html; |
|
} |
|
|
|
/** |
|
* Crée un champ d'upload de fichier |
|
* @param string $nameId Nom et id du champ |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function file($nameId, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'before' => true, |
|
'class' => '', |
|
'classWrapper' => '', |
|
'noDirty' => false, |
|
'disabled' => false, |
|
'extensions' => '', |
|
'help' => '', |
|
'id' => $nameId, |
|
'label' => '', |
|
'maxlength' => '500', |
|
'name' => $nameId, |
|
'type' => 2, |
|
'value' => '' |
|
], $attributes); |
|
// Sauvegarde des données en cas d'erreur |
|
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) { |
|
$attributes['value'] = common::$inputBefore[$attributes['id']]; |
|
} |
|
// Début du wrapper |
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">'; |
|
// Label |
|
if($attributes['label']) { |
|
$html .= self::label($attributes['id'], $attributes['label'], [ |
|
'help' => $attributes['help'] |
|
]); |
|
} |
|
// Notice |
|
$notice = ''; |
|
if(array_key_exists($attributes['id'], common::$inputNotices)) { |
|
$notice = common::$inputNotices[$attributes['id']]; |
|
$attributes['class'] .= ' notice'; |
|
} |
|
$html .= self::notice($attributes['id'], $notice); |
|
// Champ caché contenant l'url de la page |
|
$html .= self::hidden($attributes['id'], [ |
|
'class' => 'inputFileHidden', |
|
'disabled' => $attributes['disabled'], |
|
'maxlength' => $attributes['maxlength'], |
|
'value' => $attributes['value'] |
|
]); |
|
// Champ d'upload |
|
$html .= '<div class="inputFileManagerWrapper">'; |
|
$html .= sprintf( |
|
'<a |
|
href="' . |
|
helper::baseUrl(false) . 'core/vendor/filemanager/dialog.php' . |
|
'?relative_url=1' . |
|
'&field_id=' . $attributes['id'] . |
|
'&type=' . $attributes['type'] . |
|
'&akey=' . md5_file(core::DATA_DIR.'core.json') . |
|
($attributes['extensions'] ? '&extensions=' . $attributes['extensions'] : '') |
|
. '" |
|
class="inputFile %s %s" |
|
%s |
|
data-lity |
|
> |
|
' . self::ico('upload', 'right') . ' |
|
<span class="inputFileLabel"></span> |
|
</a>', |
|
$attributes['class'], |
|
$attributes['disabled'] ? 'disabled' : '', |
|
helper::sprintAttributes($attributes, ['class', 'extensions', 'type', 'maxlength']) |
|
|
|
); |
|
$html .= self::button($attributes['id'] . 'Delete', [ |
|
'class' => 'inputFileDelete', |
|
'value' => self::ico('cancel') |
|
]); |
|
$html .= '</div>'; |
|
// Fin du wrapper |
|
$html .= '</div>'; |
|
// Retourne le html |
|
return $html; |
|
} |
|
|
|
/** |
|
* Ferme un formulaire |
|
* @return string |
|
*/ |
|
public static function formClose() { |
|
return '</form>'; |
|
} |
|
|
|
/** |
|
* Ouvre un formulaire protégé par CSRF |
|
* @param string $id Id du formulaire |
|
* @return string |
|
*/ |
|
public static function formOpen($id) { |
|
// Ouverture formulaire |
|
$html = '<form id="' . $id . '" method="post">'; |
|
// Stock le token CSRF |
|
$html .= self::hidden('csrf', [ |
|
'value' => $_SESSION['csrf'] |
|
]); |
|
// Retourne le html |
|
return $html; |
|
} |
|
|
|
|
|
|
|
/** |
|
* Crée une aide qui s'affiche au survole |
|
* @param string $text Texte de l'aide |
|
* @return string |
|
*/ |
|
public static function help($text) { |
|
return '<span class="helpButton" data-tippy-content="' . $text . '">' . self::ico('help') . '<!----></span>'; |
|
} |
|
|
|
/** |
|
* Crée un champ caché |
|
* @param string $nameId Nom et id du champ |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function hidden($nameId, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'before' => true, |
|
'class' => '', |
|
'noDirty' => false, |
|
'id' => $nameId, |
|
//'maxlength' => '500', |
|
'name' => $nameId, |
|
'value' => '' |
|
], $attributes); |
|
// Sauvegarde des données en cas d'erreur |
|
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) { |
|
$attributes['value'] = common::$inputBefore[$attributes['id']]; |
|
} |
|
// Texte |
|
$html = sprintf('<input type="hidden" %s>', helper::sprintAttributes($attributes, ['before'])); |
|
// Retourne le html |
|
return $html; |
|
} |
|
|
|
/** |
|
* Crée un icône |
|
* @param string $ico Classe de l'icône |
|
* @param string $margin Ajoute un margin autour de l'icône (choix : left, right, all) |
|
* @param bool $animate Ajoute une animation à l'icône |
|
* @param string $fontSize Taille de la police |
|
* @return string |
|
*/ |
|
public static function ico($ico, $margin = '', $animate = false, $fontSize = '1em') { |
|
return '<span class="zwiico-' . $ico . ($margin ? ' zwiico-margin-' . $margin : '') . ($animate ? ' animate-spin' : '') . '" style="font-size:' . $fontSize . '"><!----></span>'; |
|
} |
|
|
|
/** |
|
* Crée un drapeau du site courante |
|
* @param string $margin Ajoute un margin autour de l'icône (choix : left, right, all) |
|
* @param string $size Taille en pixels (default = auto) |
|
* @return string |
|
*/ |
|
public static function flag( $size = 'auto') { |
|
if ( isset($_COOKIE['ZWII_I18N_SITE']) |
|
) { |
|
$lang = $_COOKIE['ZWII_I18N_SITE']; |
|
return '<img class="flag" src="' . helper::baseUrl(false) . 'core/vendor/i18n/png/' . $lang . '.png" |
|
width="' . $size .'" |
|
height="' . $size .'" |
|
alt="(' . $lang . ')"/>'; |
|
} |
|
} |
|
|
|
/** |
|
* Crée un label |
|
* @param string $for For du label |
|
* @param array $attributes Attributs ($key => $value) |
|
* @param string $text Texte du label |
|
* @return string |
|
*/ |
|
public static function label($for, $text, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'class' => '', |
|
'for' => $for, |
|
'help' => '' |
|
], $attributes); |
|
// Ajout d'une aide |
|
if($attributes['help'] !== '') { |
|
$text = $text . self::help($attributes['help']); |
|
} |
|
// Retourne le html |
|
return sprintf( |
|
'<label %s>%s</label>', |
|
helper::sprintAttributes($attributes), |
|
$text |
|
); |
|
} |
|
|
|
/** |
|
* Crée un champ mail |
|
* @param string $nameId Nom et id du champ |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function mail($nameId, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'autocomplete' => 'on', |
|
'before' => true, |
|
'class' => '', |
|
'classWrapper' => '', |
|
'noDirty' => false, |
|
'disabled' => false, |
|
'help' => '', |
|
'id' => $nameId, |
|
'label' => '', |
|
//'maxlength' => '500', |
|
'name' => $nameId, |
|
'placeholder' => '', |
|
'readonly' => false, |
|
'value' => '' |
|
], $attributes); |
|
// Sauvegarde des données en cas d'erreur |
|
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) { |
|
$attributes['value'] = common::$inputBefore[$attributes['id']]; |
|
} |
|
// Début du wrapper |
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">'; |
|
// Label |
|
if($attributes['label']) { |
|
$html .= self::label($attributes['id'], $attributes['label'], [ |
|
'help' => $attributes['help'] |
|
]); |
|
} |
|
// Notice |
|
$notice = ''; |
|
if(array_key_exists($attributes['id'], common::$inputNotices)) { |
|
$notice = common::$inputNotices[$attributes['id']]; |
|
$attributes['class'] .= ' notice'; |
|
} |
|
$html .= self::notice($attributes['id'], $notice); |
|
// Texte |
|
$html .= sprintf( |
|
'<input type="email" %s>', |
|
helper::sprintAttributes($attributes) |
|
); |
|
// Fin du wrapper |
|
$html .= '</div>'; |
|
// Retourne le html |
|
return $html; |
|
} |
|
|
|
/** |
|
* Crée une notice |
|
* @param string $id Id du champ |
|
* @param string $notice Notice |
|
* @return string |
|
*/ |
|
public static function notice($id, $notice) { |
|
return ' <span id="' . $id . 'Notice" class="notice ' . ($notice ? '' : 'displayNone') . '">' . $notice . '</span>'; |
|
} |
|
|
|
/** |
|
* Crée un champ mot de passe |
|
* @param string $nameId Nom et id du champ |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function password($nameId, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'autocomplete' => 'on', |
|
'class' => '', |
|
'classWrapper' => '', |
|
'noDirty' => false, |
|
'disabled' => false, |
|
'help' => '', |
|
'id' => $nameId, |
|
'label' => '', |
|
//'maxlength' => '500', |
|
'name' => $nameId, |
|
'placeholder' => '', |
|
'readonly' => false |
|
], $attributes); |
|
// Début du wrapper |
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">'; |
|
// Label |
|
if($attributes['label']) { |
|
$html .= self::label($attributes['id'], $attributes['label'], [ |
|
'help' => $attributes['help'] |
|
]); |
|
} |
|
// Notice |
|
$notice = ''; |
|
if(array_key_exists($attributes['id'], common::$inputNotices)) { |
|
$notice = common::$inputNotices[$attributes['id']]; |
|
$attributes['class'] .= ' notice'; |
|
} |
|
$html .= self::notice($attributes['id'], $notice); |
|
// Mot de passe |
|
$html .= sprintf( |
|
'<input type="password" %s>', |
|
helper::sprintAttributes($attributes) |
|
); |
|
// Fin du wrapper |
|
$html .= '</div>'; |
|
// Retourne le html |
|
return $html; |
|
} |
|
|
|
/** |
|
* Crée un champ sélection |
|
* @param string $nameId Nom et id du champ |
|
* @param array $options Liste des options du champ de sélection ($value => $text) |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function select($nameId, array $options, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'before' => true, |
|
'class' => '', |
|
'classWrapper' => '', |
|
'noDirty' => false, |
|
'disabled' => false, |
|
'help' => '', |
|
'id' => $nameId, |
|
'label' => '', |
|
'name' => $nameId, |
|
'selected' => '', |
|
'fonts' => false |
|
], $attributes); |
|
// Sauvegarde des données en cas d'erreur |
|
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) { |
|
$attributes['selected'] = common::$inputBefore[$attributes['id']]; |
|
} |
|
// Liste des polices à intégrer |
|
if ($attributes['fonts'] === true) { |
|
foreach ($options as $fontId) { |
|
echo "<link href='https://fonts.googleapis.com/css?family=".str_replace(" ", "+", $fontId)."' rel='stylesheet' type='text/css'>\n"; |
|
} |
|
} |
|
// Début du wrapper |
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">'; |
|
// Label |
|
if($attributes['label']) { |
|
$html .= self::label($attributes['id'], $attributes['label'], [ |
|
'help' => $attributes['help'] |
|
]); |
|
} |
|
// Notice |
|
$notice = ''; |
|
if(array_key_exists($attributes['id'], common::$inputNotices)) { |
|
$notice = common::$inputNotices[$attributes['id']]; |
|
$attributes['class'] .= ' notice'; |
|
} |
|
$html .= self::notice($attributes['id'], $notice); |
|
// Début sélection |
|
$html .= sprintf('<select %s>', |
|
helper::sprintAttributes($attributes) |
|
); |
|
foreach($options as $value => $text) { |
|
$html .= $attributes['fonts'] === true ? sprintf( |
|
'<option value="%s"%s style="font-family: %s;">%s</option>', |
|
$value, |
|
$attributes['selected'] == $value ? ' selected' : '', // Double == pour ignorer le type de variable car $_POST change les types en string |
|
str_replace('+',' ',$value), |
|
$text |
|
) : sprintf( |
|
'<option value="%s"%s>%s</option>', |
|
$value, |
|
$attributes['selected'] == $value ? ' selected' : '', // Double == pour ignorer le type de variable car $_POST change les types en string |
|
$text |
|
); |
|
} |
|
// Fin sélection |
|
$html .= '</select>'; |
|
// Fin du wrapper |
|
$html .= '</div>'; |
|
// Retourne le html |
|
return $html; |
|
} |
|
|
|
/** |
|
* Crée une bulle de dialogue |
|
* @param string $text Texte de la bulle |
|
* @return string |
|
*/ |
|
public static function speech($text) { |
|
return '<div class="speech"><div class="speechBubble">' . $text . '</div>' . template::ico('mimi speechMimi', '', false, '7em') . '</div>'; |
|
} |
|
|
|
/** |
|
* Crée un bouton validation |
|
* @param string $nameId Nom & id du bouton validation |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function submit($nameId, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'class' => '', |
|
'disabled' => false, |
|
'ico' => 'check', |
|
'id' => $nameId, |
|
'name' => $nameId, |
|
'uniqueSubmission' => false, //true avant 9.1.08 |
|
'value' => 'Enregistrer' |
|
], $attributes); |
|
// Retourne le html |
|
return sprintf( |
|
'<button type="submit" class="%s%s" %s>%s</button>', |
|
$attributes['class'], |
|
$attributes['uniqueSubmission'] ? 'uniqueSubmission' : '', |
|
helper::sprintAttributes($attributes, ['class', 'ico', 'value']), |
|
($attributes['ico'] ? template::ico($attributes['ico'], 'right') : '') . $attributes['value'] |
|
); |
|
} |
|
|
|
/** |
|
* Crée un tableau |
|
* @param array $cols Cols des colonnes (format: [col colonne1, col colonne2, etc]) |
|
* @param array $body Contenu (format: [[contenu1, contenu2, etc], [contenu1, contenu2, etc]]) |
|
* @param array $head Entêtes (format : [[titre colonne1, titre colonne2, etc]) |
|
* @param array $rowsId Id pour la numérotation des rows (format : [id colonne1, id colonne2, etc]) |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function table(array $cols = [], array $body = [], array $head = [], array $attributes = [], array $rowsId = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'class' => '', |
|
'classWrapper' => '', |
|
'id' => '' |
|
], $attributes); |
|
// Début du wrapper |
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="tableWrapper ' . $attributes['classWrapper']. '">'; |
|
// Début tableau |
|
$html .= '<table id="' . $attributes['id'] . '" class="table ' . $attributes['class']. '">'; |
|
// Entêtes |
|
if($head) { |
|
// Début des entêtes |
|
$html .= '<thead>'; |
|
$html .= '<tr class="nodrag">'; |
|
$i = 0; |
|
foreach($head as $th) { |
|
$html .= '<th class="col' . $cols[$i++] . '">' . $th . '</th>'; |
|
} |
|
// Fin des entêtes |
|
$html .= '</tr>'; |
|
$html .= '</thead>'; |
|
} |
|
// Pas de tableau d'Id transmis, générer une numérotation |
|
if (empty($rowsId)) { |
|
$rowsId = range(0,count($body)); |
|
} |
|
// Début contenu |
|
$j = 0; |
|
foreach($body as $tr) { |
|
// Id de ligne pour les tableaux drag and drop |
|
$html .= '<tr id="' . $rowsId[$j++] . '">'; |
|
$i = 0; |
|
foreach($tr as $td) { |
|
$html .= '<td class="col' . $cols[$i++] . '">' . $td . '</td>'; |
|
} |
|
$html .= '</tr>'; |
|
} |
|
// Fin contenu |
|
$html .= '</tbody>'; |
|
// Fin tableau |
|
$html .= '</table>'; |
|
// Fin container |
|
$html .= '</div>'; |
|
// Retourne le html |
|
return $html; |
|
} |
|
|
|
/** |
|
* Crée un champ texte court |
|
* @param string $nameId Nom et id du champ |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function text($nameId, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'autocomplete' => 'on', |
|
'before' => true, |
|
'class' => '', |
|
'classWrapper' => '', |
|
'noDirty' => false, |
|
'disabled' => false, |
|
'help' => '', |
|
'id' => $nameId, |
|
'label' => '', |
|
//'maxlength' => '500', |
|
'name' => $nameId, |
|
'placeholder' => '', |
|
'readonly' => false, |
|
'value' => '' |
|
], $attributes); |
|
// Sauvegarde des données en cas d'erreur |
|
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) { |
|
$attributes['value'] = common::$inputBefore[$attributes['id']]; |
|
} |
|
// Début du wrapper |
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">'; |
|
// Label |
|
if($attributes['label']) { |
|
$html .= self::label($attributes['id'], $attributes['label'], [ |
|
'help' => $attributes['help'] |
|
]); |
|
} |
|
// Notice |
|
$notice = ''; |
|
if(array_key_exists($attributes['id'], common::$inputNotices)) { |
|
$notice = common::$inputNotices[$attributes['id']]; |
|
$attributes['class'] .= ' notice'; |
|
} |
|
$html .= self::notice($attributes['id'], $notice); |
|
// Texte |
|
$html .= sprintf( |
|
'<input type="text" %s>', |
|
helper::sprintAttributes($attributes) |
|
); |
|
// Fin du wrapper |
|
$html .= '</div>'; |
|
// Retourne le html |
|
return $html; |
|
} |
|
|
|
/** |
|
* Crée un champ texte long |
|
* @param string $nameId Nom et id du champ |
|
* @param array $attributes Attributs ($key => $value) |
|
* @return string |
|
*/ |
|
public static function textarea($nameId, array $attributes = []) { |
|
// Attributs par défaut |
|
$attributes = array_merge([ |
|
'before' => true, |
|
'class' => '', // editorWysiwyg et editor possible pour utiliser un éditeur (il faut également instancier les librairies) |
|
'classWrapper' => '', |
|
'disabled' => false, |
|
'noDirty' => false, |
|
'help' => '', |
|
'id' => $nameId, |
|
'label' => '', |
|
//'maxlength' => '500', |
|
'name' => $nameId, |
|
'readonly' => false, |
|
'value' => '' |
|
], $attributes); |
|
// Sauvegarde des données en cas d'erreur |
|
if($attributes['before'] AND array_key_exists($attributes['id'], common::$inputBefore)) { |
|
$attributes['value'] = common::$inputBefore[$attributes['id']]; |
|
} |
|
// Début du wrapper |
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">'; |
|
// Label |
|
if($attributes['label']) { |
|
$html .= self::label($attributes['id'], $attributes['label'], [ |
|
'help' => $attributes['help'] |
|
]); |
|
} |
|
// Notice |
|
$notice = ''; |
|
if(array_key_exists($attributes['id'], common::$inputNotices)) { |
|
$notice = common::$inputNotices[$attributes['id']]; |
|
$attributes['class'] .= ' notice'; |
|
} |
|
$html .= self::notice($attributes['id'], $notice); |
|
// Texte long |
|
$html .= sprintf( |
|
'<textarea %s>%s</textarea>', |
|
helper::sprintAttributes($attributes, ['value']), |
|
$attributes['value'] |
|
); |
|
// Fin du wrapper |
|
$html .= '</div>'; |
|
// Retourne le html |
|
return $html; |
|
} |
|
}
|
|
|