コード例 #1
0
ファイル: polldaddy.php プロジェクト: laurelfulford/jetpack
        /**
         * Shortcode for polldadddy
         * [polldaddy poll|survey|rating="123456"]
         *
         * */
        function polldaddy_shortcode($atts)
        {
            global $post;
            global $content_width;
            extract(shortcode_atts(array('survey' => null, 'link_text' => 'Take Our Survey', 'poll' => 'empty', 'rating' => 'empty', 'unique_id' => null, 'item_id' => null, 'title' => null, 'permalink' => null, 'cb' => 0, 'type' => 'button', 'body' => '', 'button' => '', 'text_color' => '000000', 'back_color' => 'FFFFFF', 'align' => '', 'style' => '', 'width' => $content_width, 'height' => floor($content_width * 3 / 4), 'delay' => 100, 'visit' => 'single', 'domain' => '', 'id' => ''), $atts, 'polldaddy'));
            if (!is_array($atts)) {
                return '<!-- Polldaddy shortcode passed invalid attributes -->';
            }
            $inline = !in_the_loop();
            $no_script = false;
            $infinite_scroll = false;
            if (is_home() && current_theme_supports('infinite-scroll')) {
                $infinite_scroll = true;
            }
            if (defined('PADPRESS_LOADED')) {
                $inline = true;
            }
            if (function_exists('get_option') && get_option('polldaddy_load_poll_inline')) {
                $inline = true;
            }
            if (is_feed() || defined('DOING_AJAX') && !$infinite_scroll) {
                $no_script = false;
            }
            self::$add_script = $infinite_scroll;
            if (intval($rating) > 0 && !$no_script) {
                //rating embed
                if (empty($unique_id)) {
                    $unique_id = is_page() ? 'wp-page-' . $post->ID : 'wp-post-' . $post->ID;
                }
                if (empty($item_id)) {
                    $item_id = is_page() ? '_page_' . $post->ID : '_post_' . $post->ID;
                }
                if (empty($title)) {
                    /** This filter is documented in core/src/wp-includes/general-template.php */
                    $title = apply_filters('wp_title', $post->post_title, '', '');
                }
                if (empty($permalink)) {
                    $permalink = get_permalink($post->ID);
                }
                $rating = intval($rating);
                $unique_id = preg_replace('/[^\\-_a-z0-9]/i', '', wp_strip_all_tags($unique_id));
                $item_id = wp_strip_all_tags($item_id);
                $item_id = preg_replace('/[^_a-z0-9]/i', '', $item_id);
                $settings = json_encode(array('id' => $rating, 'unique_id' => $unique_id, 'title' => rawurlencode(trim($title)), 'permalink' => esc_url($permalink), 'item_id' => $item_id));
                $item_id = esc_js($item_id);
                if (is_ssl()) {
                    $rating_js_file = "https://polldaddy.com/js/rating/rating.js";
                } else {
                    $rating_js_file = "http://i0.poll.fm/js/rating/rating.js";
                }
                if ($inline) {
                    return <<<SCRIPT
<div class="pd-rating" id="pd_rating_holder_{$rating}{$item_id}"></div>
<script type="text/javascript" charset="UTF-8"><!--//--><![CDATA[//><!--
PDRTJS_settings_{$rating}{$item_id}={$settings};
//--><!]]></script>
<script type="text/javascript" charset="UTF-8" src="{$rating_js_file}"></script>
SCRIPT;
                } else {
                    if (false === self::$scripts) {
                        self::$scripts = array();
                    }
                    $data = array('id' => $rating, 'item_id' => $item_id, 'settings' => $settings);
                    self::$scripts['rating'][] = $data;
                    add_action('wp_footer', array($this, 'generate_scripts'));
                    $data = esc_attr(json_encode($data));
                    if ($infinite_scroll) {
                        return <<<CONTAINER
<div class="pd-rating" id="pd_rating_holder_{$rating}{$item_id}" data-settings="{$data}"></div>
CONTAINER;
                    } else {
                        return <<<CONTAINER
<div class="pd-rating" id="pd_rating_holder_{$rating}{$item_id}"></div>
CONTAINER;
                    }
                }
            } elseif (intval($poll) > 0) {
                //poll embed
                $poll = intval($poll);
                $poll_url = sprintf('http://polldaddy.com/poll/%d', $poll);
                $poll_js = sprintf('%s.polldaddy.com/p/%d.js', is_ssl() ? 'https://secure' : 'http://static', $poll);
                $poll_link = sprintf('<a href="%s" target="_blank">Take Our Poll</a>', $poll_url);
                if ($no_script) {
                    return $poll_link;
                } else {
                    if ($type == 'slider' && !$inline) {
                        if (!in_array($visit, array('single', 'multiple'))) {
                            $visit = 'single';
                        }
                        $settings = array('type' => 'slider', 'embed' => 'poll', 'delay' => intval($delay), 'visit' => $visit, 'id' => intval($poll));
                        return $this->get_async_code($settings, $poll_link);
                    } else {
                        $cb = $cb == 1 ? '?cb=' . mktime() : false;
                        $margins = '';
                        $float = '';
                        if (in_array($align, array('right', 'left'))) {
                            $float = sprintf('float: %s;', $align);
                            if ($align == 'left') {
                                $margins = 'margin: 0px 10px 0px 0px;';
                            } elseif ($align == 'right') {
                                $margins = 'margin: 0px 0px 0px 10px';
                            }
                        }
                        // Force the normal style embed on single posts/pages otherwise it's not rendered on infinite scroll themed blogs ('infinite_scroll_render' isn't fired)
                        if (is_singular()) {
                            $inline = true;
                        }
                        if (false === $cb && !$inline) {
                            if (false === self::$scripts) {
                                self::$scripts = array();
                            }
                            $data = array('url' => $poll_js);
                            self::$scripts['poll'][intval($poll)] = $data;
                            add_action('wp_footer', array($this, 'generate_scripts'));
                            $data = esc_attr(json_encode($data));
                            $script_url = esc_url_raw(plugins_url('js/polldaddy-shortcode.js', __FILE__));
                            $str = <<<CONTAINER
<a name="pd_a_{$poll}"></a>
<div class="PDS_Poll" id="PDI_container{$poll}" data-settings="{$data}" style="display:inline-block;{$float}{$margins}"></div>
<div id="PD_superContainer"></div>
<noscript>{$poll_link}</noscript>
CONTAINER;
                            $loader = <<<SCRIPT
( function( d, c, j ) {
\tif ( ! d.getElementById( j ) ) {
\t\tvar pd = d.createElement( c ), s;
\t\tpd.id = j;
\t\tpd.src = '{$script_url}';
\t\ts = d.getElementsByTagName( c )[0];
\t\ts.parentNode.insertBefore( pd, s );
\t} else if ( typeof jQuery !== 'undefined' ) {
\t\tjQuery( d.body ).trigger( 'pd-script-load' );
\t}
} ( document, 'script', 'pd-polldaddy-loader' ) );
SCRIPT;
                            $loader = $this->compress_it($loader);
                            $loader = "<script type='text/javascript'>\n" . $loader . "\n</script>";
                            return $str . $loader;
                        } else {
                            if ($inline) {
                                $cb = '';
                            }
                            return <<<CONTAINER
<a id="pd_a_{$poll}"></a>
<div class="PDS_Poll" id="PDI_container{$poll}" style="display:inline-block;{$float}{$margins}"></div>
<div id="PD_superContainer"></div>
<script type="text/javascript" charset="UTF-8" src="{$poll_js}{$cb}"></script>
<noscript>{$poll_link}</noscript>
CONTAINER;
                        }
                    }
                }
            } elseif (!empty($survey)) {
                //survey embed
                if (in_array($type, array('iframe', 'button', 'banner', 'slider'))) {
                    if (empty($title)) {
                        $title = __('Take Our Survey', 'jetpack');
                        if (!empty($link_text)) {
                            $title = $link_text;
                        }
                    }
                    if ($type == 'banner' || $type == 'slider') {
                        $inline = false;
                    }
                    $survey = preg_replace('/[^a-f0-9]/i', '', $survey);
                    $survey_url = esc_url("http://polldaddy.com/s/{$survey}");
                    $survey_link = sprintf('<a href="%s" target="_blank">%s</a>', $survey_url, esc_html($title));
                    $settings = array();
                    // Do we want a full embed code or a link?
                    if ($no_script || $inline || $infinite_scroll) {
                        return $survey_link;
                    }
                    if ($type == 'iframe') {
                        if ($height != 'auto') {
                            if (isset($content_width) && is_numeric($width) && $width > $content_width) {
                                $width = $content_width;
                            }
                            if (!$width) {
                                $width = '100%';
                            } else {
                                $width = (int) $width;
                            }
                            if (!$height) {
                                $height = '600';
                            } else {
                                $height = (int) $height;
                            }
                            return <<<CONTAINER
<iframe src="{$survey_url}?iframe=1" frameborder="0" width="{$width}" height="{$height}" scrolling="auto" allowtransparency="true" marginheight="0" marginwidth="0">{$survey_link}</iframe>
CONTAINER;
                        } elseif (!empty($domain) && !empty($id)) {
                            $domain = preg_replace('/[^a-z0-9\\-]/i', '', $domain);
                            $id = preg_replace('/[\\/\\?&\\{\\}]/', '', $id);
                            $auto_src = esc_url("http://{$domain}.polldaddy.com/s/{$id}");
                            $auto_src = parse_url($auto_src);
                            if (!is_array($auto_src) || count($auto_src) == 0) {
                                return '<!-- no polldaddy output -->';
                            }
                            if (!isset($auto_src['host']) || !isset($auto_src['path'])) {
                                return '<!-- no polldaddy output -->';
                            }
                            $domain = $auto_src['host'] . '/s/';
                            $id = str_ireplace('/s/', '', $auto_src['path']);
                            $settings = array('type' => $type, 'auto' => true, 'domain' => $domain, 'id' => $id);
                        }
                    } else {
                        $text_color = preg_replace('/[^a-f0-9]/i', '', $text_color);
                        $back_color = preg_replace('/[^a-f0-9]/i', '', $back_color);
                        if (!in_array($align, array('right', 'left', 'top-left', 'top-right', 'middle-left', 'middle-right', 'bottom-left', 'bottom-right'))) {
                            $align = '';
                        }
                        if (!in_array($style, array('inline', 'side', 'corner', 'rounded', 'square'))) {
                            $style = '';
                        }
                        $title = wp_strip_all_tags($title);
                        $body = wp_strip_all_tags($body);
                        $button = wp_strip_all_tags($button);
                        $settings = array_filter(array('title' => $title, 'type' => $type, 'body' => $body, 'button' => $button, 'text_color' => $text_color, 'back_color' => $back_color, 'align' => $align, 'style' => $style, 'id' => $survey));
                    }
                    if (empty($settings)) {
                        return '<!-- no polldaddy output -->';
                    }
                    return $this->get_async_code($settings, $survey_link);
                }
            } else {
                return '<!-- no polldaddy output -->';
            }
        }
