$nsm Enregistrement NSM (qualified/filieres). * @param array $coverage Résultat CatalogScan::coverage(). * @param int $reg_seen Version réglementaire vue par la boutique. * @param int $reg_current Version réglementaire courante du plugin. * @return array{display_enabled:bool, qualified:bool, filieres:array, coverage_pct:int, products_total:int, products_without:int, capped:bool, reg_up_to_date:bool, reg_current:int} */ public static function summarize( bool $display_enabled, array $nsm, array $coverage, int $reg_seen, int $reg_current ): array { $total = isset( $coverage['total'] ) ? (int) $coverage['total'] : 0; $without = isset( $coverage['without'] ) ? (int) $coverage['without'] : 0; $scanned = isset( $coverage['scanned'] ) ? (int) $coverage['scanned'] : 0; $covered = max( 0, $scanned - $without ); $coverage_pct = $scanned > 0 ? (int) round( 100 * $covered / $scanned ) : 0; $at_risk = isset( $coverage['at_risk'] ) ? (int) $coverage['at_risk'] : 0; $examples = isset( $coverage['risk_examples'] ) && is_array( $coverage['risk_examples'] ) ? $coverage['risk_examples'] : array(); return array( 'display_enabled' => $display_enabled, 'qualified' => ! empty( $nsm['qualified'] ), 'filieres' => isset( $nsm['filieres'] ) && is_array( $nsm['filieres'] ) ? $nsm['filieres'] : array(), 'coverage_pct' => $coverage_pct, 'products_total' => $total, 'products_without' => $without, 'capped' => ! empty( $coverage['capped'] ), 'reg_up_to_date' => $reg_seen >= $reg_current, 'reg_current' => $reg_current, 'at_risk' => $at_risk, 'risk_examples' => $examples, ); } /** * Instantané vivant (agrège réglages, NSM, scan catalogue et version de veille). * * @return array */ public static function snapshot(): array { $settings = (array) get_option( Meta::OPTION_SETTINGS, array() ); $nsm = (array) get_option( Meta::OPTION_NSM, array() ); $seen = (int) get_option( Meta::OPTION_REGULATORY_VERSION, 0 ); // Version du dataset de veille = fournie par Pro via filtre (dataset strippé du zip .org) ; 0 en free. $current = (int) apply_filters( 'agec_ready_regulatory_data_version', 0 ); return self::summarize( ! empty( $settings['display_product'] ), $nsm, CatalogScan::coverage(), $seen, $current ); } }