Astra_Update_Transparent_Header::execute( array $args )

Execute the ability.


Description


Parameters

$args

(array) (Required) Input arguments.


Return

(array) Result array.


Source

File: inc/abilities/customizer/header/transparent/class-astra-update-transparent-header.php

	public function execute( $args ) {
		if ( ! defined( 'ASTRA_THEME_SETTINGS' ) ) {
			return Astra_Abilities_Response::error(
				__( 'Astra theme is not active.', 'astra' ),
				__( 'Please activate the Astra theme to use this feature.', 'astra' )
			);
		}

		$updated         = false;
		$update_messages = array();

		if ( isset( $args['enabled'] ) ) {
			astra_update_option( 'transparent-header-enable', (bool) $args['enabled'] ? 1 : 0 );
			$updated           = true;
			$update_messages[] = $args['enabled'] ? __( 'Transparent header enabled', 'astra' ) : __( 'Transparent header disabled', 'astra' );
		}

		if ( isset( $args['on_devices'] ) ) {
			$on_devices    = sanitize_text_field( $args['on_devices'] );
			$valid_devices = array( 'both', 'desktop', 'mobile' );

			if ( ! in_array( $on_devices, $valid_devices, true ) ) {
				return Astra_Abilities_Response::error(
					/* translators: %s: invalid device value */
					sprintf( __( 'Invalid on_devices: %s.', 'astra' ), $on_devices ),
					__( 'Valid options: both, desktop, mobile', 'astra' )
				);
			}

			astra_update_option( 'transparent-header-on-devices', $on_devices );
			$updated           = true;
			/* translators: %s: device visibility value */
			$update_messages[] = sprintf( __( 'Device visibility set to %s', 'astra' ), $on_devices );
		}

		if ( isset( $args['logo'] ) && is_array( $args['logo'] ) ) {
			$logo = $args['logo'];

			if ( isset( $logo['different_logo'] ) ) {
				astra_update_option( 'different-transparent-logo', (bool) $logo['different_logo'] ? 1 : 0 );
				$updated = true;
			}

			if ( isset( $logo['logo_url'] ) ) {
				astra_update_option( 'transparent-header-logo', esc_url_raw( $logo['logo_url'] ) );
				$updated = true;
			}

			if ( isset( $logo['retina_logo_url'] ) ) {
				astra_update_option( 'transparent-header-retina-logo', esc_url_raw( $logo['retina_logo_url'] ) );
				$updated = true;
			}

			if ( isset( $logo['different_retina'] ) ) {
				astra_update_option( 'different-transparent-retina-logo', (bool) $logo['different_retina'] ? 1 : 0 );
				$updated = true;
			}

			if ( isset( $logo['logo_width'] ) && is_array( $logo['logo_width'] ) ) {
				$sanitized_width = array();
				$devices         = array( 'desktop', 'tablet', 'mobile' );
				foreach ( $devices as $device ) {
					if ( isset( $logo['logo_width'][ $device ] ) ) {
						$sanitized_width[ $device ] = absint( $logo['logo_width'][ $device ] );
					}
				}
				astra_update_option( 'transparent-header-logo-width', $sanitized_width );
				$updated = true;
			}

			$update_messages[] = __( 'Logo settings updated', 'astra' );
		}

		if ( isset( $args['border'] ) && is_array( $args['border'] ) ) {
			if ( isset( $args['border']['size'] ) ) {
				astra_update_option( 'transparent-header-main-sep', sanitize_text_field( $args['border']['size'] ) );
				$updated = true;
			}

			if ( isset( $args['border']['color'] ) ) {
				astra_update_option( 'transparent-header-main-sep-color', sanitize_text_field( $args['border']['color'] ) );
				$updated = true;
			}

			$update_messages[] = __( 'Border settings updated', 'astra' );
		}

		if ( isset( $args['disable_on'] ) && is_array( $args['disable_on'] ) ) {
			$disable_map = array(
				'404_page'          => 'transparent-header-disable-404-page',
				'search_page'       => 'transparent-header-disable-search-page',
				'archive_pages'     => 'transparent-header-disable-archive-pages',
				'blog_index'        => 'transparent-header-disable-index',
				'latest_posts_index' => 'transparent-header-disable-latest-posts-index',
				'pages'             => 'transparent-header-disable-page',
				'posts'             => 'transparent-header-disable-posts',
			);

			foreach ( $disable_map as $key => $option_key ) {
				if ( isset( $args['disable_on'][ $key ] ) ) {
					$value = (bool) $args['disable_on'][ $key ] ? '1' : '0';
					astra_update_option( $option_key, $value );
					$updated = true;
				}
			}

			$update_messages[] = __( 'Disable-on rules updated', 'astra' );
		}

		if ( isset( $args['colors'] ) && is_array( $args['colors'] ) ) {
			$this->update_colors( $args['colors'] );
			$updated           = true;
			$update_messages[] = __( 'Colors updated', 'astra' );
		}

		if ( ! $updated ) {
			return Astra_Abilities_Response::error(
				__( 'No changes specified.', 'astra' ),
				__( 'Please provide at least one setting to update.', 'astra' )
			);
		}

		/* translators: %s: comma-separated list of updated settings */
		$message = sprintf( __( 'Transparent header settings updated: %s.', 'astra' ), implode( ', ', $update_messages ) );

		return Astra_Abilities_Response::success(
			$message,
			array( 'updated' => true )
		);
	}


User Contributed Notes

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