_x( 'Highlight your Facebook Page content.', 'Improve the marketing of Facebook content by including on your site.', 'facebook' ) . ' ' . __( 'Encourage visitors to like your Facebook page.', 'facebook' ) ) // Args ); } /** * Test if a provided string is a URL to a Facebook page * * Sanitize the URL if valid * * @since 1.1.11 * * @global wpdb $wpdb WordPress database class. sanitize FQL values. * @global \Facebook_Loader $facebook_loader access Facebook application credentials * @param string $url absolute URL * @return string Facebook Page URL or empty string if the passed URL does not seem to be a Facebook Page URL */ public static function sanitize_facebook_page_url( $url ) { global $wpdb, $facebook_loader; if ( ! is_string( $url ) || ! $url ) return ''; // check for basic URL validity $url = esc_url_raw( $url, array( 'http', 'https' ) ); if ( ! $url ) return ''; // is the provided URL a Facebook URL? try { $url_parts = parse_url( $url ); } catch ( Exception $e ) { return ''; } // does the provided string look like a Facebook URL? if ( ! ( is_array( $url_parts ) && isset( $url_parts['host'] ) && $url_parts['host'] === 'www.facebook.com' && ! empty( $url_parts['path'] ) ) ) return ''; // reject a Like Box URL pointing to the Facebook homepage $url_parts['path'] = ltrim( $url_parts['path'], '\/' ); if ( ! $url_parts['path'] ) return ''; // attempt to normalize the URL through a Facebook request if an access token is present if ( isset( $facebook_loader ) && $facebook_loader->app_access_token_exists() ) { if ( ! class_exists( 'Facebook_WP_Extend' ) ) require_once( $facebook_loader->plugin_directory . 'includes/facebook-php-sdk/class-facebook-wp.php' ); // page without a username if ( strlen( $url_parts['path'] ) > 7 && substr_compare( $url_parts['path'], 'pages/', 0, 6 ) === 0 ) { $page_id = ltrim( substr( $url_parts['path'], strrpos( $url_parts['path'], '/' ) ), '\/' ); if ( ! ( is_string( $page_id ) && $page_id && ctype_digit( $page_id ) ) ) return ''; $where = $wpdb->prepare( 'page_id=%s', $page_id ); unset( $page_id ); } else { // treat the link as a username $where = $wpdb->prepare( 'username=%s', $url_parts['path'] ); } $where .= ' AND is_published=1'; try { $page_info = Facebook_WP_Extend::graph_api_with_app_access_token( '/fql', 'GET', array( 'q' => 'SELECT page_url FROM page WHERE ' . $where ) ); } catch ( WP_FacebookApiException $e ) { break; } unset( $where ); if ( isset( $page_info['data'][0]['page_url'] ) ) return $page_info['data'][0]['page_url']; unset( $page_info ); } return 'https://www.facebook.com/' . $url_parts['path']; } /** * Front-end display of widget. * * @see WP_Widget::widget() * * @since 1.0 * * @param array $args Widget arguments. * @param array $instance Saved values from database. * @return void */ public function widget( $args, $instance ) { // no Facebook Page target specified. fail early if ( empty( $instance['href'] ) ) return; extract( $args ); if ( ! isset( $instance['ref'] ) ) $instance['ref'] = 'widget'; if ( ! class_exists( 'Facebook_Like_Box' ) ) require_once( dirname( dirname(__FILE__) ) . '/class-facebook-like-box.php' ); $box = Facebook_Like_Box::fromArray( $instance ); if ( ! $box ) return; $box_html = $box->asHTML( array( 'class' => array( 'fb-social-plugin' ) ) ); if ( ! ( is_string( $box_html ) && $box_html ) ) return; echo $before_widget; $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); if ( $title ) echo $before_title . $title . $after_title; echo $box_html; echo $after_widget; } /** * Sanitize widget form values as they are saved. * * @see WP_Widget::update() * * @since 1.0 * * @param array $new_instance Values just sent to be saved. * @param array $old_instance Previously saved values from database. * * @return array Updated safe values to be saved. */ public function update( $new_instance, $old_instance ) { $instance = array(); $new_instance = (array) $new_instance; if ( ! empty( $new_instance['title'] ) ) $instance['title'] = strip_tags( $new_instance['title'] ); // set the booleans foreach ( array( 'stream', 'header', 'show_border', 'force_wall', 'show_faces' ) as $bool_option ) { if ( isset( $new_instance[ $bool_option ] ) ) $new_instance[ $bool_option ] = true; else $new_instance[ $bool_option ] = false; } if ( isset( $new_instance['href'] ) ) { // sanitize if href has changed if ( ! isset( $old_instance['href'] ) || $old_instance['href'] !== $new_instance['href'] ) $new_instance['href'] = self::sanitize_facebook_page_url( $new_instance['href'] ); } foreach( array( 'width', 'height' ) as $option ) { if ( isset( $new_instance[ $option ] ) ) $new_instance[ $option ] = absint( $new_instance[ $option ] ); } if ( ! class_exists( 'Facebook_Like_Box' ) ) require_once( dirname( dirname(__FILE__) ) . '/class-facebook-like-box.php' ); // include values when checkboxes not present $box = Facebook_Like_Box::fromArray( $new_instance ); if ( $box ) { $box_options = $box->toHTMLDataArray(); // convert dashes used to construct data-* attributes into underscore properties foreach( array( 'stream' => 'stream', 'header' => 'header', 'show-border' => 'show_border', 'force-wall' => 'force_wall', 'show-faces' => 'show_faces' ) as $data => $prop ) { if ( ! isset( $box_options[ $data ] ) ) continue; if ( $box_options[ $data ] === 'true' ) $box_options[ $data ] = true; else if ( $box_options[ $data ] === 'false' ) $box_options[ $data ] = false; if ( $data !== $prop ) { $box_options[ $prop ] = $box_options[ $data ]; unset( $box_options[ $data ] ); } } // unsigned ints foreach( array( 'width', 'height' ) as $option ) { if ( isset( $box_options[ $option ] ) ) $box_options[ $option ] = absint( $box_options[ $option ] ); } return array_merge( $instance, $box_options ); } return $instance; } /** * Back-end widget form. * * @see WP_Widget::form() * * @since 1.0 * * @param array $instance Previously saved values from database. * @return void */ public function form( $instance ) { $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'header' => true, 'show_border' => true, 'href' => '', 'stream' => true, 'force_wall' => false, 'show_faces' => true, 'colorscheme' => 'light', 'width' => 300, 'height' => 0 ) ); $this->display_title( $instance['title'] ); $this->display_header( $instance['header'] === true || $instance['header'] === 'true' || $instance['header'] == '1' ); $this->display_show_border( $instance['show_border'] === true || $instance['show_border'] === 'true' || $instance['show_border'] == '1' ); $this->display_href( $instance['href'] ); $this->display_stream( $instance['stream'] === true || $instance['stream'] === 'true' || $instance['stream'] == '1' ); $this->display_force_wall( $instance['force_wall'] === true || $instance['force_wall'] === 'true' || $instance['force_wall'] == '1' ); $this->display_show_faces( $instance['show_faces'] === true || $instance['show_faces'] === 'true' || $instance['show_faces'] == '1' ); $this->display_colorscheme( $instance['colorscheme'] ); $this->display_width( absint( $instance['width'] ) ); $this->display_height( absint( $instance['height'] ) ); } /** * Allow a publisher to customize the title displayed above the widget area * * e.g. Like us! * * @since 1.1.11 * * @param string $existing_value saved title * @return void */ public function display_title( $existing_value = '' ) { echo '
: '; echo '
'; } /** * Show the Facebook header. * * Works best when you do not set your own widget title * * @since 1.1.11 * * @param bool $true_false * @return void */ public function display_header( $true_false ) { echo ''; } /** * Show the social plugin border. * * Works best when you do not set your own widget title * * @since 1.5 * * @param bool $true_false * @return void */ public function display_show_border( $true_false ) { echo '
'; } /** * Set the Like target. * * @since 1.1.11 * * @param string $existing_value stored URL value * @return void */ public function display_href( $existing_value = '' ) { echo '
:
';
echo '' . esc_html( __( 'Must be a Facebook Page URL', 'facebook' ) ) . '
'; } /** * Always display posts from Page's stream, even if page is a Place and checkins available. * * @since 1.1.11 * * @param bool $true_false * @return void */ public function display_force_wall( $true_false ) { echo '
'; } /** * Show faces of viewer's friends. * * @since 1.1.11 * * @param bool $true_false enabled or disabled * @return void */ public function display_show_faces( $true_false ) { echo '
'; } /** * Choose a light or dark color scheme. * * @since 1.1.11 * * @param string $existing_value saved colorscheme value * @return void */ public function display_colorscheme( $existing_value = 'light' ) { if ( ! class_exists( 'Facebook_Social_Plugin_Settings' ) ) require_once( dirname( dirname( dirname( __FILE__ ) ) ) . '/admin/settings-social-plugin.php' ); $color_schemes = Facebook_Social_Plugin_Settings::color_scheme_choices( $this->get_field_name( 'colorscheme' ), $existing_value ); if ( $color_schemes ) echo '
: ' . ' ' . esc_attr( __( 'pixels', 'facebook' ) ) . '
'; } /** * Specify the height of the recommendations box in whole pixels. * * @since 1.1.11 * * @param int $existing_value previously stored value * @return void */ public function display_height( $existing_value = 0 ) { if ( ! class_exists( 'Facebook_Like_Box' ) ) require_once( dirname( dirname(__FILE__) ) . '/class-facebook-like-box.php' ); echo ': ' . '= Facebook_Like_Box::MIN_HEIGHT ) echo ' value="' . $existing_value . '"'; echo ' /> ' . esc_html( __( 'pixels', 'facebook' ) ) . '
'; } } ?>