feat: initial ACRIB WordPress deployment

- WordPress 6.9.4 (es_ES) with Kadence theme
- Homepage: Hero, La Asociación, Pilares, Beneficios, Eventos, Miembros, Hazte Miembro, Contacto
- Brand identity: #13294b navy, #a12932 burgundy, #c69c48 gold
- Fonts: Raleway (headings) + Source Sans 3 (body) + Lato (UI)
- Plugins: Kadence Blocks, Polylang, Contact Form 7
- Custom CSS with full brand styling and responsive layout
- HTTPS enforced via wp-config.php proxy detection
This commit is contained in:
Malin
2026-05-19 19:25:59 +02:00
commit f3ff7b7186
6119 changed files with 1984255 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
<?php declare( strict_types=1 );
namespace KadenceWP\KadenceBlocks\Harbor\Actions;
/**
* Provides the list of Kadence plugins that integrate with Harbor.
*
* @since 3.7.0
*/
final class Get_Known_Plugins {
/**
* Returns a map of all known Kadence plugin slugs to their metadata.
*
* page_url should be a full URL and should point to the plugin's
* license settings page.
*
* @since 3.7.0
*
* @return array<string, array{name: string, page_url: string}>
*/
public function __invoke(): array {
$default_page = admin_url( 'admin.php?page=kadence-blocks' );
return [
'kadence-blocks' => [
'name' => 'Kadence Blocks',
'page_url' => $default_page,
],
'kadence-blocks-pro' => [
'name' => 'Kadence Blocks Pro',
'page_url' => $default_page,
],
'kadence-creative-kit' => [
'name' => 'Kadence Creative Kit',
'page_url' => admin_url( 'admin.php?page=kadence-blocks-home&license=show' ),
],
'kadence-insights' => [
'name' => 'Kadence Insights',
'page_url' => admin_url( 'admin.php?page=kadence-insights-settings&license=show' ),
],
'kadence-shop-kit' => [
'name' => 'Kadence Shop Kit',
'page_url' => admin_url( 'admin.php?page=kadence-shop-kit-settings&license=show' ),
],
'kadence-galleries' => [
'name' => 'Kadence Galleries',
'page_url' => admin_url('edit.php?post_type=kt_gallery&page=kadence-galleries-settings'),
],
'kadence-conversions' => [
'name' => 'Kadence Conversions',
'page_url' => admin_url('admin.php?page=kadence-conversion-settings'),
],
'kadence-captcha' => [
'name' => 'Kadence Captcha',
'page_url' => admin_url( 'admin.php?page=kadence-recaptcha-settings&license=show' ),
],
'kadence-pattern-hub' => [
'name' => 'Kadence Pattern Hub',
'page_url' => admin_url('edit.php?post_type=kadence_cloud&page=kadence-cloud-settings&license=show'),
],
'kadence-white-label' => [
'name' => 'Kadence White Label',
'page_url' => admin_url( 'admin.php?page=kadence-white-label-settings' ),
],
];
}
}

View File

@@ -0,0 +1,51 @@
<?php declare( strict_types=1 );
namespace KadenceWP\KadenceBlocks\Harbor\Actions;
/**
* Renders the Harbor (Liquid Web Software Manager) notice on legacy Uplink license forms.
*
* @since 3.7.0
*/
final class Render_Harbor_License_Notice {
/**
* @var string
*/
private $product_name;
/**
* @param string $product_name
*/
public function __construct( string $product_name ) {
$this->product_name = $product_name;
}
/**
* Renders a Harbor notice below the save button on a Kadence Uplink license field.
*
* @since 3.7.0
*
* @return void
*/
public function __invoke(): void {
$url = lw_harbor_get_license_page_url();
if ( empty( $url ) ) {
return;
}
?>
<hr style="margin: 20px 0;"/>
<h4><span class="dashicons dashicons-info" style="vertical-align: middle; margin-right: 4px;"></span><?php esc_html_e( 'Liquid Web Software Manager', 'kadence-blocks' ); ?></h4>
<p class="tooltip description"><?php echo wp_kses(
sprintf(
/* translators: 1: product name, 2: URL to the Liquid Web Software Manager page. */
__( '%1$s is now part of Liquid Web\'s software offerings. This field is still available for managing legacy licenses from your previous %1$s account. If you purchased a new plan through Liquid Web, your products are managed through the <a href="%2$s">Liquid Web Software Manager</a>.', 'kadence-blocks' ),
esc_html( $this->product_name ),
esc_url( $url )
),
[ 'a' => [ 'href' => [] ] ]
); ?></p>
<?php
}
}

