Your IP : 216.73.217.81


Current Path : /home3/vocl2671/sinsport.be/wp-content/plugins/wpforms-lite/src/Admin/Dashboard/
Upload File :
Current File : //home3/vocl2671/sinsport.be/wp-content/plugins/wpforms-lite/src/Admin/Dashboard/WidgetPipeline.php

<?php

namespace WPForms\Admin\Dashboard;

/**
 * Dashboard widget pipeline.
 *
 * Evaluates widget states once at init and renders per-column widget HTML.
 *
 * @since 2.0.2
 */
class WidgetPipeline {

	/**
	 * Prepared widgets per column.
	 *
	 * Shape: [ 'main' => [ [ 'widget' => AbstractWidget, 'variant' => string ], ... ], 'sidebar' => [ ... ] ].
	 *
	 * @since 2.0.2
	 *
	 * @var array
	 */
	private $widgets = [];

	/**
	 * Initialize the pipeline.
	 *
	 * @since 2.0.2
	 */
	public function init(): void {

		$this->init_widgets();
	}

	/**
	 * Evaluate widget states and group visible widgets per column, sorted.
	 *
	 * @since 2.0.2
	 */
	private function init_widgets(): void {

		$access_resolver = wpforms()->obj( 'dashboard_access_resolver' );

		if ( ! $access_resolver ) {
			return;
		}

		$access = $access_resolver->get_context();
		$items  = [];

		foreach ( $this->get_widgets() as $widget ) {
			$state = $widget->get_state( $access );

			if ( ! $state->is_visible() ) {
				continue;
			}

			$items[] = [
				'widget'  => $widget,
				'variant' => $state->get_variant(),
				'order'   => $state->get_order_override() ?? $widget::ORDER,
				'column'  => $widget->get_column(),
			];
		}

		usort(
			$items,
			static function ( $a, $b ) {

				return $a['order'] <=> $b['order'];
			}
		);

		foreach ( $items as $item ) {
			$this->widgets[ $item['column'] ][] = [
				'widget'  => $item['widget'],
				'variant' => $item['variant'],
			];
		}
	}

	/**
	 * Get the widget instances from the registry.
	 *
	 * @since 2.0.2
	 *
	 * @return array
	 */
	private function get_widgets(): array {

		$ids = [
			'dashboard_widget_entries',
			'dashboard_widget_locations',
			'dashboard_widget_whats_new',
			'dashboard_widget_license',
			'dashboard_widget_payments',
			'dashboard_widget_wp_mail_smtp',
			'dashboard_widget_features_addons',
			'dashboard_widget_integrations',
			'dashboard_widget_growth_tools',
			'dashboard_widget_spam_security',
			'dashboard_widget_getting_started',
		];

		/**
		 * Filters the Dashboard widget IDs to render.
		 *
		 * @since 2.0.2
		 *
		 * @param array $ids Widget registry IDs.
		 */
		$ids = (array) apply_filters( 'wpforms_admin_dashboard_widget_pipeline_get_widgets', $ids );

		return array_filter( array_map( [ wpforms(), 'obj' ], $ids ) );
	}

	/**
	 * Render all visible widgets of a column into HTML.
	 *
	 * @since 2.0.2
	 *
	 * @param string        $column Column: 'main' or 'sidebar'.
	 * @param array         $data   Aggregated data.
	 * @param AccessContext $access Access context.
	 *
	 * @return string
	 */
	public function render_column( string $column, array $data, AccessContext $access ): string {

		$html = '';

		foreach ( $this->widgets[ $column ] ?? [] as $item ) {
			$html .= $item['widget']->render( $item['variant'], $data, $access );
		}

		return $html;
	}
}