existing_options = $options; else $this->existing_options = array(); } /** * Reference the social plugin by name. * * @since 1.1 * * @return string social plugin name */ public static function social_plugin_name() { return __( 'Send Button', 'facebook' ); } /** * Navigate to the settings page through the Facebook top-level menu item. * * @since 1.1 * * @uses add_submenu_page() * @param string $parent_slug Facebook top-level menu item slug * @return string submenu hook suffix */ public static function add_submenu_item( $parent_slug ) { $send_button_settings = new Facebook_Send_Button_Settings(); $hook_suffix = add_submenu_page( $parent_slug, self::social_plugin_name(), self::social_plugin_name(), 'manage_options', self::PAGE_SLUG, array( &$send_button_settings, 'settings_page' ) ); if ( $hook_suffix ) { $send_button_settings->hook_suffix = $hook_suffix; register_setting( $hook_suffix, self::OPTION_NAME, array( 'Facebook_Send_Button_Settings', 'sanitize_options' ) ); add_action( 'load-' . $hook_suffix, array( &$send_button_settings, 'onload' ) ); } return $hook_suffix; } /** * Load stored options and scripts on settings page view. * * @since 1.1 */ public function onload() { $options = get_option( self::OPTION_NAME ); if ( ! is_array( $options ) ) $options = array(); $this->existing_options = $options; $this->settings_api_init(); } /** * Load the page. * * @since 1.1 * * @return void */ public function settings_page() { if ( ! isset( $this->hook_suffix ) ) return; Facebook_Settings::settings_page_template( $this->hook_suffix, sprintf( __( '%s Settings', 'facebook' ), self::social_plugin_name() ) ); } /** * Hook into the settings API. * * @since 1.1 * * @uses add_settings_section() * @uses add_settings_field() * @return void */ private function settings_api_init() { if ( ! isset( $this->hook_suffix ) ) return; $section = 'facebook-send-button'; add_settings_section( $section, '', // blank title for main page section array( &$this, 'section_header' ), $this->hook_suffix ); // when, where add_settings_field( 'facebook-send-show-on', _x( 'Show on', 'Display the social plugin in specific areas of a website', 'facebook' ), array( &$this, 'display_show_on' ), $this->hook_suffix, $section ); add_settings_field( 'facebook-send-position', _x( 'Position', 'Desired position of a Facebook social plugin relative to main post content.', 'facebook' ), array( &$this, 'display_position' ), $this->hook_suffix, $section, array( 'label_for' => 'facebook-send-position' ) ); // send button option add_settings_field( 'facebook-send-font', __( 'Font', 'facebook' ), array( &$this, 'display_font' ), $this->hook_suffix, $section, array( 'label_for' => 'facebook-send-position' ) ); add_settings_field( 'facebook-send-colorscheme', __( 'Color scheme', 'facebook' ), array( &$this, 'display_colorscheme' ), $this->hook_suffix, $section ); } /** * Introduce publishers to the Send Button social plugin. * * @since 1.1 * * @return void */ public function section_header() { echo '
'; echo esc_html( __( 'Help site visitors send your URL in a message to any email address, a message to his or her Facebook friends, or a post to a Facebook group.', 'facebook' ) ); echo ' ' . ' ' . esc_html( __( 'Read more...', 'facebook' ) ) . ''; echo '
'; } /** * Where should the button appear? * * @since 1.1 * * @param array $extra_attributes custom form attributes * @return void */ public function display_show_on( $extra_attributes = array() ) { $key = 'show_on'; extract( self::parse_form_field_attributes( $extra_attributes, array( 'id' => 'facebook-send-show-on', 'class' => '', 'name' => self::OPTION_NAME . '[' . $key . ']' ) ) ); echo ''; echo '' . esc_html( self::show_on_description( __( 'Send Button', 'facebook' ) ) ) . '
'; } /** * Where would you like it? * * @since 1.1 * @param array $extra_attributes custom form attributes */ public function display_position( $extra_attributes = array() ) { $key = 'position'; extract( self::parse_form_field_attributes( $extra_attributes, array( 'id' => 'facebook-send-' . $key, 'class' => '', 'name' => self::OPTION_NAME . '[' . $key . ']' ) ) ); if ( isset( $this->existing_options[$key] ) && in_array( $this->existing_options[$key], self::$position_choices, true ) ) $existing_value = $this->existing_options[$key]; else $existing_value = 'both'; echo ''; } /** * Choose a custom font. * * @since 1.1 * * @param array $extra_attributes custom form attributes * @return void */ public function display_font( $extra_attributes = array() ) { $key = 'font'; extract( self::parse_form_field_attributes( $extra_attributes, array( 'id' => 'facebook-send-' . $key, 'class' => '', 'name' => self::OPTION_NAME . '[' . $key . ']' ) ) ); echo ''; } /** * Customize the color scheme. * * @since 1.1 * * @param array $extra_attributes custom form attributes * @return void */ public function display_colorscheme( $extra_attributes = array() ) { $key = 'colorscheme'; extract( self::parse_form_field_attributes( $extra_attributes, array( 'id' => 'facebook-send-' . $key, 'class' => '', 'name' => self::OPTION_NAME . '[' . $key . ']' ) ) ); echo ''; } /** * Sanitize Send Button settings before they are saved to the database * * @since 1.1 * * @param array $options Send Button options * @return array clean option sets. note: we remove Send Button social plugin default options, storing only custom settings (e.g. dark color scheme stored, light is default and therefore not stored) */ public static function sanitize_options( $options ) { if ( ! is_array( $options ) || empty( $options ) ) return array(); if ( ! class_exists( 'Facebook_Send_Button' ) ) require_once( dirname( dirname(__FILE__) ) . '/social-plugins/class-facebook-send-button.php' ); // Handle display preferences first $clean_options = parent::sanitize_options( $options ); if ( isset( $clean_options['show_on'] ) ) { self::update_display_conditionals( 'send', $clean_options['show_on'], self::get_show_on_choices( 'all' ) ); unset( $clean_options['show_on'] ); } unset( $options['show_on'] ); $send_button = Facebook_Send_Button::fromArray( $options ); $send_button_options = $send_button->toHTMLDataArray(); if ( ! empty( $send_button_options ) ) return array_merge( $clean_options, $send_button_options ); return $clean_options; } } ?>