This commit introduces a more reliable and consistent approach to setting up the development environment using backups: - Add setup-from-backup.sh script for environment setup from existing backups - Standardize script naming and organization - Move obsolete scripts to bin/obsolete directory - Update documentation with new workflow instructions - Create migration guide for transitioning to new workflow - Update Memory Bank with workflow improvements The new workflow provides: - More reliable environment setup - Faster setup process - Offline development capability - Consistent development environments across team members Breaking changes: - setup-dev.sh is replaced by setup-from-backup.sh - sync-and-setup.sh is replaced by separate scripts - verify-with-wpcli.sh is no longer used Migration path is documented in MIGRATION_GUIDE.md
		
			
				
	
	
		
			417 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			417 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Astra Builder
 | |
|  *
 | |
|  * @package Astra Addon
 | |
|  */
 | |
| 
 | |
| if ( ! class_exists( 'Astra_Builder' ) ) {
 | |
| 
 | |
| 	/**
 | |
| 	 * Astra_Builder initial setup
 | |
| 	 *
 | |
| 	 * @since 3.0.0
 | |
| 	 */
 | |
| 	// @codingStandardsIgnoreStart
 | |
| 	class Astra_Builder {
 | |
|  // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedClassFound
 | |
| 		// @codingStandardsIgnoreEnd
 | |
| 
 | |
| 		/**
 | |
| 		 * Member Variable
 | |
| 		 *
 | |
| 		 * @var instance
 | |
| 		 */
 | |
| 		private static $instance;
 | |
| 
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *  Initiator
 | |
| 		 */
 | |
| 		public static function get_instance() {
 | |
| 			if ( ! isset( self::$instance ) ) {
 | |
| 				self::$instance = new self();
 | |
| 			}
 | |
| 			return self::$instance;
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * Constructor
 | |
| 		 */
 | |
| 		public function __construct() {
 | |
| 
 | |
| 			add_filter(
 | |
| 				'astra_footer_row_layout',
 | |
| 				function( $layout ) {
 | |
| 					// Modify Layouts here.
 | |
| 					return $layout;
 | |
| 				}
 | |
| 			);
 | |
| 
 | |
| 			add_filter( 'astra_header_desktop_items', array( $this, 'update_header_builder_desktop_items' ) );
 | |
| 			add_filter( 'astra_header_mobile_items', array( $this, 'update_header_builder_mobile_items' ) );
 | |
| 			add_filter( 'astra_footer_desktop_items', array( $this, 'update_footer_builder_desktop_items' ) );
 | |
| 
 | |
| 			add_action( 'astra_render_header_components', array( $this, 'render_header_components' ), 10, 2 );
 | |
| 			add_action( 'astra_render_footer_components', array( $this, 'render_footer_dynamic_components' ) );
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * Update default header builder's desktop components.
 | |
| 		 *
 | |
| 		 * @param array $header_items array of header elements which will load in customizer builder layout.
 | |
| 		 * @return array Array of desktop components.
 | |
| 		 *
 | |
| 		 * @since 3.0.0
 | |
| 		 */
 | |
| 		public function update_header_builder_desktop_items( $header_items ) {
 | |
| 
 | |
| 			$cloned_component_track = astra_addon_builder_helper()->component_count_array;
 | |
| 
 | |
| 			$num_of_header_divider = astra_addon_builder_helper()->num_of_header_divider;
 | |
| 			for ( $index = 1; $index <= $num_of_header_divider; $index++ ) {
 | |
| 
 | |
| 				$header_divider_section = 'section-hb-divider-' . $index;
 | |
| 
 | |
| 				if ( isset( $cloned_component_track['removed-items'] ) && in_array( $header_divider_section, $cloned_component_track['removed-items'], true ) ) {
 | |
| 					continue;
 | |
| 				}
 | |
| 
 | |
| 				$header_items[ 'divider-' . $index ] = array(
 | |
| 					'name'    => ( 1 === $num_of_header_divider ) ? 'Divider' : 'Divider ' . $index,
 | |
| 					'icon'    => 'minus',
 | |
| 					'section' => $header_divider_section,
 | |
| 					'clone'   => true,
 | |
| 					'type'    => 'divider',
 | |
| 					'builder' => 'header',
 | |
| 				);
 | |
| 			}
 | |
| 
 | |
| 			$header_items['language-switcher'] = array(
 | |
| 				'name'    => __( 'Language Switcher', 'astra-addon' ),
 | |
| 				'icon'    => 'translation',
 | |
| 				'section' => 'section-hb-language-switcher',
 | |
| 			);
 | |
| 
 | |
| 			if ( version_compare( ASTRA_THEME_VERSION, '3.2.0', '>' ) ) {
 | |
| 
 | |
| 				$header_items['mobile-trigger'] = array(
 | |
| 					'name'    => __( 'Toggle Button', 'astra-addon' ),
 | |
| 					'icon'    => 'menu-alt',
 | |
| 					'section' => 'section-header-mobile-trigger',
 | |
| 				);
 | |
| 			}
 | |
| 
 | |
| 			$header_items['mobile-menu'] = array(
 | |
| 				'name'    => __( 'Off-Canvas Menu', 'astra-addon' ),
 | |
| 				'icon'    => 'menu-alt',
 | |
| 				'section' => 'section-header-mobile-menu',
 | |
| 			);
 | |
| 
 | |
| 			return $header_items;
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * Update default header builder's mobile components.
 | |
| 		 *
 | |
| 		 * @param array $mobile_items array of mobile elements which will load in customizer builder layout.
 | |
| 		 * @return array Array of mobile components.
 | |
| 		 *
 | |
| 		 * @since 3.0.0
 | |
| 		 */
 | |
| 		public function update_header_builder_mobile_items( $mobile_items ) {
 | |
| 
 | |
| 			$cloned_component_track = astra_addon_builder_helper()->component_count_array;
 | |
| 
 | |
| 			$num_of_header_divider = astra_addon_builder_helper()->num_of_header_divider;
 | |
| 			for ( $index = 1; $index <= $num_of_header_divider; $index++ ) {
 | |
| 
 | |
| 				$header_mobile_divider_section = 'section-hb-divider-' . $index;
 | |
| 
 | |
| 				if ( isset( $cloned_component_track['removed-items'] ) && in_array( $header_mobile_divider_section, $cloned_component_track['removed-items'], true ) ) {
 | |
| 					continue;
 | |
| 				}
 | |
| 
 | |
| 				$mobile_items[ 'divider-' . $index ] = array(
 | |
| 					'name'    => ( 1 === $num_of_header_divider ) ? 'Divider' : 'Divider ' . $index,
 | |
| 					'icon'    => 'minus',
 | |
| 					'section' => $header_mobile_divider_section,
 | |
| 					'clone'   => true,
 | |
| 					'type'    => 'divider',
 | |
| 					'builder' => 'header',
 | |
| 				);
 | |
| 			}
 | |
| 
 | |
| 			$mobile_items['language-switcher'] = array(
 | |
| 				'name'    => __( 'Language Switcher', 'astra-addon' ),
 | |
| 				'icon'    => 'translation',
 | |
| 				'section' => 'section-hb-language-switcher',
 | |
| 			);
 | |
| 
 | |
| 			return $mobile_items;
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * Update default footer builder's components.
 | |
| 		 *
 | |
| 		 * @param array $footer_items array of footer elements which will load in customizer builder layout.
 | |
| 		 * @return array Array of footer components.
 | |
| 		 *
 | |
| 		 * @since 3.0.0
 | |
| 		 */
 | |
| 		public function update_footer_builder_desktop_items( $footer_items ) {
 | |
| 
 | |
| 			$cloned_component_track = astra_addon_builder_helper()->component_count_array;
 | |
| 
 | |
| 			$num_of_footer_divider = astra_addon_builder_helper()->num_of_footer_divider;
 | |
| 			for ( $index = 1; $index <= $num_of_footer_divider; $index++ ) {
 | |
| 
 | |
| 				$footer_divider_section = 'section-fb-divider-' . $index;
 | |
| 
 | |
| 				if ( isset( $cloned_component_track['removed-items'] ) && in_array( $footer_divider_section, $cloned_component_track['removed-items'], true ) ) {
 | |
| 					continue;
 | |
| 				}
 | |
| 
 | |
| 				$footer_items[ 'divider-' . $index ] = array(
 | |
| 					'name'    => ( 1 === $num_of_footer_divider ) ? 'Divider' : 'Divider ' . $index,
 | |
| 					'icon'    => 'minus',
 | |
| 					'section' => $footer_divider_section,
 | |
| 					'clone'   => true,
 | |
| 					'type'    => 'divider',
 | |
| 					'builder' => 'footer',
 | |
| 				);
 | |
| 			}
 | |
| 
 | |
| 			$footer_items['language-switcher'] = array(
 | |
| 				'name'    => __( 'Language Switcher', 'astra-addon' ),
 | |
| 				'icon'    => 'translation',
 | |
| 				'section' => 'section-fb-language-switcher',
 | |
| 			);
 | |
| 
 | |
| 			return $footer_items;
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * Render header component.
 | |
| 		 *
 | |
| 		 * @param string $slug component slug.
 | |
| 		 * @param string $device device.
 | |
| 		 */
 | |
| 		public function render_header_components( $slug, $device = '' ) {
 | |
| 
 | |
| 			$this->render_header_dynamic_components( $slug, $device );
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * Render header dynamic components.
 | |
| 		 *
 | |
| 		 * @param string $slug slug.
 | |
| 		 * @param string $device device.
 | |
| 		 */
 | |
| 		public function render_header_dynamic_components( $slug, $device ) {
 | |
| 
 | |
| 			if ( 0 === strpos( $slug, 'html' ) ) {
 | |
| 				?>
 | |
| 				<div class="ast-builder-layout-element site-header-focus-item ast-header-<?php echo esc_attr( $slug ); ?>" data-section="section-hb-<?php echo esc_attr( $slug ); ?>">
 | |
| 					<?php
 | |
| 					$action_name = 'astra_header_' . str_replace( '-', '_', $slug );
 | |
| 					do_action( $action_name );
 | |
| 					?>
 | |
| 				</div>
 | |
| 				<?php
 | |
| 			} elseif ( 0 === strpos( $slug, 'button' ) ) {
 | |
| 				?>
 | |
| 				<div class="ast-builder-layout-element site-header-focus-item ast-header-<?php echo esc_attr( $slug ); ?>" data-section="section-hb-<?php echo esc_attr( $slug ); ?>">
 | |
| 					<?php
 | |
| 					$action_name = 'astra_header_' . str_replace( '-', '_', $slug );
 | |
| 					do_action( $action_name );
 | |
| 					?>
 | |
| 				</div>
 | |
| 				<?php
 | |
| 			} elseif ( 0 === strpos( $slug, 'widget' ) ) {
 | |
| 				?>
 | |
| 				<aside
 | |
| 					<?php
 | |
| 					echo wp_kses_post(
 | |
| 						astra_attr(
 | |
| 							'header-widget-area-inner',
 | |
| 							array(
 | |
| 								'class'        => 'header-widget-area widget-area site-header-focus-item',
 | |
| 								'data-section' => 'sidebar-widgets-header-' . esc_attr( $slug ),
 | |
| 							)
 | |
| 						)
 | |
| 					);
 | |
| 					?>
 | |
| 					>
 | |
| 					<?php
 | |
| 					if ( is_customize_preview() && class_exists( 'Astra_Builder_UI_Controller' ) ) {
 | |
| 						Astra_Builder_UI_Controller::render_customizer_edit_button();
 | |
| 					}
 | |
| 
 | |
| 					if ( function_exists( 'astra_markup_open' ) ) {
 | |
| 						astra_markup_open( 'header-widget-div', array( 'echo' => true ) );
 | |
| 					} else {
 | |
| 						?>
 | |
| 							<div class="header-widget-area-inner site-info-inner">
 | |
| 						<?php
 | |
| 					}
 | |
| 
 | |
| 					astra_get_sidebar( 'header-' . str_replace( '_', '-', $slug ) );
 | |
| 
 | |
| 					if ( function_exists( 'astra_markup_close' ) ) {
 | |
| 						astra_markup_close( 'header-widget-div', array( 'echo' => true ) );
 | |
| 					} else {
 | |
| 						?>
 | |
| 							</div>
 | |
| 						<?php
 | |
| 					}
 | |
| 					?>
 | |
| 				</aside>
 | |
| 				<?php
 | |
| 			} elseif ( 0 === strpos( $slug, 'menu' ) ) {
 | |
| 				?>
 | |
| 				<div class="ast-builder-<?php echo esc_attr( $slug ); ?> ast-builder-menu ast-builder-<?php echo esc_attr( $slug ); ?>-focus-item ast-builder-layout-element site-header-focus-item" data-section="section-hb-<?php echo esc_attr( $slug ); ?>">
 | |
| 					<?php
 | |
| 					$action_name = 'astra_header_' . str_replace( '-', '_', $slug );
 | |
| 					do_action( $action_name, $device );
 | |
| 					?>
 | |
| 				</div>
 | |
| 				<?php
 | |
| 			} elseif ( 0 === strpos( $slug, 'social-icons' ) ) {
 | |
| 				$index = str_replace( 'social-icons-', '', $slug );
 | |
| 				?>
 | |
| 				<div class="ast-builder-layout-element site-header-focus-item" data-section="section-hb-social-icons-<?php echo esc_attr( $index ); ?>">
 | |
| 					<?php
 | |
| 					$action_name = 'astra_header_social_' . $index;
 | |
| 					do_action( $action_name );
 | |
| 					?>
 | |
| 				</div>
 | |
| 				<?php
 | |
| 			} elseif ( 0 === strpos( $slug, 'divider' ) ) {
 | |
| 				$layout_class = astra_get_option( 'header-' . $slug . '-layout' );
 | |
| 				?>
 | |
| 					<div class="ast-builder-layout-element site-header-focus-item ast-header-divider-element ast-header-<?php echo esc_attr( $slug ); ?> ast-hb-divider-layout-<?php echo esc_attr( $layout_class ); ?>" data-section="section-hb-<?php echo esc_attr( $slug ); ?>">
 | |
| 					<?php
 | |
| 						$action_name = 'astra_header_' . str_replace( '-', '_', $slug );
 | |
| 						do_action( $action_name );
 | |
| 					?>
 | |
| 					</div>
 | |
| 				<?php
 | |
| 			} elseif ( 0 === strpos( $slug, 'language-switcher' ) ) {
 | |
| 				$layout_class = astra_get_option( 'header-' . $slug . '-layout' );
 | |
| 				?>
 | |
| 					<div class="ast-builder-layout-element site-header-focus-item ast-header-language-switcher-element ast-header-<?php echo esc_attr( $slug ); ?> ast-hb-language-switcher-layout-<?php echo esc_attr( $layout_class ); ?>" data-section="section-hb-<?php echo esc_attr( $slug ); ?>">
 | |
| 					<?php
 | |
| 						$action_name = 'astra_header_' . str_replace( '-', '_', $slug );
 | |
| 						do_action( $action_name );
 | |
| 					?>
 | |
| 					</div>
 | |
| 				<?php
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * Render footer dynamic components.
 | |
| 		 *
 | |
| 		 * @param string $slug slug.
 | |
| 		 */
 | |
| 		public function render_footer_dynamic_components( $slug ) {
 | |
| 
 | |
| 			if ( 0 === strpos( $slug, 'html' ) ) {
 | |
| 				?>
 | |
| 				<div class="footer-widget-area widget-area site-footer-focus-item ast-footer-<?php echo esc_attr( $slug ); ?>" data-section="section-fb-<?php echo esc_attr( $slug ); ?>">
 | |
| 					<?php
 | |
| 					$action_name = 'astra_footer_' . str_replace( '-', '_', $slug );
 | |
| 					do_action( $action_name );
 | |
| 					?>
 | |
| 				</div>
 | |
| 				<?php
 | |
| 			} elseif ( 0 === strpos( $slug, 'button' ) ) {
 | |
| 				?>
 | |
| 				<div class="ast-builder-layout-element site-footer-focus-item ast-footer-<?php echo esc_attr( $slug ); ?>" data-section="section-fb-<?php echo esc_attr( $slug ); ?>">
 | |
| 					<?php
 | |
| 					$action_name = 'astra_footer_' . str_replace( '-', '_', $slug );
 | |
| 					do_action( $action_name );
 | |
| 					?>
 | |
| 				</div>
 | |
| 				<?php
 | |
| 			} elseif ( 0 === strpos( $slug, 'widget' ) ) {
 | |
| 				?>
 | |
| 				<aside
 | |
| 				<?php
 | |
| 				echo wp_kses_post(
 | |
| 					astra_attr(
 | |
| 						'footer-widget-area-inner',
 | |
| 						array(
 | |
| 							'class'        => 'footer-widget-area widget-area site-footer-focus-item',
 | |
| 							'data-section' => 'sidebar-widgets-footer-' . esc_attr( $slug ),
 | |
| 						)
 | |
| 					)
 | |
| 				);
 | |
| 				?>
 | |
| 				>
 | |
| 				<?php
 | |
| 				if ( function_exists( 'astra_markup_open' ) ) {
 | |
| 					astra_markup_open( 'footer-widget-div', array( 'echo' => true ) );
 | |
| 				} else {
 | |
| 					?>
 | |
| 						<div class="footer-widget-area-inner site-info-inner">
 | |
| 					<?php
 | |
| 				}
 | |
| 
 | |
| 					astra_get_sidebar( 'footer-' . str_replace( '_', '-', $slug ) );
 | |
| 
 | |
| 				if ( function_exists( 'astra_markup_close' ) ) {
 | |
| 					astra_markup_close( 'footer-widget-div', array( 'echo' => true ) );
 | |
| 				} else {
 | |
| 					?>
 | |
| 						</div>
 | |
| 					<?php
 | |
| 				}
 | |
| 				?>
 | |
| 				</aside>
 | |
| 				<?php
 | |
| 			} elseif ( 0 === strpos( $slug, 'social-icons' ) ) {
 | |
| 				$index = str_replace( 'social-icons-', '', $slug );
 | |
| 				?>
 | |
| 				<div class="ast-builder-layout-element site-footer-focus-item" data-section="section-fb-social-icons-<?php echo esc_attr( $index ); ?>">
 | |
| 					<?php
 | |
| 					$action_name = 'astra_footer_social_' . $index;
 | |
| 					do_action( $action_name );
 | |
| 					?>
 | |
| 				</div>
 | |
| 				<?php
 | |
| 			} elseif ( 0 === strpos( $slug, 'divider' ) ) {
 | |
| 				$layout_class = astra_get_option( 'footer-' . $slug . '-layout' );
 | |
| 				?>
 | |
| 					<div class="footer-widget-area widget-area site-footer-focus-item ast-footer-divider-element ast-footer-<?php echo esc_attr( $slug ); ?> ast-fb-divider-layout-<?php echo esc_attr( $layout_class ); ?>" data-section="section-fb-<?php echo esc_attr( $slug ); ?>">
 | |
| 					<?php
 | |
| 						$action_name = 'astra_footer_' . str_replace( '-', '_', $slug );
 | |
| 						do_action( $action_name );
 | |
| 					?>
 | |
| 					</div>
 | |
| 				<?php
 | |
| 			} elseif ( 0 === strpos( $slug, 'language-switcher' ) ) {
 | |
| 				$layout_class = astra_get_option( 'footer-' . $slug . '-layout' );
 | |
| 				?>
 | |
| 					<div class="ast-builder-layout-element site-footer-focus-item ast-footer-language-switcher-element ast-footer-<?php echo esc_attr( $slug ); ?> ast-fb-language-switcher-layout-<?php echo esc_attr( $layout_class ); ?>" data-section="section-fb-<?php echo esc_attr( $slug ); ?>">
 | |
| 					<?php
 | |
| 						$action_name = 'astra_footer_' . str_replace( '-', '_', $slug );
 | |
| 						do_action( $action_name );
 | |
| 					?>
 | |
| 					</div>
 | |
| 				<?php
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  *  Prepare if class 'Astra_Builder' exist.
 | |
|  *  Kicking this off by calling 'get_instance()' method
 | |
|  */
 | |
| Astra_Builder::get_instance();
 |