Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add FacetWP services #372

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions inc/Framework.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use BEA\Theme\Framework\Services\Acf;
use BEA\Theme\Framework\Services\Assets;
use BEA\Theme\Framework\Services\Facet_WP;
use BEA\Theme\Framework\Services\Performance;
use BEA\Theme\Framework\Services\Assets_JS_Async;
use BEA\Theme\Framework\Services\Editor;
Expand Down Expand Up @@ -40,6 +41,7 @@ class Framework {
Svg::class,
Acf::class,
Menu::class,
Facet_WP::class,

// Services as Tools
Body_Class::class,
Expand Down
165 changes: 165 additions & 0 deletions inc/Services/Facet_WP.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
<?php

namespace BEA\Theme\Framework\Services;

use BEA\Theme\Framework\Service;
use BEA\Theme\Framework\Service_Container;

class Facet_WP implements Service {
public function register( Service_Container $container ): void {

Check warning on line 9 in inc/Services/Facet_WP.php

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

inc/Services/Facet_WP.php#L9

Avoid unused parameters such as '$container'.
}

public function boot( Service_Container $container ): void {

Check warning on line 12 in inc/Services/Facet_WP.php

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

inc/Services/Facet_WP.php#L12

Avoid unused parameters such as '$container'.
add_filter( 'facetwp_load_assets', '__return_true' );
MarieComet marked this conversation as resolved.
Show resolved Hide resolved
add_filter( 'facetwp_load_a11y', '__return_true' );
add_filter( 'facetwp_facets', [ $this, 'register_facets' ], 40 );
add_filter( 'facetwp_pager_html', [ $this, 'accessible_facetwp_pager_html' ], 10, 2 );
add_filter( 'facetwp_facet_html', [ $this, 'accessible_facetwp_labels' ], 10, 2 );
}

/**
* Get service name
*
* @return string
*/
public function get_service_name(): string {
return 'facetwp';
}

/**
* Register facets from config file.
*
* @param array $facets
*
* @return array
* @author Egidio CORICA
*/
public function register_facets( array $facets ): array {

$filename = get_theme_file_path( 'assets/facetwp/config.json' );
if ( ! is_readable( $filename ) ) {
return $facets;
}

$facet_content = file_get_contents( $filename ); // phpcs:ignore
if ( empty( $facet_content ) ) {
return $facets;
}

$facet_content = \json_decode( $facet_content, true );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Attention, on a deux appels à json_decode. Il faut retirer celui-ci.

if (
JSON_ERROR_NONE !== \json_last_error()
|| ! is_array( $facet_content )
|| empty( $facet_content['facets'] )
) {
return $facets;
}
MarieComet marked this conversation as resolved.
Show resolved Hide resolved

return wp_parse_args( $facet_content['facets'], $facets );
}

/**
* Add custom and accessible FacetWP pagination.
*
* @param $output
* @param $params
*
* @return string
*
* @author Egidio CORICA
*
*/
firestar300 marked this conversation as resolved.
Show resolved Hide resolved
public function accessible_facetwp_pager_html( $output, $params ): string {

Check warning on line 72 in inc/Services/Facet_WP.php

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

inc/Services/Facet_WP.php#L72

The method accessible_facetwp_pager_html() has a Cyclomatic Complexity of 13. The configured cyclomatic complexity threshold is 10.

Check warning on line 72 in inc/Services/Facet_WP.php

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

inc/Services/Facet_WP.php#L72

The method accessible_facetwp_pager_html() has an NPath complexity of 865. The configured NPath complexity threshold is 200.
$defaults = [
'page' => 1,
'per_page' => 10,
'total_rows' => 1,
];
$params = array_merge( $defaults, $params );
$output = '';
$page = (int) $params['page'];
$total_pages = (int) $params['total_pages'];

// Only show pagination when > 1 page
if ( 1 < $total_pages ) {

$text_page = esc_html__( 'Page', 'fwp-front' );
$text_of = esc_html__( 'of', 'fwp-front' );
$step = 10;

$output .= '<span class="facetwp-pager-label sr-only">' . "$text_page $page $text_of $total_pages</span>";

if ( $page > 1 ) {
$output .= '<a href="#" class="facetwp-page previouspostslink" data-page="' . ( $page - 1 ) . '">Précédent</a>';
} else {

Check notice on line 94 in inc/Services/Facet_WP.php

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

inc/Services/Facet_WP.php#L94

The method accessible_facetwp_pager_html uses an else expression. Else clauses are basically not necessary and you can simplify the code by not using them.
$output .= '<span class="facetwp-page previouspostslink" aria-hidden="true" tabindex="-1" style="visibility: hidden"></span>';
}

if ( 3 < $page ) {
$output .= '<a href="#" class="facetwp-page first-page" data-page="1">
<span class="sr-only">Première page</span>
<span aria-hidden="true">1</span>
</a>';
}
if ( 1 < ( $page - $step ) ) {
$output .= '<span class="facetwp-page-more" aria-hidden="true">...</span>';
}

for ( $i = 2; $i > 0; $i -- ) {
if ( 0 < ( $page - $i ) ) {
$output .= '<a href="#" class="facetwp-page" data-page="' . ( $page - $i ) . '"><span class="sr-only">Page</span> ' . ( $page - $i ) . '</a>';
}
}

// Current page
$output .= '<a href="#" class="facetwp-page active" aria-current="true" data-page="' . $page . '"><span class="sr-only">Page courante</span> ' . $page . '</a>';

for ( $i = 1; $i <= 2; $i ++ ) {
if ( $total_pages >= ( $page + $i ) ) {
$output .= '<a href="#" class="facetwp-page" data-page="' . ( $page + $i ) . '"><span class="sr-only">Page</span> ' . ( $page + $i ) . '</a>';
}
}

if ( $total_pages > ( $page + $step ) ) {
$output .= '<span class="facetwp-page-more" aria-hidden="true">...</span>';
}

if ( $total_pages > ( $page + 2 ) ) {
$output .= '<a href="#" class="facetwp-page last-page" data-page="' . $total_pages . '">
<span class="sr-only">Dernière page</span>
<span aria-hidden="true">' . $total_pages . '</span>
</a>';
}

if ( $page < $total_pages && $total_pages > 1 ) {
$output .= '<a href="#" class="facetwp-page nextpostslink" data-page="' . ( $page + 1 ) . '">Suivant</a>';
} else {
$output .= '<span class="facetwp-page nextpostslink" aria-hidden="true" style="visibility: hidden;" tabindex="-1"></span>';
}
}

return $output;
}

/**
* Fix Labels for supported facets.
* Put in show_label_not_empty the facets that only need to be visible in they have results.
*
* @param string $html
* @param array $args
*
* @return string
*/
public function accessible_facetwp_labels( string $html, array $args ): string {
$show_label_not_empty = [
'checkboxes',
'radio',
];

if ( ( true === in_array( $args['facet']['type'], $show_label_not_empty, true ) && ! empty( $args['values'] ) ) || false === in_array( $args['facet']['type'], $show_label_not_empty, true ) ) {
$html = sprintf( '<label class="facetwp-label" for="%s">%s</label>%s', esc_attr( $args['facet']['name'] ), esc_html( $args['facet']['label'] ), $html );
}

return $html;
}
}
Loading