Astra_Update_Global_Palette::execute( array $args )
Execute the ability.
Description
Parameters
- $args
-
(array) (Required) Input arguments.
Return
(array) Result array.
Source
File: inc/abilities/customizer/globals/colors/class-astra-update-global-palette.php
public function execute( $args ) {
$palette_data = get_option( 'astra-color-palettes', array() );
if ( empty( $palette_data ) && ! is_array( $palette_data ) ) {
if ( class_exists( 'Astra_Global_Palette' ) ) {
$palette_data = Astra_Global_Palette::get_default_color_palette();
} else {
return Astra_Abilities_Response::error(
__( 'Astra Global Palette is not available.', 'astra' ),
__( 'Please ensure Astra theme is active.', 'astra' )
);
}
}
$current_palette_id = isset( $palette_data['currentPalette'] ) && is_string( $palette_data['currentPalette'] ) ? $palette_data['currentPalette'] : 'palette_1';
$palette_id = isset( $args['palette_id'] ) ? sanitize_text_field( $args['palette_id'] ) : $current_palette_id;
if ( ! in_array( $palette_id, array( 'palette_1', 'palette_2', 'palette_3', 'palette_4' ), true ) ) {
return Astra_Abilities_Response::error(
/* translators: %s: palette ID */
sprintf( __( 'Invalid palette ID: %s.', 'astra' ), $palette_id ),
__( 'Must be one of: palette_1, palette_2, palette_3, palette_4', 'astra' )
);
}
$palette_data['palettes'] = isset( $palette_data['palettes'] ) && is_array( $palette_data['palettes'] ) ? $palette_data['palettes'] : array();
if ( ! isset( $palette_data['palettes'][ $palette_id ] ) ) {
$palette_data['palettes'][ $palette_id ] = array_fill( 0, 9, '#000000' );
}
$applied_preset = '';
// Apply preset if provided.
if ( isset( $args['preset'] ) && ! empty( $args['preset'] ) ) {
$preset_name = sanitize_text_field( $args['preset'] );
if ( function_exists( 'astra_get_palette_presets' ) ) {
$presets = astra_get_palette_presets();
$preset_key = null;
foreach ( $presets as $key => $preset_colors ) {
if ( 0 === strcasecmp( $key, $preset_name ) ) {
$preset_key = $key;
break;
}
}
if ( $preset_key && isset( $presets[ $preset_key ] ) ) {
$palette_data['palettes'][ $palette_id ] = $presets[ $preset_key ];
$applied_preset = $preset_key;
} else {
return Astra_Abilities_Response::error(
/* translators: %s: preset name */
sprintf( __( 'Invalid preset name: %s.', 'astra' ), $preset_name ),
__( 'Available presets: Oak, Lily, Viola, Cedar, Willow, Rose, Sage, Flare, Maple, Birch, Dark', 'astra' )
);
}
} else {
return Astra_Abilities_Response::error(
__( 'Preset function not available.', 'astra' ),
__( 'Please ensure Astra theme is active and up to date.', 'astra' )
);
}
}
// Apply individual color overrides.
if ( isset( $args['colors'] ) && is_array( $args['colors'] ) ) {
foreach ( $args['colors'] as $index => $color ) {
$color_index = intval( $index );
if ( $color_index < 0 || $color_index > 8 ) {
continue;
}
$color = sanitize_hex_color( $color );
if ( empty( $color ) ) {
continue;
}
$palette_data['palettes'][ $palette_id ][ $color_index ] = $color;
}
}
if ( empty( $applied_preset ) && ( ! isset( $args['colors'] ) || empty( $args['colors'] ) ) ) {
return Astra_Abilities_Response::error(
__( 'No changes specified.', 'astra' ),
__( 'Please provide either a preset name or color values to update.', 'astra' )
);
}
// Set as current palette if requested (default is true).
$set_as_current = isset( $args['set_as_current'] ) ? (bool) $args['set_as_current'] : true;
if ( $set_as_current ) {
$palette_data['currentPalette'] = $palette_id;
}
update_option( 'astra-color-palettes', $palette_data );
// Sync with theme options when palette is set as current.
$palettes = isset( $palette_data['palettes'] ) && is_array( $palette_data['palettes'] ) ? $palette_data['palettes'] : array();
$is_current_palette = ( isset( $palette_data['currentPalette'] ) && is_string( $palette_data['currentPalette'] ) ? $palette_data['currentPalette'] : '' ) === $palette_id;
if ( $is_current_palette && function_exists( 'astra_get_option' ) && defined( 'ASTRA_THEME_SETTINGS' ) ) {
$global_palette = astra_get_option( 'global-color-palette', array( 'palette' => array() ) );
if ( ! isset( $global_palette['palette'] ) || ! is_array( $global_palette['palette'] ) ) {
$global_palette['palette'] = array();
}
$active_palette = isset( $palettes[ $palette_id ] ) ? $palettes[ $palette_id ] : array();
foreach ( $active_palette as $index => $color ) {
$global_palette['palette'][ $index ] = $color;
}
$theme_options = get_option( ASTRA_THEME_SETTINGS, array() );
if ( ! is_array( $theme_options ) ) {
$theme_options = array();
}
$theme_options['global-color-palette'] = $global_palette;
update_option( ASTRA_THEME_SETTINGS, $theme_options );
}
// Prepare response.
$updated_palette = isset( $palettes[ $palette_id ] ) ? $palettes[ $palette_id ] : array();
$is_current = ( isset( $palette_data['currentPalette'] ) && is_string( $palette_data['currentPalette'] ) ? $palette_data['currentPalette'] : '' ) === $palette_id;
$colors = array();
for ( $i = 0; $i <= 8; $i++ ) {
$colors[ (string) $i ] = isset( $updated_palette[ $i ] ) ? $updated_palette[ $i ] : '';
}
$message = ! empty( $applied_preset )
/* translators: %s: preset name */
? sprintf( __( 'Global palette updated successfully with %s preset.', 'astra' ), $applied_preset )
: __( 'Global palette updated successfully.', 'astra' );
return Astra_Abilities_Response::success(
$message,
array(
'palette_id' => $palette_id,
'is_current' => $is_current,
'colors' => $colors,
'color_labels' => array(
'0' => 'Primary',
'1' => 'Primary Hover',
'2' => 'Heading',
'3' => 'Text',
'4' => 'Background',
'5' => 'Secondary Background',
'6' => 'Border',
'7' => 'Secondary Border',
'8' => 'Accent',
),
'applied_preset' => ! empty( $applied_preset ) ? $applied_preset : null,
)
);
}
Expand full source code Collapse full source code View on Trac