Astra_Get_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-get-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' )
				);
			}
		}

		$requested_palette_id = isset( $args['palette_id'] ) ? sanitize_text_field( $args['palette_id'] ) : null;
		$current_palette_id   = isset( $palette_data['currentPalette'] ) && is_string( $palette_data['currentPalette'] ) ? $palette_data['currentPalette'] : 'palette_1';
		$palette_id           = null !== $requested_palette_id ? $requested_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' )
			);
		}

		$palettes       = isset( $palette_data['palettes'] ) && is_array( $palette_data['palettes'] ) ? $palette_data['palettes'] : array();
		$palette_colors = isset( $palettes[ $palette_id ] ) ? $palettes[ $palette_id ] : array_fill( 0, 9, '#000000' );

		// Get available presets with full color data.
		$available_presets = array();
		if ( function_exists( 'astra_get_palette_presets' ) ) {
			$presets = astra_get_palette_presets();

			foreach ( $presets as $preset_name => $preset_colors ) {
				$formatted_colors = array();
				foreach ( $preset_colors as $index => $color ) {
					$formatted_colors[ (string) $index ] = array(
						'hex'   => $color,
						'label' => $this->get_color_label( $index ),
					);
				}
				$available_presets[ $preset_name ] = array(
					'name'   => $preset_name,
					'colors' => $formatted_colors,
				);
			}
		}

		// Get all palettes if requesting current palette.
		$all_palettes = null;
		if ( ! $requested_palette_id ) {
			$all_palettes = array();
			foreach ( array( 'palette_1', 'palette_2', 'palette_3', 'palette_4' ) as $pid ) {
				if ( isset( $palette_data['palettes'][ $pid ] ) ) {
					$colors = array();
					for ( $i = 0; $i <= 8; $i++ ) {
						$colors[ (string) $i ] = isset( $palette_data['palettes'][ $pid ][ $i ] ) ? $palette_data['palettes'][ $pid ][ $i ] : '';
					}
					$all_palettes[ $pid ] = array(
						'is_current' => $pid === $current_palette_id,
						'colors'     => $colors,
					);
				}
			}
		}

		// Format current palette colors with labels.
		$formatted_current_colors = array();
		foreach ( $palette_colors as $index => $color ) {
			$formatted_current_colors[ (string) $index ] = array(
				'hex'   => $color,
				'label' => $this->get_color_label( $index ),
			);
		}

		return Astra_Abilities_Response::success(
			/* translators: 1: palette ID, 2: number of colors, 3: number of presets, 4: preset names */
			sprintf(
				__( 'Retrieved active global palette: %1$s (currently using %2$d colors). Also retrieved %3$d available color presets: %4$s.', 'astra' ),
				$palette_id,
				count( $formatted_current_colors ),
				count( $available_presets ),
				implode( ', ', array_keys( $available_presets ) )
			),
			array(
				'active_palette'    => array(
					'palette_id' => $palette_id,
					'is_current' => $palette_id === $current_palette_id,
					'colors'     => $formatted_current_colors,
				),
				'current_palette'   => $current_palette_id,
				'available_presets' => $available_presets,
				'total_presets'     => count( $available_presets ),
				'all_palettes'      => null !== $all_palettes ? $all_palettes : new stdClass(),
			)
		);
	}


User Contributed Notes

You must log in before being able to contribute a note or feedback.