File "applied-global-classes-usage.php"
Full Path: /home/diablzlo/glucosebalnce.com/wp-content/plugins/elementor/modules/global-classes/usage/applied-global-classes-usage.php
File size: 2.91 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Elementor\Modules\GlobalClasses\Usage;
use Elementor\Modules\GlobalClasses\Global_Classes_Repository;
use Elementor\Plugin;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Collects and exposes usage data for all global CSS classes across Elementor documents.
*/
class Applied_Global_Classes_Usage {
/**
* Document types that should be excluded from usage reporting.
*
* @var string[]
*/
private array $excluded_types = [ 'e-flexbox', 'template' ];
/**
* Tracks usage for each global class.
*
* @var array<string, Css_Class_Usage>
*/
private array $class_usages = [];
/**
* Returns the total usage count per class ID (excluding template-only classes).
*
* @return array<string, int>
*/
public function get(): array {
$this->build_class_usages();
$result = [];
foreach ( $this->class_usages as $class_id => $usage ) {
if ( $usage->get_total_usage() > 0 ) {
$result[ $class_id ] = $usage->get_total_usage();
}
}
return $result;
}
/**
* Returns detailed usage information per class ID.
* Each class ID maps to a list of document usages (excluding excluded types).
*
* @return array<string, array{
* pageId: int,
* title: string,
* type: string,
* total: int,
* elements: string[]
* }>
*/
public function get_detailed_usage(): array {
$this->build_class_usages();
$result = [];
foreach ( $this->class_usages as $class_id => $usage ) {
$pages = $usage->get_pages();
$filtered_pages = array_filter(
$pages,
fn( $page_data ) => ! in_array( $page_data['type'], $this->excluded_types, true )
);
if ( empty( $filtered_pages ) ) {
continue;
}
foreach ( $filtered_pages as $page_id => $page_data ) {
$result[ $class_id ][] = [
'pageId' => $page_id,
'title' => $page_data['title'],
'type' => $page_data['type'],
'total' => $page_data['total'],
'elements' => $page_data['elements'],
];
}
}
return $result;
}
/**
* Builds the internal usage map from all Elementor documents.
*
* This method initializes and aggregates class usage from all relevant documents,
* merging duplicate class IDs found in multiple pages.
*/
private function build_class_usages(): void {
$this->class_usages = [];
$class_ids = Global_Classes_Repository::make()
->all()
->get_items()
->keys()
->all();
Plugin::$instance->db->iterate_elementor_documents(
function ( $document ) use ( $class_ids ) {
$usage = new Document_Usage( $document );
$usage->analyze();
foreach ( $usage->get_usages() as $class_id => $class_usage ) {
if ( ! in_array( $class_id, $class_ids, true ) ) {
continue;
}
if ( ! isset( $this->class_usages[ $class_id ] ) ) {
$this->class_usages[ $class_id ] = $class_usage;
} else {
$this->class_usages[ $class_id ]->merge( $class_usage );
}
}
}
);
}
}