View File

@@ -0,0 +1,58 @@
<?php declare( strict_types=1 );
namespace KadenceWP\KadenceBlocks\Harbor\Actions;
use function KadenceWP\KadenceBlocks\StellarWP\Uplink\get_license_key;
use function KadenceWP\KadenceBlocks\StellarWP\Uplink\get_resource;
/**
* Reports Kadence's legacy Uplink licenses into Harbor's unified license listing.
*
* @since 3.7.0
*/
final class Report_Legacy_Licenses {
/**
* Reports legacy Uplink-managed Kadence licenses to Harbor so they appear
* in the unified license UI.
*
* @since 3.7.0
*
* @param array $licenses Existing legacy licenses from other plugins.
*
* @return array
*/
public function __invoke( array $licenses ): array {
$reported_keys = [];
foreach ( ( new Get_Known_Plugins() )() as $slug => $plugin ) {
$key = get_license_key( $slug );
if ( empty( $key ) || isset( $reported_keys[ $key ] ) ) {
continue;
}
$resource = get_resource( $slug );
if ( ! $resource ) {
continue;
}
$reported_keys[ $key ] = true;
$is_active = $resource->has_valid_license();
$licenses[] = [
'key' => $key,
'slug' => $slug,
'name' => $plugin['name'],
'product' => 'kadence',
'is_active' => $is_active,
'page_url' => esc_url( $plugin['page_url'] ),
];
}
return $licenses;
}
}

View File

@@ -0,0 +1,48 @@
<?php declare( strict_types=1 );
namespace KadenceWP\KadenceBlocks\Harbor\Actions;
/**
* Suppresses legacy Kadence add-on "license not activated" admin notices in favor of Harbor's unified UI.
*
* @since 3.7.0
*/
final class Suppress_Legacy_Inactive_Notices {
/**
* Removes legacy "not activated" admin notices from all Kadence add-ons.
*
* Each add-on registers its inactive_notice callback during plugins_loaded,
* which runs after Harbor_Provider::register(). Hooking to admin_init ensures
* all add-on callbacks are already registered before we remove them.
*
* @since 3.7.0
*
* @return void
*/
public function __invoke(): void {
global $wp_filter;
if ( empty( $wp_filter['admin_notices'] ) ) {
return;
}
foreach ( $wp_filter['admin_notices']->callbacks as $priority => $callbacks ) {
foreach ( $callbacks as $key => $callback ) {
$function = $callback['function'];
if ( ! is_array( $function )
|| ! is_object( $function[0] )
|| $function[1] !== 'inactive_notice'
) {
continue;
}
if ( strpos( get_class( $function[0] ), 'KadenceWP\\' ) === 0 ) {
unset( $wp_filter['admin_notices']->callbacks[ $priority ][ $key ] );
}
}
}
}
}

View File

