parent == 0; }); return $parentTerms; } function get_the_children_terms($taxonomy, $postID) { if (!$postID || !$taxonomy || !taxonomy_exists($taxonomy)) return null; $terms = get_the_terms($postID, $taxonomy); if (!$terms || empty($terms)) return []; $childrenTerms = array_filter($terms, function ($term) { return $term->parent !== 0; }); return $childrenTerms; } function get_children_terms_from_specific_parent($taxonomy, $postID, $parentTerm) { if (!$postID || !$taxonomy || !taxonomy_exists($taxonomy)) return null; $childrenTerms = get_the_children_terms($taxonomy, $postID); $filteredChildrenTerms = array_filter($childrenTerms, function ($term) use ($parentTerm) { return $term->parent === $parentTerm->term_id; }); return $filteredChildrenTerms; } function get_the_terms_organised_by_parent($taxonomy, $postID = null) { if (!$postID) return; $terms = get_the_terms($postID, $taxonomy); $sortedTermsByParent = []; if (!$terms) return $sortedTermsByParent; $parentTerms = get_the_parent_terms($taxonomy, $postID); foreach ($parentTerms as $parentTerm) { $sortedTermsByParent[] = $parentTerm; $childrenTerms = get_children_terms_from_specific_parent($taxonomy, $postID, $parentTerm); foreach ($childrenTerms as $childTerm) { $sortedTermsByParent[] = $childTerm; } } return $sortedTermsByParent; } function getAllBatimentsTermsByParents() { // Récupérer tous les termes de la taxonomie 'elementsbatiments' avec une hiérarchie $ElementBatimentsTerms = get_terms([ 'taxonomy' => 'elementsbatiments', 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => false, ]); $terms_by_parent = []; $child_terms = []; if ($ElementBatimentsTerms) { // Boucle pour organiser les termes en fonction de leurs parents foreach ($ElementBatimentsTerms as $term) { if ($term->parent == 0) { // Si c'est un parent, on le place dans le tableau des parents $terms_by_parent[$term->term_id] = ['term' => $term, 'children' => []]; } else { $child_terms[$term->parent][] = $term; } } // Réunir les termes parents et leurs enfants foreach ($terms_by_parent as $parent_id => &$parent_data) { // Ajouter les enfants au parent if (isset($child_terms[$parent_id])) { $parent_data['children'] = $child_terms[$parent_id]; } } } return $terms_by_parent; } function getAllMetiersTermsByParents() { // Récupérer tous les termes de la taxonomie 'Metiers' avec une hiérarchie $MetiersTerms = get_terms([ 'taxonomy' => 'metiers', 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => false, ]); $terms_by_parent = []; $child_terms = []; if ($MetiersTerms) { // Boucle pour organiser les termes en fonction de leurs parents foreach ($MetiersTerms as $term) { if ($term->parent == 0) { // Si c'est un parent, on le place dans le tableau des parents $terms_by_parent[$term->term_id] = ['term' => $term, 'children' => []]; } else { $child_terms[$term->parent][] = $term; } } // Réunir les termes parents et leurs enfants foreach ($terms_by_parent as $parent_id => &$parent_data) { // Ajouter les enfants au parent if (isset($child_terms[$parent_id])) { $parent_data['children'] = $child_terms[$parent_id]; } } } return $terms_by_parent; } function getAllUsers() { $users = get_users(); return $users; } function get_region_by_postcode($postcode) { // Conversion du code postal en entier pour faciliter les comparaisons $postcode = (int) $postcode; // Bruxelles (1000 - 1200) if ($postcode >= 1000 && $postcode <= 1200) { return 'Bruxelles'; } // Flandre (8000 - 8999 : Flandre occidentale, 9000 - 9999 : Flandre orientale, 2000 - 2999 : Anvers, etc.) if (($postcode >= 8000 && $postcode <= 8999) || ($postcode >= 9000 && $postcode <= 9999) || ($postcode >= 2000 && $postcode <= 2999) || ($postcode >= 1500 && $postcode <= 1999) || ($postcode >= 3500 && $postcode <= 3999) ) { return 'Flandre'; } // Wallonie (4000 - 4999 : Liège, 6000 - 6999 : Hainaut, 6600 - 6999 : Luxembourg, 5000 - 5999 : Namur, etc.) if (($postcode >= 4000 && $postcode <= 4999) || ($postcode >= 6000 && $postcode <= 6999) || ($postcode >= 6600 && $postcode <= 6999) || ($postcode >= 5000 && $postcode <= 5999) || ($postcode >= 1300 && $postcode <= 1499) ) { return 'Wallonie'; } // Retourne une valeur par défaut si le code postal ne correspond à aucune région return 'Inconnu'; } function getAcfStateNameFromEnglish($localisation) { if ($localisation === 'brussels') { return 'Bruxelles'; } if ($localisation === 'flanders') { return 'Vlaams Gewest'; } if ($localisation === 'wallonia') { return 'Région Wallonne'; } if ($localisation === 'all') { return 'all'; } } function getGenericStateNameFromAcfStateName($state) { switch ($state) { case 'Bruxelles': return 'brussels'; case 'Région flamande': case 'Vlaams Gewest': return 'flanders'; case 'Région Wallonne': return 'wallonia'; case 'all': default: return 'all'; } }; function format_belgian_vat_number($vat_number) { $vat_number = strval($vat_number); $has_letters = preg_match('/[a-zA-Z]/', $vat_number); if ($has_letters) { return $vat_number; } if (strlen($vat_number) === 9) { return 0 . substr($vat_number, 0, 4) . '.' . substr($vat_number, 4, 3) . '.' . substr($vat_number, 7, 3); } if (strlen($vat_number) !== 10) { return $vat_number; } return substr($vat_number, 0, 4) . '.' . substr($vat_number, 4, 3) . '.' . substr($vat_number, 7, 3); } function getArtisanConseillerName($postID) { if (!$postID) return; $conseiller = get_field('conseiller', $postID); if (!$conseiller) return; $conseiller_name = $conseiller['user_firstname'] . ' ' . $conseiller['user_lastname']; return $conseiller_name; } function translate_wordpress_online_statuses($post_status) { $status_object = get_post_status_object($post_status); if ($post_status === 'publish') { return 'En ligne'; } if ($post_status === 'draft') { return 'Brouillon'; } if ($post_status === 'pending') { return 'En attente'; } if ($post_status === 'offline') { return 'Hors ligne'; } if ($post_status === 'trash') { return 'Corbeille'; } return $status_object->label; } function getFrenchDateFromTimestamp($timestamp) { $date = new DateTime($timestamp); $formatter = new IntlDateFormatter( 'fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Europe/Paris', IntlDateFormatter::GREGORIAN, 'd MMMM y' ); $formatted_date = $formatter->format($date); return $formatted_date; } function getRelativeTimeFromTimestamp($timestamp) { $date = new DateTime($timestamp); $now = new DateTime(); $interval = $date->diff($now); // Créer le message relatif $relative_time = ''; if ($interval->y > 0) { $relative_time = 'il y a ' . $interval->y . ' an' . ($interval->y > 1 ? 's' : ''); } elseif ($interval->m > 0) { $relative_time = 'il y a ' . $interval->m . ' mois'; } else { $relative_time = 'il y a ' . $interval->d . ' jour' . ($interval->d > 1 ? 's' : ''); } return $relative_time; } function format_phone_number($phoneNumber) { // Nettoyage du numéro : retirer espaces, tirets, points, etc. if (!$phoneNumber) return; $cleanedNumber = preg_replace('/\D+/', '', $phoneNumber); $phoneType = detectBelgianPhoneType($cleanedNumber); if ($phoneType === 'mobile') { $formattedPhoneNumber = preg_replace('/(\d{2})(\d{3})(\d{2})(\d{2})(\d{2})/', '+$1 $2 $3 $4 $5', $cleanedNumber); } else if ($phoneType === 'landline') { $formattedPhoneNumber = preg_replace('/(\d{2})(\d{1})(\d{3})(\d{2})(\d{2})/', '+$1 $2 $3 $4 $5', $cleanedNumber); } else if ($phoneType === 'fr_mobile') { $formattedPhoneNumber = preg_replace('/(\d{2})(\d{1})(\d{2})(\d{2})(\d{2})(\d{2})/', '+$1 $2 $3 $4 $5 $6', $cleanedNumber); } else { $formattedPhoneNumber = $cleanedNumber; } return $formattedPhoneNumber; } function detectBelgianPhoneType($number) { // Détection mobile if (preg_match('/^324(55|56|60|61|6[5-8]|7[0-9]|80|8[3-9]|9[0-9])[0-9]{6}$/', $number)) { return 'mobile'; } // Détection fixe if (preg_match('/^32[0-9]{8,10}$/', $number)) { return 'landline'; } if (preg_match('/^33[0-9]{9}$/', $number)) { return 'fr_mobile'; } return 'unknown'; }