homegrade_theme_production/includes/utilities.php
Nonimart 1886840c70
Some checks failed
continuous-integration/drone/push Build is failing
FINAL MERGE V2 (from antoine-merge branch)
2025-08-05 14:53:21 +02:00

290 lines
8.4 KiB
PHP

<?php
$theme_namespace = 'homegrade-theme__texte-fonctionnel';
/* -------------------------------------------
GET THEMATIQUE FAMILY (FOR COLOR SCHEME)
---------------------------------------------*/
function getThematiqueFamilySlug($thematique_slug)
{
if (!$thematique_slug) {
return null;
}
switch ($thematique_slug) {
case "energie":
case "urbanisme":
case "stedenbouw":
return "energies-urbanisme";
case "acoustique":
case "akoestiek":
case "petites-coproprietes":
case "coproprietes":
case "mede-eigendommen":
return "acoustique-coproprietes";
case "isolation":
case "isolatie":
case "au-quotidien":
return "isolation-quotidien";
case "energies":
case "urbanisme":
case "stedenbouw":
return "energies-urbanisme";
case "patrimoine":
case "erfgoed":
case "sante-et-securite":
case "gezondheid-en-veiligheid":
case "aides-financieres":
case "financiele-steun":
return "patrimoine-sante-securite";
case "location":
case "verhuur":
case "duurzaamheid":
case "durabilite":
return "location-durabilite";
}
}
/* -------------------------------------------
GETTING MAIN ROOT THEMATIQUE
---------------------------------------------*/
function getParentThematique($thematique)
{
if (!$thematique) {
return null;
}
if ($thematique->parent == 0) {
return $thematique;
} else {
return get_term($thematique->parent, 'thematiques');
}
}
// DOES THE SAME THING AS ABOVE BUT RENAMED
function getMainThematique($thematique)
{
if (!$thematique) {
return null;
}
if ($thematique->parent == 0) {
return $thematique;
} else {
return get_term($thematique->parent, 'thematiques');
}
}
// Retriev the main thematique for a spefic postID
function getPostMainThematique($post)
{
$terms = get_the_terms($post, "thematiques");
if (!$terms) return null;
$mainThematique = getMainThematique(get_the_terms($post, "thematiques")[0]);
if (!$mainThematique) return null;
return $mainThematique;
}
// TO GET ARCHIVE RELATED PAGES BY TEMPLATE
function get_page_by_template($template = '')
{
$args = array(
'meta_key' => '_wp_page_template',
'meta_value' => $template
);
return get_pages($args);
}
function show_post_type_label_name($post_type)
{
switch ($post_type) {
case 'questions':
return __("Question", "homegrade-theme__texte-backoffice");
case 'conseils':
return __("Conseil", "homegrade-theme__texte-backoffice");
case 'page':
return __("Page", "homegrade-theme__texte-backoffice");
case 'post':
return __("News", "homegrade-theme__texte-backoffice");
case 'jobs':
return __("Offre d'emploi", "homegrade-theme__texte-backoffice");
case 'brochures':
return __("Brochures", "homegrade-theme__texte-backoffice");
case 'fiches-infos':
return __("Fiche info", "homegrade-theme__texte-backoffice");
default:
return null;
}
}
/* ---------
SORT BY THEMATIQUE PRIORITY
-----------------*/
// Fonction de comparaison pour trier par 'thematique_priority' utilisé par la fonction supérieur
function compareThematiquePriority($postA, $postB)
{
$priorityA = $postA->thematique_priority ?? 0;
$priorityB = $postB->thematique_priority ?? 0;
$thematiqueA = getPostMainThematique($postA);
$thematiqueB = getPostMainThematique($postB);
$DocumentA = get_field('brochure_pdf', $postA->ID);
$DocumentB = get_field('brochure_pdf', $postB->ID);
$titleA = $DocumentA['title'] ?? null;
$titleB = $DocumentB['title'] ?? null;
if ($priorityA == $priorityB && $thematiqueA->name != $thematiqueB->name) {
return strcmp($thematiqueA->name, $thematiqueB->name);
}
if ($priorityA == $priorityB && $thematiqueA->name == $thematiqueB->name && $titleA && $titleB) {
return strcmp($titleA, $titleB);
}
if ($priorityA < $priorityB) {
return 1;
}
if ($priorityA > $priorityB) {
return -1;
}
}
function sort_posts_per_thematiques_priority($postsQuery)
{
foreach ($postsQuery->posts as $key => $post) {
$thematique = getPostMainThematique($post);
$post->thematique_priority = get_field('thematique_order', $thematique) ?? 0;
}
// Tri du tableau en utilisant la fonction de comparaison
usort($postsQuery->posts, 'compareThematiquePriority');
return $postsQuery;
}
/* -------------------------------------------
Build The page chaptering index
---------------------------------------------*/
function build_page_chapter_index($blocks)
{
$chapterBlockIndex = [];
foreach ($blocks as $key => $block) {
if ($block['blockName'] == 'homegrade-content-blocks/content-heading' && isset($block['attrs']['title']) && isset($block['attrs']['headingLevel']) && $block['attrs']['headingLevel'] == "h2") {
array_push($chapterBlockIndex, [
'block-type' => $block['blockName'],
'anchor' => "#" . strip_tags($block['attrs']['idName']),
'title' => strip_tags($block['attrs']['title']),
]);
}
if ($block['blockName'] == 'homegrade-content-blocks/chapitrage-thematique') {
foreach ($block['innerBlocks'] as $key => $innerBlock) {
if (!$innerBlock['attrs']['chapterTitle']) continue;
$cleanedTitle = strtolower(preg_replace("/[^a-zA-Z]/", "", $innerBlock['attrs']['chapterTitle']));
array_push($chapterBlockIndex, [
'block-type' => $block['blockName'],
'anchor' => '#' . $cleanedTitle,
'title' => $innerBlock['attrs']['chapterTitle'],
]);
}
}
if ($block['blockName'] == 'homegrade-content-blocks/post-content-container') {
if (!$block || !$block['attrs'] || $block['attrs']['relatedPostId'] == 0) continue;
$shortTitle = get_field('short_title', $block['attrs']['relatedPostId']);
$anchor = $block['attrs'] && !empty($block['attrs']['anchor']) ? esc_html($block['attrs']['anchor']) : "post-content-container-" . $block['attrs']['relatedPostId'];
array_push($chapterBlockIndex, [
'block-type' => $block['blockName'],
'anchor' => "#" . $anchor,
'title' => $shortTitle ? $shortTitle : get_the_title($block['attrs']['relatedPostId']),
]);
}
if ($block['blockName'] == 'homegrade-content-blocks/questions-container') {
if (!$block || !$block['attrs'] || $block['attrs']['relatedPostId'] == 0) continue;
$shortTitle = get_field('short_title', $block['attrs']['relatedPostId']);
$anchor = isset($block['attrs']['anchor']) ? esc_html($block['attrs']['anchor']) : "questions-container-" . $block['attrs']['relatedPostId'];
array_push($chapterBlockIndex, [
'block-type' => $block['blockName'],
'anchor' => '#' . $anchor,
'title' => $shortTitle ? $shortTitle : get_the_title($block['attrs']['relatedPostId']),
]);
}
if ($block['blockName'] == 'homegrade-content-blocks/vocabulaire-summary') {
array_push($chapterBlockIndex, [
'block-type' => $block['blockName'],
'anchor' => "#vocabulaire-summary",
'title' => __("Vocabulaire", "homegrade-theme__texte-fonctionnel") . " " . get_the_terms(get_the_ID(), "thematiques")[0]->name,
]);
}
if ($block['blockName'] == 'homegrade-content-blocks/help-homegrade') {
array_push($chapterBlockIndex, [
'block-type' => $block['blockName'],
'anchor' => "#homegrade-vous-aide",
'title' => __("Homegrade vous aide", "homegrade-blocks__texte-fonctionnel"),
]);
}
if ($block['blockName'] == 'homegrade-content-blocks/partners-other-services') {
array_push($chapterBlockIndex, [
'block-type' => $block['blockName'],
'anchor' => "#partenaires-autres-services",
'title' => __("Partenaires & autres services", "homegrade-blocks__texte-fonctionnel"),
]);
}
if ($block['blockName'] == 'homegrade-content-blocks/plus-loin') {
array_push($chapterBlockIndex, [
'block-type' => $block['blockName'],
'anchor' => "#aller-plus-loin",
'title' => __("Publications et liens utiles", "homegrade-blocks__texte-fonctionnel"),
]);
}
}
return $chapterBlockIndex;
}
/* -------------------------------------------
GET PARCOURS PREVIOUS/NEXT POSTS
---------------------------------------------*/
function get_parcours_previous_next_posts($post)
{
$prev_post = get_previous_post() ?? null;
$next_post = get_next_post() ?? null;
$test_next = get_adjacent_post(false, '', false, 'thematiques');
$test = new WP_Query(array('orderby' => 'menu_order', 'order' => 'ASC'));
return [
'prev_post' => $prev_post,
'next_post' => $next_post,
'test' => $test_next
];
}