@@ -0,0 +1,140 @@
<?php declare( strict_types=1 );
namespace KadenceWP\KadenceBlocks\Harbor;
use KadenceWP\KadenceBlocks\Harbor\Actions\Get_Known_Plugins;
use KadenceWP\KadenceBlocks\Harbor\Actions\Render_Harbor_License_Notice;
use KadenceWP\KadenceBlocks\Harbor\Actions\Report_Legacy_Licenses;
use KadenceWP\KadenceBlocks\Harbor\Actions\Suppress_Legacy_Inactive_Notices;
use KadenceWP\KadenceBlocks\LiquidWeb\Harbor\Config as HarborConfig;
use KadenceWP\KadenceBlocks\LiquidWeb\Harbor\Harbor;
use KadenceWP\KadenceBlocks\StellarWP\ProphecyMonorepo\Container\Contracts\Provider;
use ITSEC_Core;
/**
* Wires the Harbor (LiquidWeb unified license) integration into Kadence Blocks.
*
* @since 3.7.0
*/
final class Harbor_Provider extends Provider {
/**
* @return void
*/
public function register(): void {
HarborConfig::set_plugin_basename( KADENCE_BLOCKS_PLUGIN_BASENAME );
HarborConfig::set_container( $this->container );
add_filter( 'lw_harbor/premium_plugin_exists', [ $this, 'register_premium_plugin_exists' ] );
Harbor::init();
lw_harbor_register_submenu( 'kadence-blocks' );
add_filter( 'lw-harbor/legacy_licenses', new Report_Legacy_Licenses() );
add_filter( 'kadence_blocks_ai_disabled', [ $this, 'is_ai_disabled' ] );
add_filter( 'kadence_blocks_ai_disabled_message', [ $this, 'ai_disabled_message' ] );
foreach ( ( new Get_Known_Plugins() )() as $slug => $plugin ) {
add_action(
"stellarwp/uplink/{$slug}/license_field_after_form",
new Render_Harbor_License_Notice( $plugin['name'] )
);
add_filter( "stellarwp/uplink/{$slug}/plugin_notices", [ $this, 'suppress_inline_license_notices' ] );
}
add_action( 'admin_init', new Suppress_Legacy_Inactive_Notices() );
}
/**
* Disables Kadence AI for new Harbor customers who don't have legacy AI access.
*
* @param bool $disabled Whether AI is already disabled.
*
* @return bool
*/
public function is_ai_disabled( bool $disabled ): bool {
if ( $disabled ) {
return true;
}
return ! kadence_blocks_is_legacy_license_authorized() && lw_harbor_is_product_license_active( 'kadence' );
}
/**
* Overrides the AI disabled message for Harbor-licensed customers.
*
* @param string $message The default disabled message.
*
* @return string
*/
public function ai_disabled_message( string $message ): string {
if ( kadence_blocks_is_legacy_license_authorized() ) {
return $message;
}
if ( lw_harbor_is_product_license_active( 'kadence' ) ) {
return __( 'We\'re building something new. Kadence AI as you know it is no longer available for new activations — but great things are on the way. Stay tuned for what\'s next.', 'kadence-blocks' );
}
return $message;
}
/**
* Suppresses the StellarWP Uplink inline license notice on the WP plugins
* page for LiquidWeb customers, who manage licensing through the unified key.
*
* This was intentionally kept simple for any unified key instead of Kadence specific so that plugins can continue offloading notices to the Harbor library.
*
* @param array<string, array{slug: string, message_row_html: string}> $notices
*
* @return array<string, array{slug: string, message_row_html: string}>
*/
public function suppress_inline_license_notices( array $notices ): array {
return lw_harbor_has_unified_license_key() ? [] : $notices;
}
/**
* Get the premium plugin existence callbacks.
*
* @since 3.7.2
*
* @param bool $exists Whether a premium plugin exists.
*
* @return bool
*/
public function register_premium_plugin_exists( bool $exists ): bool {
if ( $exists ) {
// It already exists.
return true;
}
$premium_constants = [
'KTP_PLUGIN_FILE',
'KADENCE_WOO_EXTRAS_VERSION',
'SOLIDWP_BACKUPS_PLUGIN_FILE',
'KADENCE_CONVERSIONS_FILE',
'KADENCE_INSIGHTS_FILE',
'KADENCE_WHITE_VERSION',
];
foreach ( $premium_constants as $premium_constant ) {
if ( ! defined( $premium_constant ) ) {
continue;
}
return true;
}
// Kadence Security Pro does not have a constant.
if (
class_exists( ITSEC_Core::class ) &&
ITSEC_Core::get_install_type() === 'pro'
) {
return true;
}
return false;
}
}