get_extensions(), $manager->statuses()];
}
private function extension_type($extension) {
$type = method_exists($extension, 'get_type') ? strtolower((string) $extension->get_type()) : 'free';
return $type === 'pro' ? 'pro' : 'free';
}
private function extension_category($extension) {
$category = method_exists($extension, 'get_category') ? (string) $extension->get_category() : 'other';
return sanitize_key($category ?: 'other');
}
private function extension_description($extension) {
if (!method_exists($extension, 'get_description')) {
return __('Extension registered with EventQora Core.', 'eventqora');
}
$description = trim(wp_strip_all_tags((string) $extension->get_description()));
return $description ?: __('Extension registered with EventQora Core.', 'eventqora');
}
private function extension_settings_url($extension) {
if (!method_exists($extension, 'get_settings_url')) {
return '';
}
$value = trim((string) $extension->get_settings_url());
if ($value === '') {
return '';
}
if (filter_var($value, FILTER_VALIDATE_URL)) {
return esc_url($value);
}
return esc_url(admin_url('admin.php?page=' . sanitize_key($value)));
}
private function render_card($extension, $status) {
$id = sanitize_key((string) $extension->get_id());
$name = trim((string) $extension->get_name());
$version = trim((string) $extension->get_version());
$type = $this->extension_type($extension);
$category = $this->extension_category($extension);
$description = $this->extension_description($extension);
$settings_url = $this->extension_settings_url($extension);
$status_class = sanitize_html_class($status ?: 'registered');
?>