From 7f57f705934068dd8f25f29cd8181fda2d5e954e Mon Sep 17 00:00:00 2001 From: Nonimart Date: Wed, 27 Aug 2025 10:57:28 +0200 Subject: [PATCH] REFACTOR Removing useless code --- includes/utilities.php | 410 +++++++++++++++++++---------------------- 1 file changed, 191 insertions(+), 219 deletions(-) diff --git a/includes/utilities.php b/includes/utilities.php index e89646e..415887d 100644 --- a/includes/utilities.php +++ b/includes/utilities.php @@ -1,219 +1,191 @@ - 'articles', - 'posts_per_page' => -1, - 'post_status' => 'publish', - 'meta_query' => array( - array( - 'key' => 'related_revue', - 'value' => $revueID, - 'compare' => '=', - ), - ), - )); - $authors = array(); - - foreach ($revueRelatedArticles->posts as $article) { - $currentArticleAuthors = get_field('authors', $article->ID); - - if (empty($currentArticleAuthors) || !is_array($currentArticleAuthors)) continue; - - foreach ($currentArticleAuthors as $authorID) { - $authors[] = $authorID; - } - } - return array_unique($authors); -} - -function get_revue_terms($revueID, $taxonomy) -{ - $revueRelatedArticles = new WP_Query(array( - 'post_type' => 'articles', - 'posts_per_page' => -1, - 'post_status' => 'publish', - 'meta_query' => array( - array( - 'key' => 'related_revue', - 'value' => $revueID, - 'compare' => '=', - ), - ), - )); - $terms = array(); - - foreach ($revueRelatedArticles->posts as $article) { - $currentArticleTerms = get_the_terms($article->ID, $taxonomy); - - if (empty($currentArticleTerms) || !is_array($currentArticleTerms)) continue; - - foreach ($currentArticleTerms as $term) { - $terms[] = $term->term_id; - } - } - - foreach (array_unique($terms) as $term) { - $termObject = get_term($term, $taxonomy); - $uniquesTermsArray[] = $termObject; - } - - return $uniquesTermsArray; -} - - -function count_user_articles($userID, $postType) -{ - $args = array( - 'post_type' => $postType, - 'meta_query' => array( - array( - 'key' => 'authors', - 'value' => '"' . $userID . '"', - 'compare' => 'LIKE', - ), - ), - ); - $query = new WP_Query($args); - return $query->found_posts; -} - - -function build_sommaire_from_content($postID) -{ - $blocks = parse_blocks(get_the_content($postID)); - $titleBlocks = array_filter( - $blocks, - function ($block) { - // Vérifier si c'est un bloc heading - if ($block['blockName'] !== 'core/heading') { - return false; - } - - // Extraire le niveau depuis le HTML si les attributs sont vides - if (empty($block['attrs']['level'])) { - // Chercher seulement h2 dans le HTML - if (preg_match('/]*>/i', $block['innerHTML'], $matches)) { - return true; - } - return false; - } - - // Utiliser le niveau des attributs s'il existe - return $block['attrs']['level'] === 2; - } - ); - - $outputIndex = []; - - foreach ($titleBlocks as $block) { - $title = strip_tags($block['innerHTML']); - - // Extraire le niveau depuis le HTML ou les attributs - $level = $block['attrs']['level'] ?? null; - if (!$level && preg_match('/]*>/i', $block['innerHTML'], $matches)) { - $level = 2; - } - - if ($level !== 2) continue; - - $anchor = $block['attrs']['idName'] ?? sanitize_title($title); - - // Ajouter un préfixe si l'ancre commence par un chiffre - if (!empty($anchor) && preg_match('/^[0-9]/', $anchor)) { - $anchor = 'anchor-' . $anchor; - } - - - $outputIndex[] = [ - 'title' => $title, - 'anchor' => $anchor, - 'level' => $level, - ]; - } - - return $outputIndex; -} - - -function build_footnotes_index_from_content($content) -{ - if (empty($content)) { - return []; - } - - $footnotes = []; - $dom = new DOMDocument(); - // On supprime les erreurs de parsing pour le HTML5 - @$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); - - $links = $dom->getElementsByTagName('a'); - foreach ($links as $key => $link) { - if ($link->hasAttribute('class') && strpos($link->getAttribute('class'), 'footnote-reference') !== false) { - $footnote_content = $link->getAttribute('footnote-content'); - if (!empty($footnote_content)) { - $footnotes[] = array( - 'key' => $key + 1, - 'anchorID' => $key + 1, - 'content' => $footnote_content - ); - } - } - } - - return $footnotes; -} - -add_filter('the_content', 'apply_footnotes_urls_to_content', 10); - -function apply_footnotes_urls_to_content($content) -{ - $post_type = get_post_type(); - - if ($post_type !== 'articles' && !is_admin()) return $content; - - - $footnotes = build_footnotes_index_from_content($content); - $dom = new DOMDocument(); - @$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); - - $links = $dom->getElementsByTagName('a'); - - foreach ($links as $key => $link) { - - if ($link->hasAttribute('class') && strpos($link->getAttribute('class'), 'footnote-reference') !== false) { - $link->setAttribute('id', 'footnote-' . ($key + 1)); - } - } - - return $dom->saveHTML(); -} - -// Endpoint AJAX pour sanitize_title -add_action('wp_ajax_sanitize_title_ajax', 'sanitize_title_ajax_handler'); -add_action('wp_ajax_nopriv_sanitize_title_ajax', 'sanitize_title_ajax_handler'); - -function sanitize_title_ajax_handler() -{ - // Vérifier le nonce pour la sécurité - if (!wp_verify_nonce($_POST['nonce'], 'sanitize_title_nonce')) { - wp_die('Erreur de sécurité'); - } - - $title = sanitize_text_field($_POST['title']); - $sanitized_title = sanitize_title($title); - - wp_send_json_success(array('sanitized_title' => $sanitized_title)); -} - -// Ajouter le script et les variables localisées -add_action('wp_enqueue_scripts', 'add_sanitize_title_script'); - -function add_sanitize_title_script() -{ - wp_localize_script('jquery', 'sanitize_title_ajax', array( - 'ajax_url' => admin_url('admin-ajax.php'), - 'nonce' => wp_create_nonce('sanitize_title_nonce') - )); -} + 'articles', + 'posts_per_page' => -1, + 'post_status' => 'publish', + 'meta_query' => array( + array( + 'key' => 'related_revue', + 'value' => $revueID, + 'compare' => '=', + ), + ), + )); + $authors = array(); + + foreach ($revueRelatedArticles->posts as $article) { + $currentArticleAuthors = get_field('authors', $article->ID); + + if (empty($currentArticleAuthors) || !is_array($currentArticleAuthors)) continue; + + foreach ($currentArticleAuthors as $authorID) { + $authors[] = $authorID; + } + } + return array_unique($authors); +} + +function get_revue_terms($revueID, $taxonomy) +{ + $revueRelatedArticles = new WP_Query(array( + 'post_type' => 'articles', + 'posts_per_page' => -1, + 'post_status' => 'publish', + 'meta_query' => array( + array( + 'key' => 'related_revue', + 'value' => $revueID, + 'compare' => '=', + ), + ), + )); + $terms = array(); + + foreach ($revueRelatedArticles->posts as $article) { + $currentArticleTerms = get_the_terms($article->ID, $taxonomy); + + if (empty($currentArticleTerms) || !is_array($currentArticleTerms)) continue; + + foreach ($currentArticleTerms as $term) { + $terms[] = $term->term_id; + } + } + + foreach (array_unique($terms) as $term) { + $termObject = get_term($term, $taxonomy); + $uniquesTermsArray[] = $termObject; + } + + return $uniquesTermsArray; +} + + +function count_user_articles($userID, $postType) +{ + $args = array( + 'post_type' => $postType, + 'meta_query' => array( + array( + 'key' => 'authors', + 'value' => '"' . $userID . '"', + 'compare' => 'LIKE', + ), + ), + ); + $query = new WP_Query($args); + return $query->found_posts; +} + + +function build_sommaire_from_content($postID) +{ + $blocks = parse_blocks(get_the_content($postID)); + $titleBlocks = array_filter( + $blocks, + function ($block) { + // Vérifier si c'est un bloc heading + if ($block['blockName'] !== 'core/heading') { + return false; + } + + // Extraire le niveau depuis le HTML si les attributs sont vides + if (empty($block['attrs']['level'])) { + // Chercher seulement h2 dans le HTML + if (preg_match('/]*>/i', $block['innerHTML'], $matches)) { + return true; + } + return false; + } + + // Utiliser le niveau des attributs s'il existe + return $block['attrs']['level'] === 2; + } + ); + + $outputIndex = []; + + foreach ($titleBlocks as $block) { + $title = strip_tags($block['innerHTML']); + + // Extraire le niveau depuis le HTML ou les attributs + $level = $block['attrs']['level'] ?? null; + if (!$level && preg_match('/]*>/i', $block['innerHTML'], $matches)) { + $level = 2; + } + + if ($level !== 2) continue; + + $anchor = $block['attrs']['idName'] ?? sanitize_title($title); + + // Ajouter un préfixe si l'ancre commence par un chiffre + if (!empty($anchor) && preg_match('/^[0-9]/', $anchor)) { + $anchor = 'anchor-' . $anchor; + } + + + $outputIndex[] = [ + 'title' => $title, + 'anchor' => $anchor, + 'level' => $level, + ]; + } + + return $outputIndex; +} + + +function build_footnotes_index_from_content($content) +{ + if (empty($content)) { + return []; + } + + $footnotes = []; + $dom = new DOMDocument(); + // On supprime les erreurs de parsing pour le HTML5 + @$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); + + $links = $dom->getElementsByTagName('a'); + foreach ($links as $key => $link) { + if ($link->hasAttribute('class') && strpos($link->getAttribute('class'), 'footnote-reference') !== false) { + $footnote_content = $link->getAttribute('footnote-content'); + if (!empty($footnote_content)) { + $footnotes[] = array( + 'key' => $key + 1, + 'anchorID' => $key + 1, + 'content' => $footnote_content + ); + } + } + } + + return $footnotes; +} + +add_filter('the_content', 'apply_footnotes_urls_to_content', 10); + +function apply_footnotes_urls_to_content($content) +{ + $post_type = get_post_type(); + + if ($post_type !== 'articles' && !is_admin()) return $content; + + + $footnotes = build_footnotes_index_from_content($content); + $dom = new DOMDocument(); + @$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); + + $links = $dom->getElementsByTagName('a'); + + foreach ($links as $key => $link) { + + if ($link->hasAttribute('class') && strpos($link->getAttribute('class'), 'footnote-reference') !== false) { + $link->setAttribute('id', 'footnote-' . ($key + 1)); + } + } + + return $dom->saveHTML(); +}