File "Utils.php"
Full path: /home/humancap/cl.humancap.com.my/class/common/Utils.php
File
size: 14.12 KB B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
namespace common;
class Utils
{
/* Components */
public static function alert($content, $class)
{
if (DEMO === true) {
$content = '<span class="badge text-bg-warning me-2">DEMO</span>' . $content;
}
$alert = '<div class="alert ' . $class . ' alert-dismissible fade show" role="alert"><span class="text-semibold">' . $content . '</span><button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>' . "\n";
return $alert;
}
/**
* @param string $title card title
* @param string $classname Boootstrap card class (bg-success, bg-primary, bg-warning, bg-danger)
* @param string $heading_elements separated comma list : collapse, close
*/
public static function startCard($title, $classname, $header_classname = '', $heading_elements = '', $has_body = true)
{
$start_card = '<div class="card ' . $classname . ' mb-4">' . "\n";
if (!empty($title)) {
$start_card .= ' <div class="card-header ' . $header_classname . ' align-items-center">' . $title . "\n";
if (!empty($heading_elements)) {
$heading_elements = array_map('trim', explode(',', $heading_elements));
$start_card .= ' <div class="heading-elements">' . "\n";
if (in_array('collapse', $heading_elements)) {
$random_id = 'a' . uniqid();
$start_card .= ' <a class="dropdown-toggle fs-5 text-dark" data-bs-toggle="collapse" href="#' . $random_id . '" role="button" aria-expanded="false" aria-controls="' . $random_id . '"></a>' . "\n";
}
if (in_array('close', $heading_elements)) {
$start_card .= ' <button type="button" class="btn-close" aria-label="Close"></button>' . "\n";
}
$start_card .= ' </ul>' . "\n";
$start_card .= ' </div>' . "\n";
}
$start_card .= ' </div>' . "\n";
}
if ($has_body === true) {
$collapsed = '';
if (preg_match('`card-collapsed`', $classname)) {
$collapsed = ' collapse';
}
$start_card .= ' <div class="card-body' . $collapsed . '"';
if (isset($random_id)) {
$start_card .= ' id="' . $random_id . '"';
}
$start_card .= '>' . "\n";
}
return $start_card;
}
public static function endCard($has_body = true)
{
$end_card = '';
if ($has_body === true) {
$end_card .= ' </div>' . "\n";
}
$end_card .= '</div>' . "\n";
return $end_card;
}
/**
* @param string $title panel title
* @param string $classname Boootstrap panel class (bg-success, bg-primary, bg-warning, bg-danger)
* @param string $heading_elements separated comma list : collapse, reload, close
* @param string $content panel body html content
*/
public static function alertCard($title, $classname, $header_classname = '', $heading_elements = '', $content = '')
{
if (!empty($content)) {
$has_body = true;
} else {
$has_body = false;
}
$card = self::startCard($title, $classname, $header_classname, $heading_elements, $has_body);
$card .= $content;
$card .= self::endCard($has_body);
return $card;
}
/* Numbers */
public static function formatNumber($nbre)
{
$nbre = number_format($nbre, 2, '.', ' ');
/* on supprime '.00' à la fin si nécessaire */
if (preg_match('`([0-9\s]+)\.00$`', $nbre, $out)) {
$nbre = $out[1];
}
return $nbre;
}
public static function multiple($i, $nb)
{
$calcul = (round($i / $nb) - ($i / $nb));
if ($calcul == "0") {
return true; // $i est multiple de $nb
} else {
return false; // $i n'est pas multiple de $nb
}
}
public static function pair($nb)
{
$calcul = (round($nb / 2) - ($nb / 2));
if ($calcul == "0") {
return true; // $nb est pair
} else {
return false; // $nb n'est pas impair
}
}
/* Dates */
/**
* isValidTimeStamp
* from https://stackoverflow.com/questions/2524680/check-whether-the-string-is-a-unix-timestamp
*
* @param mixed $timestamp
* @return void
*/
public static function isValidTimeStamp($timestamp)
{
return ((intval($timestamp) <= PHP_INT_MAX) && (intval($timestamp) >= ~PHP_INT_MAX));
}
/*[UNUSED] public static function pickerdateToMysqlDate($date, $pickerdate_format, $fieldtype)
{
$find = array('a.m.', 'p.m.');
$replace = array('AM', 'PM');
$date = str_replace($find, $replace, $date);
try {
if (class_exists('IntlDateFormatter')) {
// ICU values
$find = array('dddd', 'ddd', 'mmmm', 'mmm', 'mm', 'm', 'i', 'A');
$replace = array('eeee', 'eee', 'MMMM', 'MMM', 'MM', 'M', 'm', 'a');
$icu_format = str_replace($find, $replace, $pickerdate_format);
// If hour is in 24h format and the format uses AM/PM we
if (strpos($icu_format, 'H') > 0 && strpos($icu_format, 'a') > 0) {
$icu_format = str_replace('H', 'h', $icu_format);
}
$fmt = new \IntlDateFormatter(
str_replace('_', '-', DATETIMEPICKERS_LANG),
\IntlDateFormatter::FULL,
\IntlDateFormatter::FULL,
date_default_timezone_get(),
\IntlDateFormatter::GREGORIAN,
$icu_format
);
$ts = $fmt->parse($date);
switch ($fieldtype) {
case 'date':
$mysql_date = date('Y-m-d', $ts);
break;
case 'month':
$mysql_date = date('m', $ts);
break;
case 'datetime':
$mysql_date = date('Y-m-d H:i:s', $ts);
break;
case 'time':
$mysql_date = date('H:i:s', $ts);
break;
default:
$mysql_date = date('Y-m-d', $ts);
break;
}
return $mysql_date;
} else {
return $date;
}
} catch (\Exception $e) {
// echo $e->getMessage();
return WRONG_DATE_FORMAT;
}
} */
public static function dateUsToFr($date)
{
sscanf($date, "%4s-%2s-%2s", $y, $mo, $d);
return $d.'-'.$mo.'-'.$y;
}
public static function dateTimeToDate($dateTime)
{
$retour = preg_replace('/([0-9]{4}-[0-9]{2}-[0-9]{2}) [0-9]{2}:[0-9]{2}:[0-9]{2}/', '$1', $dateTime);
return $retour;
}
public static function dateTimeToTime($dateTime)
{
$retour = preg_replace('/[0-9]{4}-[0-9]{2}-[0-9]{2} ([0-9]{2}:[0-9]{2}:[0-9]{2})/', '$1', $dateTime);
return $retour;
}
public static function addYear()
{
$format = 'Y-m-d';
$aujourdhui = date($format);
$tab = explode('-', $aujourdhui);
$tab[0] = $tab[0]+1;
$dansUnAn = $tab[0] . '-' . $tab[1] . '-' . $tab[2];
return $dansUnAn;
}
public static function translateMonth($number)
{
// pour les répertoires des factures, pas de multilingue
$tabMois = array(1 => 'janvier', 2 => 'fevrier', 3 => 'mars', 4 => 'avril', 5 => 'mai', 6 => 'juin', 7 => 'juillet', 8 => 'aout', 9 => 'septembre', 10 => 'octobre', 11 => 'novembre', 12 => 'decembre');
return $tabMois[(int) $number]; // (int) supprime les zéros initiaux
}
/* Strings */
public static function sanitize($var)
{
$ancienNom = trim($var);
$charset = 'utf-8';
$nouveauNom = htmlentities($ancienNom, ENT_NOQUOTES, $charset);
$nouveauNom = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $nouveauNom);
$nouveauNom = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $nouveauNom); // pour les ligatures e.g. 'œ'
$nouveauNom = preg_replace('#\&[^;]+\;#', '', $nouveauNom); // supprime les autres caractères
$nouveauNom = preg_replace('`[ &~"#{( \'\[|\\^@)\]=}$¤*µ%,;:!?/§.]+`', '-', $nouveauNom);
while (preg_match('`--`', $nouveauNom)) {
$nouveauNom = preg_replace('`--`', '-', $nouveauNom);
}
$nouveauNom = trim(strtolower($nouveauNom), '-');
return $nouveauNom;
}
public static function formatName($var) // for files, keep extension dot
{
$ancienNom = trim($var);
$charset = 'utf-8';
$nouveauNom = htmlentities($ancienNom, ENT_NOQUOTES, $charset);
$nouveauNom = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $nouveauNom);
$nouveauNom = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $nouveauNom); // pour les ligatures e.g. 'œ'
$nouveauNom = preg_replace('#\&[^;]+\;#', '', $nouveauNom); // supprime les autres caractères
$nouveauNom = preg_replace('`[ &~"#{( \'\[|\\^@)\]=}$¤*µ%,;:!?/§]+`', '-', $nouveauNom);
while (preg_match('`--`', $nouveauNom)) {
$nouveauNom = preg_replace('`--`', '-', $nouveauNom);
}
$nouveauNom = strtolower($nouveauNom);
return $nouveauNom;
}
public static function hexaEncode($chaine) // encode email addresses
{
$longueur=strlen($chaine);
$retour = '';
for ($i=0; $i<$longueur; $i++) {
$retour .= '&#x' . bin2hex(substr($chaine, $i, 1)) . ';';
}
return $retour;
}
/**
* transform a lowercase string with underscores or hyphens to camelCase
* @param [type] $str
* @param array $noStrip non-spacing additional characters
* @return upperCamelCased string
*/
public static function camelCase($str, array $noStrip = array())
{
$str = self::sanitize($str);
// non-alpha and non-numeric characters become spaces
$str = preg_replace('/[^a-zA-Z0-9' . implode("", $noStrip) . ']+/i', ' ', $str);
$str = trim($str);
// uppercase the first character of each word
$str = ucwords($str);
$str = str_replace(" ", "", $str);
return lcfirst($str);
}
public static function replaceAccents($str, $charset = 'utf-8')
{
$str = htmlentities($str, ENT_NOQUOTES, $charset);
$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'œ'
$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
return $str;
}
public static function truncateString($chaine, $nbreDeCaracteres)
{
if (strlen($chaine) <= $nbreDeCaracteres) {
return $chaine;
}
$texte = wordwrap($chaine, $nbreDeCaracteres, ' coupure '); //on ajoute le mot 'coupure' après le dernier mot inclus jusqu'à n caractères,
$pos = strpos($texte, ' coupure'); //on récupère la position du mot 'coupure'
$texte = substr($texte, 0, $pos); //on coupe ce qui est après
return $texte . ' ...';
}
/* Data */
public static function replaceWithBooleen($value)
{
if (!empty($value)) {
return '<i class="' . ICON_CHECKMARK . ' icon-lg text-success"></i>';
} else {
return '<i class="' . ICON_CANCEL . ' icon-md text-danger"></i>';
}
}
/* Attributes & classes */
/**
* Returns linearised attributes.
* @param string $attr The element attributes
* @return string Linearised attributes
* Exemple : size=30, required=required => size="30" required="required"
*/
public static function getAttributes($attr)
{
if (empty($attr)) {
return '';
} else {
$attr = preg_replace('`\s*=\s*`', '="', $attr) . '"'; // adding quotes
$attr = preg_replace_callback('`(.){1},\s*`', array('self', 'replaceCallback'), $attr);
return ' ' . $attr;
}
}
/**
* Add new class to $attr.(see options).
*
* @param string $newclassname The new class
* @param string $attr The element attributes
* @return string $attr including new class.
*/
public static function addClass($newclassname, $attr)
{
if (preg_match('`class="([^"]+)"`', $attr, $out)) {
// if $attr already contains a class we keep it and add newclassname
$new_class = 'class="' . $out[1] . ' ' . $newclassname . '"';
return preg_replace('`class="([^"]+)"`', $new_class, $attr);
} else {
// if $attr contains no class we add elementClass
return $attr . ' class="' . $newclassname . '"';
}
}
/**
* Used for getAttributes regex.
*/
protected static function replaceCallback($motif)
{
/* if there's no antislash before the comma */
if (preg_match('`[^\\\]`', $motif[1])) {
return $motif[1] . '" ';
} else {
return ',';
}
}
/* Arrays */
/**
* Look for a value in an associative array inside an indexed array
* @param array $indexed_array
* @param string $key key to look for
* @param string $value value to match key
* @return array indexes found in indexed array
*/
public static function findInIndexedArray($indexed_array, $key, $value)
{
$index_array = array();
foreach ($indexed_array as $index => $assoc_array) {
if ($assoc_array[$key] === $value) {
$index_array[] = $index;
}
}
return $index_array;
}
}