forked from ZwiiCMS-Team/ZwiiCMS
[10.0.013.dev] Classes externalisées
This commit is contained in:
parent
0ec33ae02c
commit
6bb842c6a5
0
core/vendor/phpmailer/.htaccess → core/class/.htaccess
Executable file → Normal file
0
core/vendor/phpmailer/.htaccess → core/class/.htaccess
Executable file → Normal file
13
core/class/autoload.php
Normal file
13
core/class/autoload.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class autoload {
|
||||||
|
public static function autoloader () {
|
||||||
|
require_once 'core/class/helper.class.php';
|
||||||
|
require_once 'core/class/template.class.php';
|
||||||
|
require_once 'core/class/SitemapGenerator.class.php';
|
||||||
|
require_once 'core/class/phpmailer/phpmailer.class.php';
|
||||||
|
require_once 'core/class/phpmailer/exception.class.php';
|
||||||
|
require_once "core/vendor/jsondb/Dot.php";
|
||||||
|
require_once "core/vendor/jsondb/JsonDb.php";
|
||||||
|
}
|
||||||
|
}
|
385
core/class/helper.class.php
Normal file
385
core/class/helper.class.php
Normal file
@ -0,0 +1,385 @@
|
|||||||
|
<?php
|
||||||
|
class helper {
|
||||||
|
|
||||||
|
/** Statut de la réécriture d'URL (pour éviter de lire le contenu du fichier .htaccess à chaque self::baseUrl()) */
|
||||||
|
public static $rewriteStatus = null;
|
||||||
|
|
||||||
|
/** Filtres personnalisés */
|
||||||
|
const FILTER_BOOLEAN = 1;
|
||||||
|
const FILTER_DATETIME = 2;
|
||||||
|
const FILTER_FLOAT = 3;
|
||||||
|
const FILTER_ID = 4;
|
||||||
|
const FILTER_INT = 5;
|
||||||
|
const FILTER_MAIL = 6;
|
||||||
|
const FILTER_PASSWORD = 7;
|
||||||
|
const FILTER_STRING_LONG = 8;
|
||||||
|
const FILTER_STRING_SHORT = 9;
|
||||||
|
const FILTER_TIMESTAMP = 10;
|
||||||
|
const FILTER_URL = 11;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retourne les valeurs d'une colonne du tableau de données
|
||||||
|
* @param array $array Tableau cible
|
||||||
|
* @param string $column Colonne à extraire
|
||||||
|
* @param string $sort Type de tri à appliquer au tableau (SORT_ASC, SORT_DESC, ou null)
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function arrayCollumn($array, $column, $sort = null) {
|
||||||
|
$newArray = [];
|
||||||
|
if(empty($array) === false) {
|
||||||
|
$newArray = array_map(function($element) use($column) {
|
||||||
|
return $element[$column];
|
||||||
|
}, $array);
|
||||||
|
switch($sort) {
|
||||||
|
case 'SORT_ASC':
|
||||||
|
asort($newArray);
|
||||||
|
break;
|
||||||
|
case 'SORT_DESC':
|
||||||
|
arsort($newArray);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $newArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retourne l'URL de base du site
|
||||||
|
* @param bool $queryString Affiche ou non le point d'interrogation
|
||||||
|
* @param bool $host Affiche ou non l'host
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function baseUrl($queryString = true, $host = true) {
|
||||||
|
// Protocol
|
||||||
|
if(
|
||||||
|
(empty($_SERVER['HTTPS']) === false AND $_SERVER['HTTPS'] !== 'off')
|
||||||
|
OR $_SERVER['SERVER_PORT'] === 443
|
||||||
|
) {
|
||||||
|
$protocol = 'https://';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$protocol = 'http://';
|
||||||
|
}
|
||||||
|
// Host
|
||||||
|
if($host) {
|
||||||
|
$host = $protocol . $_SERVER['HTTP_HOST'];
|
||||||
|
}
|
||||||
|
// Pathinfo
|
||||||
|
$pathInfo = pathinfo($_SERVER['PHP_SELF']);
|
||||||
|
// Querystring
|
||||||
|
if($queryString AND helper::checkRewrite() === false) {
|
||||||
|
$queryString = '?';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$queryString = '';
|
||||||
|
}
|
||||||
|
return $host . rtrim($pathInfo['dirname'], ' /') . '/' . $queryString;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check le statut de l'URL rewriting
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function checkRewrite() {
|
||||||
|
if(self::$rewriteStatus === null) {
|
||||||
|
// Ouvre et scinde le fichier .htaccess
|
||||||
|
$htaccess = explode('# URL rewriting', file_get_contents('.htaccess'));
|
||||||
|
// Retourne un boolean en fonction du contenu de la partie réservée à l'URL rewriting
|
||||||
|
self::$rewriteStatus = (empty($htaccess[1]) === false);
|
||||||
|
}
|
||||||
|
return self::$rewriteStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renvoie le numéro de version de Zwii est en ligne
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getOnlineVersion() {
|
||||||
|
return (@file_get_contents('http://zwiicms.com/update/version'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check si une nouvelle version de Zwii est disponible
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function checkNewVersion() {
|
||||||
|
if($version = helper::getOnlineVersion()) {
|
||||||
|
//return (trim($version) !== common::ZWII_VERSION);
|
||||||
|
return ((version_compare(common::ZWII_VERSION,$version)) === -1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Génère des variations d'une couleur
|
||||||
|
* @param string $rgba Code rgba de la couleur
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function colorVariants($rgba) {
|
||||||
|
preg_match('#\(+(.*)\)+#', $rgba, $matches);
|
||||||
|
$rgba = explode(', ', $matches[1]);
|
||||||
|
return [
|
||||||
|
'normal' => 'rgba(' . $rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] . ',' . $rgba[3] . ')',
|
||||||
|
'darken' => 'rgba(' . max(0, $rgba[0] - 15) . ',' . max(0, $rgba[1] - 15) . ',' . max(0, $rgba[2] - 15) . ',' . $rgba[3] . ')',
|
||||||
|
'veryDarken' => 'rgba(' . max(0, $rgba[0] - 20) . ',' . max(0, $rgba[1] - 20) . ',' . max(0, $rgba[2] - 20) . ',' . $rgba[3] . ')',
|
||||||
|
'text' => self::relativeLuminanceW3C($rgba) > .22 ? "inherit" : "white"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Supprime un cookie
|
||||||
|
* @param string $cookieKey Clé du cookie à supprimer
|
||||||
|
*/
|
||||||
|
public static function deleteCookie($cookieKey) {
|
||||||
|
unset($_COOKIE[$cookieKey]);
|
||||||
|
setcookie($cookieKey, '', time() - 3600, helper::baseUrl(false, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filtre une chaîne en fonction d'un tableau de données
|
||||||
|
* @param string $text Chaîne à filtrer
|
||||||
|
* @param int $filter Type de filtre à appliquer
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function filter($text, $filter) {
|
||||||
|
$text = trim($text);
|
||||||
|
switch($filter) {
|
||||||
|
case self::FILTER_BOOLEAN:
|
||||||
|
$text = (bool) $text;
|
||||||
|
break;
|
||||||
|
case self::FILTER_DATETIME:
|
||||||
|
$timezone = new DateTimeZone(core::$timezone);
|
||||||
|
$date = new DateTime($text);
|
||||||
|
$date->setTimezone($timezone);
|
||||||
|
$text = (int) $date->format('U');
|
||||||
|
break;
|
||||||
|
case self::FILTER_FLOAT:
|
||||||
|
$text = filter_var($text, FILTER_SANITIZE_NUMBER_FLOAT);
|
||||||
|
$text = (float) $text;
|
||||||
|
break;
|
||||||
|
case self::FILTER_ID:
|
||||||
|
$text = mb_strtolower($text, 'UTF-8');
|
||||||
|
$text = strip_tags(str_replace(
|
||||||
|
explode(',', 'á,à,â,ä,ã,å,ç,é,è,ê,ë,í,ì,î,ï,ñ,ó,ò,ô,ö,õ,ú,ù,û,ü,ý,ÿ,\',", '),
|
||||||
|
explode(',', 'a,a,a,a,a,a,c,e,e,e,e,i,i,i,i,n,o,o,o,o,o,u,u,u,u,y,y,-,-,-'),
|
||||||
|
$text
|
||||||
|
));
|
||||||
|
$text = preg_replace('/([^a-z0-9-])/', '', $text);
|
||||||
|
// Cas où un identifiant est vide
|
||||||
|
if (empty($text)) {
|
||||||
|
$text = uniqid('');
|
||||||
|
}
|
||||||
|
// Un ID ne peut pas être un entier, pour éviter les conflits avec le système de pagination
|
||||||
|
if(intval($text) !== 0) {
|
||||||
|
$text = 'i' . $text;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case self::FILTER_INT:
|
||||||
|
$text = (int) filter_var($text, FILTER_SANITIZE_NUMBER_INT);
|
||||||
|
break;
|
||||||
|
case self::FILTER_MAIL:
|
||||||
|
$text = filter_var($text, FILTER_SANITIZE_EMAIL);
|
||||||
|
break;
|
||||||
|
case self::FILTER_PASSWORD:
|
||||||
|
$text = password_hash($text, PASSWORD_BCRYPT);
|
||||||
|
break;
|
||||||
|
case self::FILTER_STRING_LONG:
|
||||||
|
$text = mb_substr(filter_var($text, FILTER_SANITIZE_STRING), 0, 500000);
|
||||||
|
break;
|
||||||
|
case self::FILTER_STRING_SHORT:
|
||||||
|
$text = mb_substr(filter_var($text, FILTER_SANITIZE_STRING), 0, 500);
|
||||||
|
break;
|
||||||
|
case self::FILTER_TIMESTAMP:
|
||||||
|
$text = date('Y-m-d H:i:s', $text);
|
||||||
|
break;
|
||||||
|
case self::FILTER_URL:
|
||||||
|
$text = filter_var($text, FILTER_SANITIZE_URL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return get_magic_quotes_gpc() ? stripslashes($text) : $text;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Incrémente une clé en fonction des clés ou des valeurs d'un tableau
|
||||||
|
* @param mixed $key Clé à incrémenter
|
||||||
|
* @param array $array Tableau à vérifier
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function increment($key, $array = []) {
|
||||||
|
// Pas besoin d'incrémenter si la clef n'existe pas
|
||||||
|
if($array === []) {
|
||||||
|
return $key;
|
||||||
|
}
|
||||||
|
// Incrémente la clef
|
||||||
|
else {
|
||||||
|
// Si la clef est numérique elle est incrémentée
|
||||||
|
if(is_numeric($key)) {
|
||||||
|
$newKey = $key;
|
||||||
|
while(array_key_exists($newKey, $array) OR in_array($newKey, $array)) {
|
||||||
|
$newKey++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Sinon l'incrémentation est ajoutée après la clef
|
||||||
|
else {
|
||||||
|
$i = 2;
|
||||||
|
$newKey = $key;
|
||||||
|
while(array_key_exists($newKey, $array) OR in_array($newKey, $array)) {
|
||||||
|
$newKey = $key . '-' . $i;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $newKey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Minimise du css
|
||||||
|
* @param string $css Css à minimiser
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function minifyCss($css) {
|
||||||
|
// Supprime les commentaires
|
||||||
|
$css = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $css);
|
||||||
|
// Supprime les tabulations, espaces, nouvelles lignes, etc...
|
||||||
|
$css = str_replace(["\r\n", "\r", "\n" ,"\t", ' ', ' ', ' '], '', $css);
|
||||||
|
$css = preg_replace(['(( )+{)', '({( )+)'], '{', $css);
|
||||||
|
$css = preg_replace(['(( )+})', '(}( )+)', '(;( )*})'], '}', $css);
|
||||||
|
$css = preg_replace(['(;( )+)', '(( )+;)'], ';', $css);
|
||||||
|
// Retourne le css minifié
|
||||||
|
return $css;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Minimise du js
|
||||||
|
* @param string $js Js à minimiser
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function minifyJs($js) {
|
||||||
|
// Supprime les commentaires
|
||||||
|
$js = preg_replace('/\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/|\s*(?<![\:\=])\/\/.*/', '', $js);
|
||||||
|
// Supprime les tabulations, espaces, nouvelles lignes, etc...
|
||||||
|
$js = str_replace(["\r\n", "\r", "\t", "\n", ' ', ' ', ' '], '', $js);
|
||||||
|
$js = preg_replace(['(( )+\))', '(\)( )+)'], ')', $js);
|
||||||
|
// Retourne le js minifié
|
||||||
|
return $js;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crée un système de pagination (retourne un tableau contenant les informations sur la pagination (first, last, pages))
|
||||||
|
* @param array $array Tableau de donnée à utiliser
|
||||||
|
* @param string $url URL à utiliser, la dernière partie doit correspondre au numéro de page, par défaut utiliser $this->getUrl()
|
||||||
|
* @param string $item pagination nombre d'éléments par page
|
||||||
|
* @param null|int $sufix Suffixe de l'url
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function pagination($array, $url, $item, $sufix = null) {
|
||||||
|
// Scinde l'url
|
||||||
|
$url = explode('/', $url);
|
||||||
|
// Url de pagination
|
||||||
|
$urlPagination = is_numeric($url[count($url) - 1]) ? array_pop($url) : 1;
|
||||||
|
// Url de la page courante
|
||||||
|
$urlCurrent = implode('/', $url);
|
||||||
|
// Nombre d'éléments à afficher
|
||||||
|
$nbElements = count($array);
|
||||||
|
// Nombre de page
|
||||||
|
$nbPage = ceil($nbElements / $item);
|
||||||
|
// Page courante
|
||||||
|
$currentPage = is_numeric($urlPagination) ? self::filter($urlPagination, self::FILTER_INT) : 1;
|
||||||
|
// Premier élément de la page
|
||||||
|
$firstElement = ($currentPage - 1) * $item;
|
||||||
|
// Dernier élément de la page
|
||||||
|
$lastElement = $firstElement + $item;
|
||||||
|
$lastElement = ($lastElement > $nbElements) ? $nbElements : $lastElement;
|
||||||
|
// Mise en forme de la liste des pages
|
||||||
|
$pages = '';
|
||||||
|
if($nbPage > 1) {
|
||||||
|
for($i = 1; $i <= $nbPage; $i++) {
|
||||||
|
$disabled = ($i === $currentPage) ? ' class="disabled"' : false;
|
||||||
|
$pages .= '<a href="' . helper::baseUrl() . $urlCurrent . '/' . $i . $sufix . '"' . $disabled . '>' . $i . '</a>';
|
||||||
|
}
|
||||||
|
$pages = '<div class="pagination">' . $pages . '</div>';
|
||||||
|
}
|
||||||
|
// Retourne un tableau contenant les informations sur la pagination
|
||||||
|
return [
|
||||||
|
'first' => $firstElement,
|
||||||
|
'last' => $lastElement,
|
||||||
|
'pages' => $pages
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calcul de la luminance relative d'une couleur
|
||||||
|
*/
|
||||||
|
public static function relativeLuminanceW3C($rgba) {
|
||||||
|
// Conversion en sRGB
|
||||||
|
$RsRGB = $rgba[0] / 255;
|
||||||
|
$GsRGB = $rgba[1] / 255;
|
||||||
|
$BsRGB = $rgba[2] / 255;
|
||||||
|
// Ajout de la transparence
|
||||||
|
$RsRGBA = $rgba[3] * $RsRGB + (1 - $rgba[3]);
|
||||||
|
$GsRGBA = $rgba[3] * $GsRGB + (1 - $rgba[3]);
|
||||||
|
$BsRGBA = $rgba[3] * $BsRGB + (1 - $rgba[3]);
|
||||||
|
// Calcul de la luminance
|
||||||
|
$R = ($RsRGBA <= .03928) ? $RsRGBA / 12.92 : pow(($RsRGBA + .055) / 1.055, 2.4);
|
||||||
|
$G = ($GsRGBA <= .03928) ? $GsRGBA / 12.92 : pow(($GsRGBA + .055) / 1.055, 2.4);
|
||||||
|
$B = ($BsRGBA <= .03928) ? $BsRGBA / 12.92 : pow(($BsRGBA + .055) / 1.055, 2.4);
|
||||||
|
return .2126 * $R + .7152 * $G + .0722 * $B;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retourne les attributs d'une balise au bon format
|
||||||
|
* @param array $array Liste des attributs ($key => $value)
|
||||||
|
* @param array $exclude Clés à ignorer ($key)
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function sprintAttributes(array $array = [], array $exclude = []) {
|
||||||
|
$exclude = array_merge(
|
||||||
|
[
|
||||||
|
'before',
|
||||||
|
'classWrapper',
|
||||||
|
'help',
|
||||||
|
'label'
|
||||||
|
],
|
||||||
|
$exclude
|
||||||
|
);
|
||||||
|
$attributes = [];
|
||||||
|
foreach($array as $key => $value) {
|
||||||
|
if(($value OR $value === 0) AND in_array($key, $exclude) === false) {
|
||||||
|
// Désactive le message de modifications non enregistrées pour le champ
|
||||||
|
if($key === 'noDirty') {
|
||||||
|
$attributes[] = 'data-no-dirty';
|
||||||
|
}
|
||||||
|
// Disabled
|
||||||
|
// Readonly
|
||||||
|
elseif(in_array($key, ['disabled', 'readonly'])) {
|
||||||
|
$attributes[] = sprintf('%s', $key);
|
||||||
|
}
|
||||||
|
// Autres
|
||||||
|
else {
|
||||||
|
$attributes[] = sprintf('%s="%s"', $key, $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return implode(' ', $attributes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retourne un segment de chaîne sans couper de mot
|
||||||
|
* @param string $text Texte à scinder
|
||||||
|
* @param int $start (voir substr de PHP pour fonctionnement)
|
||||||
|
* @param int $length (voir substr de PHP pour fonctionnement)
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function subword($text, $start, $length) {
|
||||||
|
$text = trim($text);
|
||||||
|
if(strlen($text) > $length) {
|
||||||
|
$text = mb_substr($text, $start, $length);
|
||||||
|
$text = mb_substr($text, 0, min(mb_strlen($text), mb_strrpos($text, ' ')));
|
||||||
|
}
|
||||||
|
return $text;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
3
core/class/phpmailer/.htaccess
Normal file
3
core/class/phpmailer/.htaccess
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Bloque l'accès à la librairie
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
745
core/class/template.class.php
Normal file
745
core/class/template.class.php
Normal file
@ -0,0 +1,745 @@
|
|||||||
|
<?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 capcha
|
||||||
|
* @param string $nameId Nom et id du champ
|
||||||
|
* @param array $attributes Attributs ($key => $value)
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function capcha($nameId, array $attributes = []) {
|
||||||
|
// Attributs par défaut
|
||||||
|
$attributes = array_merge([
|
||||||
|
'class' => '',
|
||||||
|
'classWrapper' => '',
|
||||||
|
'help' => '',
|
||||||
|
'id' => $nameId,
|
||||||
|
'name' => $nameId,
|
||||||
|
'value' => ''
|
||||||
|
], $attributes);
|
||||||
|
// Génère deux nombres pour le capcha
|
||||||
|
$firstNumber = mt_rand(1, 15);
|
||||||
|
$secondNumber = mt_rand(1, 15);
|
||||||
|
// Début du wrapper
|
||||||
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">';
|
||||||
|
// Label
|
||||||
|
$html .= self::label($attributes['id'], $firstNumber . ' + ' . $secondNumber . ' = ?', [
|
||||||
|
'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);
|
||||||
|
// Capcha
|
||||||
|
$html .= sprintf(
|
||||||
|
'<input type="text" %s>',
|
||||||
|
helper::sprintAttributes($attributes)
|
||||||
|
);
|
||||||
|
// Champs cachés contenant les nombres
|
||||||
|
$html .= self::hidden($attributes['id'] . 'FirstNumber', [
|
||||||
|
'value' => $firstNumber,
|
||||||
|
'before' => false
|
||||||
|
]);
|
||||||
|
$html .= self::hidden($attributes['id'] . 'SecondNumber', [
|
||||||
|
'value' => $secondNumber,
|
||||||
|
'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 .= sprintf(
|
||||||
|
'<input type="text" class="datepicker %s" value="%s" %s>',
|
||||||
|
$attributes['class'],
|
||||||
|
$attributes['value'],
|
||||||
|
helper::sprintAttributes($attributes, ['class', 'value'])
|
||||||
|
);
|
||||||
|
// 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>';
|
||||||
|
$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('site/data/'.'core.json') .
|
||||||
|
'&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 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' => ''
|
||||||
|
], $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']];
|
||||||
|
}
|
||||||
|
// 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 .= 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 $attributes Attributs ($key => $value)
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function table(array $cols = [], array $body = [], array $head = [], array $attributes = []) {
|
||||||
|
// 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>';
|
||||||
|
$i = 0;
|
||||||
|
foreach($head as $th) {
|
||||||
|
$html .= '<th class="col' . $cols[$i++] . '">' . $th . '</th>';
|
||||||
|
}
|
||||||
|
// Fin des entêtes
|
||||||
|
$html .= '</tr>';
|
||||||
|
$html .= '</thead>';
|
||||||
|
}
|
||||||
|
// Début contenu
|
||||||
|
$html .= '<tbody>';
|
||||||
|
foreach($body as $tr) {
|
||||||
|
$html .= '<tr>';
|
||||||
|
$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 editorCss possible pour utiliser le éditeurs (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;
|
||||||
|
}
|
||||||
|
}
|
1153
core/core.php
1153
core/core.php
File diff suppressed because it is too large
Load Diff
@ -23,12 +23,16 @@ if(version_compare(PHP_VERSION, '5.6.0', '<')) {
|
|||||||
|
|
||||||
/* Set locale to French */
|
/* Set locale to French */
|
||||||
date_default_timezone_set('Europe/Paris');
|
date_default_timezone_set('Europe/Paris');
|
||||||
setlocale (LC_TIME, 'fr_FR', 'french');
|
setlocale (LC_TIME, 'fra_FRA', 'french');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialisation de Zwii
|
* Initialisation de Zwii
|
||||||
*/
|
*/
|
||||||
session_start();
|
session_start();
|
||||||
|
// Chargement des classes
|
||||||
|
require 'core/class/autoload.php';
|
||||||
|
autoload::autoloader();
|
||||||
|
// Chargement du coeur
|
||||||
require 'core/core.php';
|
require 'core/core.php';
|
||||||
$core = new core;
|
$core = new core;
|
||||||
spl_autoload_register('core::autoload');
|
spl_autoload_register('core::autoload');
|
||||||
|
Loading…
Reference in New Issue
Block a user