wpml-language-switcher-settings.class.php 4.43 KB
Newer Older
John Punzalan's avatar
John Punzalan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
<?php

class WPML_Setup_Language_Switcher_Settings {

	protected $ls_options;
	protected $ls_sidebars;

	function __construct($ls_sidebars, $ls_options) {
		$this->ls_sidebars = $ls_sidebars;
		$this->ls_options = $ls_options;
	}

	public function set_ls_sidebar( ) {
		$counter                  = $this->get_widget_index ();
		$language_switcher_prefix = 'icl_lang_sel_widget-';
		$active_widgets           = get_option ( 'sidebars_widgets' );
		foreach ( $this->ls_sidebars as $target_sidebar_id => $add_widget ) {
			$widget_exists = false;
			if ( isset( $active_widgets[ $target_sidebar_id ] ) ) {
				$active_sidebar_widgets = $active_widgets[ $target_sidebar_id ];
				$widget_exists          = $this->widget_exists( $language_switcher_prefix, $active_sidebar_widgets );
			}
			if ( $add_widget && !$widget_exists ) {
				$active_widgets = $this->add_to_sidebar ( $active_widgets,
				                                          $target_sidebar_id,
				                                          $language_switcher_prefix,
				                                          $counter );
				$counter = $this->update_widget_options ( $counter );
			} elseif ( !$add_widget && $widget_exists && isset($active_sidebar_widgets) ) {
				$active_widgets = $this->remove_widget ( $active_sidebar_widgets,
				                                         $language_switcher_prefix,
				                                         $active_widgets,
				                                         $target_sidebar_id );
			}
		}

		wp_set_sidebars_widgets ( $active_widgets );
	}

	public function set_ls_options() {

		$ls_opt_keys = array( 'icl_lso_link_empty', 'icl_lso_flags', 'icl_lso_native_lang', 'icl_lso_display_lang' );

		foreach ( $ls_opt_keys as $option_key ) {
			if ( !isset( $this->ls_options[ $option_key ] ) || false === (bool) $this->ls_options[ $option_key ] ) {
				$this->ls_options[ $option_key ] = 0;
			}

			icl_set_setting ( $option_key, $this->ls_options[ $option_key ], true );
		}
	}

	/**
	 * @return int
	 */
	private function get_widget_index(){
		$widget_icl_lang_sel_widget = get_option ( 'widget_icl_lang_sel_widget' );
		$counter                    = is_array ( $widget_icl_lang_sel_widget )
			? max ( array_keys ( $widget_icl_lang_sel_widget ) ) : 0;
		if ( !is_numeric ( $counter ) || $counter <= 0 ) {
			$counter = 1;
		}

		return $counter;
	}

	/**
	 * @param int $counter
	 * @return int
	 */
	private function update_widget_options( $counter ) {
		$language_switcher_content             = get_option ( 'widget_icl_lang_sel_widget' );
		$language_switcher_content[ $counter ] = array( 'title_show' => 0 );
		if ( !array_key_exists ( '_multiwidget', $language_switcher_content ) ) {
			$language_switcher_content[ '_multiwidget' ] = 1;
		}
		update_option ( 'widget_icl_lang_sel_widget', $language_switcher_content );

		return $counter + 1;
	}

	/**
	 * @param $prefix
	 * @param $active_sidebar_widgets
	 *
	 * @return bool
	 */
	private function widget_exists( $prefix, $active_sidebar_widgets ) {
		$widget_exists = false;
		if ( $active_sidebar_widgets ) {
			foreach ( $active_sidebar_widgets as $index => $active_sidebar_widget ) {
				if ( strpos( $active_sidebar_widget, $prefix ) !== false ) {
					$widget_exists = true;
					break;
				}
			}
		}

		return $widget_exists;
	}

	/**
	 * @param $active_sidebar_widgets
	 * @param $language_switcher_prefix
	 * @param $active_widgets
	 * @param $target_sidebar_id
	 * @return bool
	 */
	private function remove_widget( $active_sidebar_widgets, $language_switcher_prefix, $active_widgets, $target_sidebar_id ) {
		foreach ( $active_sidebar_widgets as $index => $active_sidebar_widget ) {
			if ( strpos ( $active_sidebar_widget, $language_switcher_prefix ) !== false ) {
				unset( $active_widgets[ $target_sidebar_id ][ $index ] );
			}
		}

		return $active_widgets;
	}

	/**
	 * @param $active_widgets
	 * @param $target_sidebar_id
	 * @param $language_switcher_prefix
	 * @param $counter
	 * @return array
	 */
	private function add_to_sidebar( $active_widgets, $target_sidebar_id, $language_switcher_prefix, $counter ) {
		if ( isset( $active_widgets[ $target_sidebar_id ] ) ) {
			$active_sidebar_widgets = $active_widgets[ $target_sidebar_id ];
			array_unshift ( $active_sidebar_widgets, $language_switcher_prefix . $counter );
		} else {
			$active_sidebar_widgets    = array();
			$active_sidebar_widgets[ ] = $language_switcher_prefix . $counter;
		}

		$active_widgets[ $target_sidebar_id ] = $active_sidebar_widgets;
		return $active_widgets;
	}
}