is_dashboard_screen() ) { return; } wp_enqueue_style( 'agec-ready-tokens', AGEC_READY_URL . 'assets/css/agec-design-tokens.css', array(), AGEC_READY_VERSION ); wp_enqueue_style( 'agec-ready-dashboard', AGEC_READY_URL . 'assets/css/admin-dashboard.css', array( 'agec-ready-tokens' ), AGEC_READY_VERSION ); } public function render(): void { if ( ! current_user_can( self::CAP ) ) { wp_die( esc_html__( 'Action non autorisée.', 'agec-ready' ) ); } $settings = (array) get_option( Meta::OPTION_SETTINGS, array() ); $display_product = ! empty( $settings['display_product'] ); echo '
' . esc_html__( 'Suivez votre conformité AGEC et gardez une longueur d’avance grâce à la veille réglementaire.', 'agec-ready' ) . '
'; echo '' . esc_html__( 'Auto-diagnostic de l’affichage AGEC — il vous aide à la mise en conformité mais n’a pas valeur de garantie juridique. La responsabilité des déclarations reste celle du commerçant.', 'agec-ready' ) . '
'; echo '' . esc_html__( 'Le revenu récurrent (MRR, rétention, renouvellement) se suit dans votre tableau de bord Freemius.', 'agec-ready' ) . '
'; echo '' . esc_html( sprintf( /* translators: %d: nombre de produits avec une allégation à risque. */ _n( '%d produit emploie une allégation environnementale à risque.', '%d produits emploient une allégation environnementale à risque.', $at_risk, 'agec-ready' ), $at_risk ) ) . '
'; if ( ! empty( $examples ) ) { echo '' . esc_html__( 'Les mentions vagues (« biodégradable », « respectueux de l’environnement », « écologique »…) sont encadrées (code de l’environnement R.541-230 ; directive EmpCo 2024/825). Le plus sûr : afficher vos caractéristiques réelles et sourcées (matière recyclée, recyclabilité, substances…) avec l’article 13.', 'agec-ready' ) . '
'; echo '' . esc_html__( 'Sécuriser mes allégations (Pro)', 'agec-ready' ) . '
'; echo '' . esc_html( $value ) . '
'; if ( $enabled ) { echo '' . esc_html__( 'Triman et consignes de tri s’affichent automatiquement.', 'agec-ready' ) . '
'; } else { echo '' . esc_html__( 'Vos clients ne voient pas encore les consignes de tri.', 'agec-ready' ) . '
'; } echo '' . esc_html__( 'Régler l’affichage', 'agec-ready' ) . ''; echo '' . esc_html__( 'Aucun produit publié', 'agec-ready' ) . '
'; echo '' . esc_html__( 'Ajoutez vos produits, puis renseignez le tri (onglet « AGEC ») ou un défaut par catégorie.', 'agec-ready' ) . '
'; echo '' . esc_html__( 'Couverture non calculée pour le moment', 'agec-ready' ) . '
'; echo '' . esc_html__( 'L’analyse du catalogue n’a pas pu aboutir. Rechargez la page dans un instant ; si le problème persiste, consultez WooCommerce → État → Journaux.', 'agec-ready' ) . '
'; echo '' . esc_html( sprintf( /* translators: %s: nombre de produits sans consignes de tri. */ _n( '%s produit sans consignes de tri', '%s produits sans consignes de tri', $without, 'agec-ready' ), number_format_i18n( $without ) ) ) . '
'; echo '' . esc_html__( 'Renseignez le tri (onglet « AGEC ») ou un défaut par catégorie pour une couverture complète de l’affichage.', 'agec-ready' ) . '
'; if ( ! empty( $cov['capped'] ) ) { echo '' . esc_html( sprintf( /* translators: %s: nombre de produits analysés. */ __( 'Analyse de vos %s produits les plus récents.', 'agec-ready' ), number_format_i18n( $scanned ) ) ) . '
'; } echo '' . esc_html__( 'Compléter le tri', 'agec-ready' ) . ''; echo ''; return; } if ( 'partial' === $state ) { // Les produits scannés sont couverts, mais le catalogue dépasse le plafond d'analyse : // on le dit franchement au lieu d'affirmer « toutes vos fiches ». echo '' . esc_html( sprintf( /* translators: %s: nombre de produits analysés. */ __( 'Vos %s produits les plus récents sont couverts', 'agec-ready' ), number_format_i18n( $scanned ) ) ) . '
'; echo '' . esc_html__( 'Catalogue volumineux : l’analyse porte sur les produits les plus récents. Vérifiez le tri sur le reste de votre catalogue (onglet « AGEC » ou défaut par catégorie).', 'agec-ready' ) . '
'; echo '' . esc_html__( 'Ouvrir mes produits', 'agec-ready' ) . ''; echo ''; return; } echo '' . esc_html__( 'Toutes vos fiches affichent les consignes', 'agec-ready' ) . '
'; echo '' . esc_html__( 'Vos produits publiés sont couverts (réglage propre ou défaut de catégorie).', 'agec-ready' ) . '
'; echo '' . esc_html__( 'Ouvrir mes produits', 'agec-ready' ) . ''; echo ''; } /** * Carte « Mentions environnementales (art. 13) » : statut premium ou upsell contextuel non culpabilisant. */ private function card_premium(): void { if ( agec_ready_can_use_premium() ) { echo '' . esc_html__( 'Premium actif', 'agec-ready' ) . '
'; echo '' . esc_html__( 'L’affichage des caractéristiques environnementales et la page dématérialisée sont disponibles.', 'agec-ready' ) . '
'; $account = self::account_url(); if ( '' !== $account ) { // Expansion / NRR : ajout de sites, gestion de licence (prorata géré par Freemius). echo '' . esc_html__( 'Gérer ma licence et mes sites', 'agec-ready' ) . ''; } echo '' . esc_html__( 'Vos catégories suggèrent des filières soumises à l’article 13 :', 'agec-ready' ) . '
'; echo '' . esc_html__( 'Affichez les caractéristiques environnementales obligatoires (matière recyclée, recyclabilité…) sur vos fiches et une page dédiée.', 'agec-ready' ) . '
'; } echo '' . esc_html__( 'Premium', 'agec-ready' ) . ''; echo '' . esc_html__( 'Voir les offres Premium', 'agec-ready' ) . ''; echo '' . esc_html__( 'Nous surveillons l’évolution de la réglementation AGEC (Légifrance, ADEME, éco-organismes agréés).', 'agec-ready' ) . '
'; /** * Point d'extension : le **journal daté complet** (Premium) est injecté ici par le module de * veille premium (absent du zip .org). En gratuit, aucun premium n'est branché * → teaser ci-dessous. * * @param string $html HTML du journal (vide par défaut). */ $journal = (string) apply_filters( 'agec_ready_dashboard_veille', '' ); if ( '' !== $journal ) { echo wp_kses_post( $journal ); } else { $this->render_veille_teaser(); } echo ''; echo '' . esc_html__( 'Relancer l’assistant', 'agec-ready' ) . ' '; echo '' . esc_html__( 'Mes produits', 'agec-ready' ) . ''; echo '
'; } /** * Noms des catégories de produits (borné), pour la détection de filières premium. * * @return array