269 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			269 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						||
/**
 | 
						||
 * Settings page.
 | 
						||
 *
 | 
						||
 * @package Smush\App\Pages
 | 
						||
 */
 | 
						||
 | 
						||
namespace Smush\App\Pages;
 | 
						||
 | 
						||
use Smush\App\Abstract_Page;
 | 
						||
use Smush\App\Interface_Page;
 | 
						||
use WP_Smush;
 | 
						||
 | 
						||
if ( ! defined( 'WPINC' ) ) {
 | 
						||
	die;
 | 
						||
}
 | 
						||
 | 
						||
/**
 | 
						||
 * Class Settings
 | 
						||
 */
 | 
						||
class Settings extends Abstract_Page implements Interface_Page {
 | 
						||
	/**
 | 
						||
	 * Function triggered when the page is loaded before render any content.
 | 
						||
	 */
 | 
						||
	public function on_load() {
 | 
						||
		// Init the tabs.
 | 
						||
		$this->tabs = apply_filters(
 | 
						||
			'smush_setting_tabs',
 | 
						||
			array(
 | 
						||
				'general'       => __( 'General', 'wp-smushit' ),
 | 
						||
				'configs'       => __( 'Configs', 'wp-smushit' ),
 | 
						||
				'permissions'   => __( 'Permissions', 'wp-smushit' ),
 | 
						||
				'data'          => __( 'Data & Settings', 'wp-smushit' ),
 | 
						||
				'accessibility' => __( 'Accessibility', 'wp-smushit' ),
 | 
						||
			)
 | 
						||
		);
 | 
						||
 | 
						||
		// Disabled on all subsites.
 | 
						||
		if ( ! is_multisite() || ! is_network_admin() ) {
 | 
						||
			unset( $this->tabs['permissions'] );
 | 
						||
		}
 | 
						||
 | 
						||
		add_action( 'smush_setting_column_right_inside', array( $this, 'usage_settings' ), 25, 2 );
 | 
						||
		add_action( 'smush_setting_column_right_inside', array( $this, 'detection_settings' ), 25, 2 );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Enqueue scripts.
 | 
						||
	 *
 | 
						||
	 * @since 3.9.0
 | 
						||
	 *
 | 
						||
	 * @param string $hook Hook from where the call is made.
 | 
						||
	 */
 | 
						||
	public function enqueue_scripts( $hook ) {
 | 
						||
		// Scripts for Configs.
 | 
						||
		$this->enqueue_configs_scripts();
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Register meta boxes.
 | 
						||
	 */
 | 
						||
	public function register_meta_boxes() {
 | 
						||
		$this->add_meta_box(
 | 
						||
			'settings/general',
 | 
						||
			__( 'General', 'wp-smushit' ),
 | 
						||
			array( $this, 'general_meta_box' ),
 | 
						||
			null,
 | 
						||
			array( $this, 'common_meta_box_footer' ),
 | 
						||
			'general'
 | 
						||
		);
 | 
						||
 | 
						||
		if ( is_multisite() && is_network_admin() ) {
 | 
						||
			$this->add_meta_box(
 | 
						||
				'settings/permissions',
 | 
						||
				__( 'Permissions', 'wp-smushit' ),
 | 
						||
				array( $this, 'permissions_meta_box' ),
 | 
						||
				null,
 | 
						||
				array( $this, 'common_meta_box_footer' ),
 | 
						||
				'permissions'
 | 
						||
			);
 | 
						||
		}
 | 
						||
 | 
						||
		$this->add_meta_box(
 | 
						||
			'settings/data',
 | 
						||
			__( 'Data & Settings', 'wp-smushit' ),
 | 
						||
			array( $this, 'data_meta_box' ),
 | 
						||
			null,
 | 
						||
			array( $this, 'common_meta_box_footer' ),
 | 
						||
			'data'
 | 
						||
		);
 | 
						||
 | 
						||
		$this->add_meta_box(
 | 
						||
			'settings/accessibility',
 | 
						||
			__( 'Accessibility', 'wp-smushit' ),
 | 
						||
			array( $this, 'accessibility_meta_box' ),
 | 
						||
			null,
 | 
						||
			array( $this, 'common_meta_box_footer' ),
 | 
						||
			'accessibility'
 | 
						||
		);
 | 
						||
 | 
						||
		if ( 'data' === $this->get_current_tab() ) {
 | 
						||
			$this->modals['reset-settings'] = array();
 | 
						||
		}
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Display a description in Settings - Usage Tracking.
 | 
						||
	 *
 | 
						||
	 * @since 3.1.0
 | 
						||
	 *
 | 
						||
	 * @param string $name  Setting name.
 | 
						||
	 */
 | 
						||
	public function usage_settings( $name ) {
 | 
						||
		// Add only to full size settings.
 | 
						||
		if ( 'usage' !== $name ) {
 | 
						||
			return;
 | 
						||
		}
 | 
						||
		?>
 | 
						||
 | 
						||
		<span class="sui-description sui-toggle-description">
 | 
						||
			<?php
 | 
						||
			esc_html_e( 'Note: Usage tracking is completely anonymous. We are only tracking what features you are/aren’t using to make our feature decisions more informed.', 'wp-smushit' );
 | 
						||
			?>
 | 
						||
		</span>
 | 
						||
		<?php
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Display a description in Settings - Image Resize Detection.
 | 
						||
	 *
 | 
						||
	 * @since 3.2.1
 | 
						||
	 *
 | 
						||
	 * @param string $name  Setting name.
 | 
						||
	 */
 | 
						||
	public function detection_settings( $name ) {
 | 
						||
		// Add only to full size settings.
 | 
						||
		if ( 'detection' !== $name ) {
 | 
						||
			return;
 | 
						||
		}
 | 
						||
		?>
 | 
						||
 | 
						||
		<span class="sui-description sui-toggle-description">
 | 
						||
			<?php esc_html_e( 'Note: The highlighting will only be visible to administrators – visitors won’t see the highlighting.', 'wp-smushit' ); ?>
 | 
						||
			<?php if ( $this->settings->get( 'detection' ) ) : ?>
 | 
						||
				<?php if ( $this->settings->get( 'cdn' ) && $this->settings->get( 'auto_resize' ) ) : ?>
 | 
						||
					<div class="sui-notice smush-highlighting-notice">
 | 
						||
						<div class="sui-notice-content">
 | 
						||
							<div class="sui-notice-message">
 | 
						||
								<i class="sui-notice-icon sui-icon-info sui-md" aria-hidden="true"></i>
 | 
						||
								<p>
 | 
						||
									<?php
 | 
						||
									esc_html_e(
 | 
						||
										'Note: Images served via the Smush CDN are automatically resized to fit their containers, these will be skipped.',
 | 
						||
										'wp-smushit'
 | 
						||
									);
 | 
						||
									?>
 | 
						||
								</p>
 | 
						||
							</div>
 | 
						||
						</div>
 | 
						||
					</div>
 | 
						||
				<?php else : ?>
 | 
						||
					<div class="sui-notice sui-notice-info smush-highlighting-notice">
 | 
						||
						<div class="sui-notice-content">
 | 
						||
							<div class="sui-notice-message">
 | 
						||
								<i class="sui-notice-icon sui-icon-info sui-md" aria-hidden="true"></i>
 | 
						||
								<p>
 | 
						||
									<?php
 | 
						||
									printf(
 | 
						||
									/* translators: %1$s: opening a tag, %2$s: closing a tag */
 | 
						||
										esc_html__(
 | 
						||
											'Incorrect image size highlighting is active. %1$sView the frontend%2$s of your website to see if any images aren\'t the correct size for their containers.',
 | 
						||
											'wp-smushit'
 | 
						||
										),
 | 
						||
										'<a href="' . esc_url( home_url() ) . '" target="_blank">',
 | 
						||
										'</a>'
 | 
						||
									);
 | 
						||
									?>
 | 
						||
								</p>
 | 
						||
							</div>
 | 
						||
						</div>
 | 
						||
					</div>
 | 
						||
				<?php endif; ?>
 | 
						||
			<?php else : ?>
 | 
						||
				<div class="sui-notice sui-notice-warning smush-highlighting-warning sui-hidden">
 | 
						||
					<div class="sui-notice-content">
 | 
						||
						<div class="sui-notice-message">
 | 
						||
							<i class="sui-notice-icon sui-icon-info sui-md" aria-hidden="true"></i>
 | 
						||
							<p><?php esc_html_e( 'Almost there! To finish activating this feature you must save your settings.', 'wp-smushit' ); ?></p>
 | 
						||
						</div>
 | 
						||
					</div>
 | 
						||
				</div>
 | 
						||
			<?php endif; ?>
 | 
						||
		</span>
 | 
						||
		<?php
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Common footer meta box.
 | 
						||
	 *
 | 
						||
	 * @since 3.2.0
 | 
						||
	 */
 | 
						||
	public function common_meta_box_footer() {
 | 
						||
		$this->view( 'meta-box-footer', array(), 'common' );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * General settings meta box.
 | 
						||
	 */
 | 
						||
	public function general_meta_box() {
 | 
						||
		$link = WP_Smush::is_pro() ? 'https://wpmudev.com/translate/projects/wp-smushit/' : 'https://translate.wordpress.org/projects/wp-plugins/wp-smushit';
 | 
						||
 | 
						||
		$site_locale = get_locale();
 | 
						||
 | 
						||
		if ( 'en' === $site_locale || 'en_US' === $site_locale ) {
 | 
						||
			$site_language = 'English';
 | 
						||
		} else {
 | 
						||
			require_once ABSPATH . 'wp-admin/includes/translation-install.php';
 | 
						||
			$translations  = wp_get_available_translations();
 | 
						||
			$site_language = isset( $translations[ $site_locale ] ) ? $translations[ $site_locale ]['native_name'] : __( 'Error detecting language', 'wp-smushit' );
 | 
						||
		}
 | 
						||
 | 
						||
		$this->view(
 | 
						||
			'settings/general-meta-box',
 | 
						||
			array(
 | 
						||
				'detection'        => $this->settings->get( 'detection' ),
 | 
						||
				'site_language'    => $site_language,
 | 
						||
				'tracking'         => (bool) $this->settings->get( 'usage' ),
 | 
						||
				'translation_link' => $link,
 | 
						||
			)
 | 
						||
		);
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Permissions meta box.
 | 
						||
	 */
 | 
						||
	public function permissions_meta_box() {
 | 
						||
		$this->view(
 | 
						||
			'settings/permissions-meta-box',
 | 
						||
			array(
 | 
						||
				'networkwide' => get_site_option( 'wp-smush-networkwide' ),
 | 
						||
			)
 | 
						||
		);
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Data & Settings meta box.
 | 
						||
	 */
 | 
						||
	public function data_meta_box() {
 | 
						||
		$this->view(
 | 
						||
			'settings/data-meta-box',
 | 
						||
			array(
 | 
						||
				'keep_data' => (bool) $this->settings->get( 'keep_data' ),
 | 
						||
			)
 | 
						||
		);
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Accessibility meta box.
 | 
						||
	 */
 | 
						||
	public function accessibility_meta_box() {
 | 
						||
		$this->view(
 | 
						||
			'settings/accessibility-meta-box',
 | 
						||
			array(
 | 
						||
				'accessible_colors' => (bool) $this->settings->get( 'accessible_colors' ),
 | 
						||
			)
 | 
						||
		);
 | 
						||
	}
 | 
						||
}
 |