コード例 #2
0
        /**
         * Shortcode for polldadddy
         * [polldaddy poll|survey|rating="123456"]
         *
         * */
        function polldaddy_shortcode($atts)
        {
            global $post;
            global $content_width;
            extract(shortcode_atts(array('survey' => null, 'link_text' => 'Take Our Survey', 'poll' => 'empty', 'rating' => 'empty', 'unique_id' => null, 'item_id' => null, 'title' => null, 'permalink' => null, 'cb' => 0, 'type' => 'button', 'body' => '', 'button' => '', 'text_color' => '000000', 'back_color' => 'FFFFFF', 'align' => '', 'style' => '', 'width' => $content_width, 'height' => floor($content_width * 3 / 4), 'delay' => 100, 'visit' => 'single', 'domain' => '', 'id' => ''), $atts, 'polldaddy'));
            if (!is_array($atts)) {
                return '<!-- Polldaddy shortcode passed invalid attributes -->';
            }
            $inline = false;
            $no_script = false;
            $infinite_scroll = false;
            if (is_home() && current_theme_supports('infinite-scroll')) {
                $infinite_scroll = true;
            }
            if (defined('PADPRESS_LOADED')) {
                $inline = true;
            }
            if (function_exists('get_option') && get_option('polldaddy_load_poll_inline')) {
                $inline = true;
            }
            if (is_feed() || defined('DOING_AJAX') && !$infinite_scroll) {
                $no_script = false;
            }
            self::$add_script = $infinite_scroll;
            if (intval($rating) > 0 && !$no_script) {
                //rating embed
                if (empty($unique_id)) {
                    $unique_id = is_page() ? 'wp-page-' . $post->ID : 'wp-post-' . $post->ID;
                }
                if (empty($item_id)) {
                    $item_id = is_page() ? '_page_' . $post->ID : '_post_' . $post->ID;
                }
                if (empty($title)) {
                    $title = apply_filters('wp_title', $post->post_title, '', '');
                }
                if (empty($permalink)) {
                    $permalink = get_permalink($post->ID);
                }
                $rating = intval($rating);
                $unique_id = wp_strip_all_tags($unique_id);
                $item_id = wp_strip_all_tags($item_id);
                $item_id = preg_replace('/[^_a-z0-9]/i', '', $item_id);
                $settings = json_encode(array('id' => $rating, 'unique_id' => $unique_id, 'title' => rawurlencode(trim($title)), 'permalink' => esc_url($permalink), 'item_id' => $item_id));
                $item_id = esc_js($item_id);
                if ($inline) {
                    return <<<SCRIPT
<div class="pd-rating" id="pd_rating_holder_{$rating}{$item_id}"></div>
<script type="text/javascript" charset="UTF-8"><!--//--><![CDATA[//><!--
PDRTJS_settings_{$rating}{$item_id}={$settings};
//--><!]]></script>
<script type="text/javascript" charset="UTF-8" src="http://i.polldaddy.com/ratings/rating.js"></script>
SCRIPT;
                } else {
                    if (self::$scripts === false) {
                        self::$scripts = array();
                    }
                    $data = array('id' => $rating, 'item_id' => $item_id, 'settings' => $settings);
                    self::$scripts['rating'][] = $data;
                    add_action('wp_footer', array($this, 'generate_scripts'));
                    $data = esc_attr(json_encode($data));
                    if ($infinite_scroll) {
                        return <<<CONTAINER
<div class="pd-rating" id="pd_rating_holder_{$rating}{$item_id}" data-settings="{$data}"></div>
CONTAINER;
                    } else {
                        return <<<CONTAINER
<div class="pd-rating" id="pd_rating_holder_{$rating}{$item_id}"></div>
CONTAINER;
                    }
                }
            } elseif (intval($poll) > 0) {
                //poll embed
                $poll = intval($poll);
                $poll_url = sprintf('http://polldaddy.com/poll/%d', $poll);
                $poll_js = sprintf('%s.polldaddy.com/p/%d.js', is_ssl() ? 'https://secure' : 'http://static', $poll);
                $poll_link = sprintf('<a href="%s">Take Our Poll</a>', $poll_url);
                if ($no_script) {
                    return $poll_link;
                } else {
                    if ($type == 'slider' && !$inline) {
                        if (!in_array($visit, array('single', 'multiple'))) {
                            $visit = 'single';
                        }
                        $settings = json_encode(array('type' => 'slider', 'embed' => 'poll', 'delay' => intval($delay), 'visit' => $visit, 'id' => intval($poll)));
                        return <<<SCRIPT
<script type="text/javascript" charset="UTF-8" src="http://i0.poll.fm/survey.js"></script>
<script type="text/javascript" charset="UTF-8"><!--//--><![CDATA[//><!--
polldaddy.add( {$settings} );
//--><!]]></script>
<noscript>{$poll_link}</noscript>
SCRIPT;
                    } else {
                        $cb = $cb == 1 ? '?cb=' . mktime() : false;
                        $margins = '';
                        $float = '';
                        if (in_array($align, array('right', 'left'))) {
                            $float = sprintf('float: %s;', $align);
                            if ($align == 'left') {
                                $margins = 'margin: 0px 10px 0px 0px;';
                            } elseif ($align == 'right') {
                                $margins = 'margin: 0px 0px 0px 10px';
                            }
                        }
                        if ($cb === false && !$inline) {
                            if (self::$scripts === false) {
                                self::$scripts = array();
                            }
                            $data = array('url' => $poll_js);
                            self::$scripts['poll'][] = $data;
                            add_action('wp_footer', array($this, 'generate_scripts'));
                            $data = esc_attr(json_encode($data));
                            return <<<CONTAINER
<a id="pd_a_{$poll}"></a>
<div class="PDS_Poll" id="PDI_container{$poll}" data-settings="{$data}" style="display:inline-block;{$float}{$margins}"></div>
<div id="PD_superContainer"></div>
<noscript>{$poll_link}</noscript>
CONTAINER;
                        } else {
                            if ($inline) {
                                $cb = '';
                            }
                            return <<<CONTAINER
<a id="pd_a_{$poll}"></a>
<div class="PDS_Poll" id="PDI_container{$poll}" style="display:inline-block;{$float}{$margins}"></div>
<div id="PD_superContainer"></div>
<script type="text/javascript" charset="UTF-8" src="{$poll_js}{$cb}"></script>
<noscript>{$poll_link}</noscript>
CONTAINER;
                        }
                    }
                }
            } elseif (!empty($survey)) {
                //survey embed
                if (in_array($type, array('iframe', 'button', 'banner', 'slider'))) {
                    if (empty($title)) {
                        $title = 'Take Our Survey';
                        if (!empty($link_text)) {
                            $title = $link_text;
                        }
                    }
                    $survey = preg_replace('/[^a-f0-9]/i', '', $survey);
                    $survey_url = esc_url("http://polldaddy.com/s/{$survey}");
                    $survey_link = sprintf('<a href="%s">%s</a>', $survey_url, esc_html($title));
                    if ($no_script || $inline || $infinite_scroll) {
                        return $survey_link;
                    }
                    if ($type == 'iframe') {
                        if ($height != 'auto') {
                            if (isset($content_width) && is_numeric($width) && $width > $content_width) {
                                $width = $content_width;
                            }
                            if (!$width) {
                                $width = '100%';
                            } else {
                                $width = (int) $width;
                            }
                            if (!$height) {
                                $height = '600';
                            } else {
                                $height = (int) $height;
                            }
                            return <<<CONTAINER
<iframe src="{$survey_url}?iframe=1" frameborder="0" width="{$width}" height="{$height}" scrolling="auto" allowtransparency="true" marginheight="0" marginwidth="0">{$survey_link}</iframe>
CONTAINER;
                        } elseif (!empty($domain) && !empty($id)) {
                            $auto_src = esc_url("http://{$domain}.polldaddy.com/s/{$id}");
                            $auto_src = parse_url($auto_src);
                            if (!is_array($auto_src) || count($auto_src) == 0) {
                                return '<!-- no polldaddy output -->';
                            }
                            if (!isset($auto_src['host']) || !isset($auto_src['path'])) {
                                return '<!-- no polldaddy output -->';
                            }
                            $domain = $auto_src['host'] . '/s/';
                            $id = str_ireplace('/s/', '', $auto_src['path']);
                            $settings = json_encode(array('type' => $type, 'auto' => true, 'domain' => $domain, 'id' => $id));
                        }
                    } else {
                        $text_color = preg_replace('/[^a-f0-9]/i', '', $text_color);
                        $back_color = preg_replace('/[^a-f0-9]/i', '', $back_color);
                        if (!in_array($align, array('right', 'left', 'top-left', 'top-right', 'middle-left', 'middle-right', 'bottom-left', 'bottom-right'))) {
                            $align = '';
                        }
                        if (!in_array($style, array('inline', 'side', 'corner', 'rounded', 'square'))) {
                            $style = '';
                        }
                        $title = wp_strip_all_tags($title);
                        $body = wp_strip_all_tags($body);
                        $button = wp_strip_all_tags($button);
                        $settings = json_encode(array_filter(array('title' => $title, 'type' => $type, 'body' => $body, 'button' => $button, 'text_color' => $text_color, 'back_color' => $back_color, 'align' => $align, 'style' => $style, 'id' => $survey)));
                    }
                    return <<<CONTAINER
<script type="text/javascript" charset="UTF-8" src="http://i0.poll.fm/survey.js"></script>
<script type="text/javascript" charset="UTF-8"><!--//--><![CDATA[//><!--
polldaddy.add( {$settings} );
//--><!]]></script>
<noscript>{$survey_link}</noscript>
CONTAINER;
                }
            } else {
                return '<!-- no polldaddy output -->';
            }
        }