ConditionGenerator
Вспомогательный класс для добавления условий к различным обработчикам событий. Позволяет уточнить момент когда будет вызван код, например, при определенном значении переменной в курсе, только на определенном устройстве, только на активной странице курса и т.п.
ConditionInterface.php
Сейчас существует несколько групп-условий, каждая группа реализована с помощью класса имплементирующего интерфейс ConditionInterface.
interface ConditionInterface {
public function add_controls( Controls_Stack $widget, array $config ): void;
public function generate( array $condition_data ): string;
}
Метод add_controls предназначен для добавления всех требуемых полей управления в секцию. В данный метод также могут передаваться дополнительные настройки, если они требуются для каких-то полей управления
Метод generate генерирует строку с условием. Условие - это валидный js код, который можно вызвать и получить boolean значение: true - условие выполнено, false - нет
CommonCondition.php
Данный класс отвечает за проверки переменных в оболочке курса определенным значениям или другим переменным. Например можно проверить, что курс завершен (isCourseCompleted = true) с помощью таких настроек:

PageActiveCondition.php
Условие из этого класса проверяет, выполняется ли оно на текущей странице курса. Id текущей странице в курсе получается из переменной Elementor'a elementorFrontend.config.post.id То есть условие выполнится только если window.parent.courseController.data.getAll().activePageId==elementorFrontend.config.post.id - именно этот код можно увидеть в методе generate класса PageActiveCondition.php
SpecificDeviceCondition.php
Работает на основе checkBrowser. Проверяет, соответствует ли устройство пользователя указанным требованиям:
- Тип устройства - тип устройства desktop, tablet или mobile
- Операционная система - windows, mac, android или ios
- Браузер - chrome, safari или firefox

ConditionManager
Данный класс позволяет удобно добавлять наборы условий в виджеты
class ConditionManager extends Singleton {
/**
* @param non-empty-array<class-string<ConditionInterface>, array> $controls
*/
public function add_controls( Controls_Stack $widget, array $controls ): void {/*...*/}
public function generate( array $condition_data ): string {/*...*/}
}
add_controls( Controls_Stack $widget, array $controls ): void- добавляет в заданное место в виджете ($widget) все поля управления заданные в ($controls). Массив$controlsхранит в ключах класс имплементирующийConditionInterface, а значение это массив-конфигурация. Пример добавления:
ConditionManager::get_instance()->add_controls(
$repeater,
[
CommonCondition::class => [
'enabled_by_default' => true,
],
PageActiveCondition::class => [],
SpecificDeviceCondition::class => [],
]
);
generate( array $condition_data ): string- вызывает у всех классов-условий, методgenerateи объединяет их через&&