REFACTOR Removing useless code
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Nonimart 2025-08-27 10:57:28 +02:00
parent 6f4a9ad9f8
commit 7f57f70593

View File

@ -1,219 +1,191 @@
<?php <?php
function getRevueAuthors($revueID) function getRevueAuthors($revueID)
{ {
$revueRelatedArticles = new WP_Query(array( $revueRelatedArticles = new WP_Query(array(
'post_type' => 'articles', 'post_type' => 'articles',
'posts_per_page' => -1, 'posts_per_page' => -1,
'post_status' => 'publish', 'post_status' => 'publish',
'meta_query' => array( 'meta_query' => array(
array( array(
'key' => 'related_revue', 'key' => 'related_revue',
'value' => $revueID, 'value' => $revueID,
'compare' => '=', 'compare' => '=',
), ),
), ),
)); ));
$authors = array(); $authors = array();
foreach ($revueRelatedArticles->posts as $article) { foreach ($revueRelatedArticles->posts as $article) {
$currentArticleAuthors = get_field('authors', $article->ID); $currentArticleAuthors = get_field('authors', $article->ID);
if (empty($currentArticleAuthors) || !is_array($currentArticleAuthors)) continue; if (empty($currentArticleAuthors) || !is_array($currentArticleAuthors)) continue;
foreach ($currentArticleAuthors as $authorID) { foreach ($currentArticleAuthors as $authorID) {
$authors[] = $authorID; $authors[] = $authorID;
} }
} }
return array_unique($authors); return array_unique($authors);
} }
function get_revue_terms($revueID, $taxonomy) function get_revue_terms($revueID, $taxonomy)
{ {
$revueRelatedArticles = new WP_Query(array( $revueRelatedArticles = new WP_Query(array(
'post_type' => 'articles', 'post_type' => 'articles',
'posts_per_page' => -1, 'posts_per_page' => -1,
'post_status' => 'publish', 'post_status' => 'publish',
'meta_query' => array( 'meta_query' => array(
array( array(
'key' => 'related_revue', 'key' => 'related_revue',
'value' => $revueID, 'value' => $revueID,
'compare' => '=', 'compare' => '=',
), ),
), ),
)); ));
$terms = array(); $terms = array();
foreach ($revueRelatedArticles->posts as $article) { foreach ($revueRelatedArticles->posts as $article) {
$currentArticleTerms = get_the_terms($article->ID, $taxonomy); $currentArticleTerms = get_the_terms($article->ID, $taxonomy);
if (empty($currentArticleTerms) || !is_array($currentArticleTerms)) continue; if (empty($currentArticleTerms) || !is_array($currentArticleTerms)) continue;
foreach ($currentArticleTerms as $term) { foreach ($currentArticleTerms as $term) {
$terms[] = $term->term_id; $terms[] = $term->term_id;
} }
} }
foreach (array_unique($terms) as $term) { foreach (array_unique($terms) as $term) {
$termObject = get_term($term, $taxonomy); $termObject = get_term($term, $taxonomy);
$uniquesTermsArray[] = $termObject; $uniquesTermsArray[] = $termObject;
} }
return $uniquesTermsArray; return $uniquesTermsArray;
} }
function count_user_articles($userID, $postType) function count_user_articles($userID, $postType)
{ {
$args = array( $args = array(
'post_type' => $postType, 'post_type' => $postType,
'meta_query' => array( 'meta_query' => array(
array( array(
'key' => 'authors', 'key' => 'authors',
'value' => '"' . $userID . '"', 'value' => '"' . $userID . '"',
'compare' => 'LIKE', 'compare' => 'LIKE',
), ),
), ),
); );
$query = new WP_Query($args); $query = new WP_Query($args);
return $query->found_posts; return $query->found_posts;
} }
function build_sommaire_from_content($postID) function build_sommaire_from_content($postID)
{ {
$blocks = parse_blocks(get_the_content($postID)); $blocks = parse_blocks(get_the_content($postID));
$titleBlocks = array_filter( $titleBlocks = array_filter(
$blocks, $blocks,
function ($block) { function ($block) {
// Vérifier si c'est un bloc heading // Vérifier si c'est un bloc heading
if ($block['blockName'] !== 'core/heading') { if ($block['blockName'] !== 'core/heading') {
return false; return false;
} }
// Extraire le niveau depuis le HTML si les attributs sont vides // Extraire le niveau depuis le HTML si les attributs sont vides
if (empty($block['attrs']['level'])) { if (empty($block['attrs']['level'])) {
// Chercher seulement h2 dans le HTML // Chercher seulement h2 dans le HTML
if (preg_match('/<h2[^>]*>/i', $block['innerHTML'], $matches)) { if (preg_match('/<h2[^>]*>/i', $block['innerHTML'], $matches)) {
return true; return true;
} }
return false; return false;
} }
// Utiliser le niveau des attributs s'il existe // Utiliser le niveau des attributs s'il existe
return $block['attrs']['level'] === 2; return $block['attrs']['level'] === 2;
} }
); );
$outputIndex = []; $outputIndex = [];
foreach ($titleBlocks as $block) { foreach ($titleBlocks as $block) {
$title = strip_tags($block['innerHTML']); $title = strip_tags($block['innerHTML']);
// Extraire le niveau depuis le HTML ou les attributs // Extraire le niveau depuis le HTML ou les attributs
$level = $block['attrs']['level'] ?? null; $level = $block['attrs']['level'] ?? null;
if (!$level && preg_match('/<h2[^>]*>/i', $block['innerHTML'], $matches)) { if (!$level && preg_match('/<h2[^>]*>/i', $block['innerHTML'], $matches)) {
$level = 2; $level = 2;
} }
if ($level !== 2) continue; if ($level !== 2) continue;
$anchor = $block['attrs']['idName'] ?? sanitize_title($title); $anchor = $block['attrs']['idName'] ?? sanitize_title($title);
// Ajouter un préfixe si l'ancre commence par un chiffre // Ajouter un préfixe si l'ancre commence par un chiffre
if (!empty($anchor) && preg_match('/^[0-9]/', $anchor)) { if (!empty($anchor) && preg_match('/^[0-9]/', $anchor)) {
$anchor = 'anchor-' . $anchor; $anchor = 'anchor-' . $anchor;
} }
$outputIndex[] = [ $outputIndex[] = [
'title' => $title, 'title' => $title,
'anchor' => $anchor, 'anchor' => $anchor,
'level' => $level, 'level' => $level,
]; ];
} }
return $outputIndex; return $outputIndex;
} }
function build_footnotes_index_from_content($content) function build_footnotes_index_from_content($content)
{ {
if (empty($content)) { if (empty($content)) {
return []; return [];
} }
$footnotes = []; $footnotes = [];
$dom = new DOMDocument(); $dom = new DOMDocument();
// On supprime les erreurs de parsing pour le HTML5 // 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); @$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$links = $dom->getElementsByTagName('a'); $links = $dom->getElementsByTagName('a');
foreach ($links as $key => $link) { foreach ($links as $key => $link) {
if ($link->hasAttribute('class') && strpos($link->getAttribute('class'), 'footnote-reference') !== false) { if ($link->hasAttribute('class') && strpos($link->getAttribute('class'), 'footnote-reference') !== false) {
$footnote_content = $link->getAttribute('footnote-content'); $footnote_content = $link->getAttribute('footnote-content');
if (!empty($footnote_content)) { if (!empty($footnote_content)) {
$footnotes[] = array( $footnotes[] = array(
'key' => $key + 1, 'key' => $key + 1,
'anchorID' => $key + 1, 'anchorID' => $key + 1,
'content' => $footnote_content 'content' => $footnote_content
); );
} }
} }
} }
return $footnotes; return $footnotes;
} }
add_filter('the_content', 'apply_footnotes_urls_to_content', 10); add_filter('the_content', 'apply_footnotes_urls_to_content', 10);
function apply_footnotes_urls_to_content($content) function apply_footnotes_urls_to_content($content)
{ {
$post_type = get_post_type(); $post_type = get_post_type();
if ($post_type !== 'articles' && !is_admin()) return $content; if ($post_type !== 'articles' && !is_admin()) return $content;
$footnotes = build_footnotes_index_from_content($content); $footnotes = build_footnotes_index_from_content($content);
$dom = new DOMDocument(); $dom = new DOMDocument();
@$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); @$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$links = $dom->getElementsByTagName('a'); $links = $dom->getElementsByTagName('a');
foreach ($links as $key => $link) { foreach ($links as $key => $link) {
if ($link->hasAttribute('class') && strpos($link->getAttribute('class'), 'footnote-reference') !== false) { if ($link->hasAttribute('class') && strpos($link->getAttribute('class'), 'footnote-reference') !== false) {
$link->setAttribute('id', 'footnote-' . ($key + 1)); $link->setAttribute('id', 'footnote-' . ($key + 1));
} }
} }
return $dom->saveHTML(); 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')
));
}