/** * Renders the markup for the `integrations` field. * * @param array $args The array with configuration of fields. * @since 0.4 */ public static function custom_render_integrations($args) { $name = $args['serialized_with_group'] . '[integrations][]'; $compat_plugins = parent::get_registered_compat('instant_articles_compat_registry_analytics'); if (empty($compat_plugins)) { ?> <em> <?php echo esc_html('No supported analytics plugins are installed nor activated'); ?> </em> <?php return; } asort($compat_plugins); foreach ($compat_plugins as $plugin_id => $plugin_info) { ?> <label> <input type="checkbox" name="<?php echo esc_attr($name); ?> " value="<?php echo esc_attr($plugin_id); ?> " <?php echo checked(in_array($plugin_id, self::$settings['integrations'], true)); ?> > <?php echo esc_html($plugin_info['name']); ?> </label> <br /> <?php } ?> <p class="description">Select which analytics services you'd like to use with Instant Articles.</p> <?php }
/** * Constructor. * * @since 0.4 */ public function __construct() { parent::__construct(self::OPTION_KEY, self::$sections, self::$fields); }
/** * Add all analytic tracking code(s) an InstantArticle. * * @since 0.3 */ public function add_analytics_from_settings() { $settings_analytics = Instant_Articles_Option_Analytics::get_option_decoded(); if (isset($settings_analytics['embed_code_enabled']) && !empty($settings_analytics['embed_code'])) { $document = new DOMDocument(); $fragment = $document->createDocumentFragment(); $valid_html = @$fragment->appendXML($settings_analytics['embed_code']); if ($valid_html) { $this->instant_article->addChild(Analytics::create()->withHTML($fragment)); } } if (!empty($settings_analytics['integrations'])) { $settings_analytics_compats = $settings_analytics['integrations']; $registered_compat_analytics = Instant_Articles_Option::get_registered_compat('instant_articles_compat_registry_analytics'); foreach ($registered_compat_analytics as $compat_id => $compat_info) { if (in_array($compat_id, $settings_analytics_compats, true)) { $document = new DOMDocument(); $fragment = $document->createDocumentFragment(); $valid_html = @$fragment->appendXML($compat_info['payload']); if ($valid_html) { $this->instant_article->addChild(Analytics::create()->withHTML($fragment)); } } } } }
/** * Constructor. * * @since 0.4 */ public function __construct() { parent::__construct(self::OPTION_KEY, self::$sections, self::$fields); wp_localize_script('instant-articles-option-publishing', 'INSTANT_ARTICLES_OPTION_PUBLISHING', array('option_field_id_custom_rules_enabled' => self::OPTION_KEY . '-custom_rules_enabled', 'option_field_id_custom_rules' => self::OPTION_KEY . '-custom_rules')); }
/** * Sanitize and return all the field values. * * This method receives a payload containing all value for its fields and * should return the same payload after having been sanitized. * * Do not, encode the payload as this is performed by the * universal_sanitize_and_encode_handler() of the parent class. * * @param array $field_values The array map with field values. * @since 0.5 */ public function sanitize_option_fields($field_values) { foreach ($field_values as $field_id => $field_value) { $field = self::$fields[$field_id]; switch ($field_id) { case 'ad_source': $all_options = array(); $registered_compat_ads = Instant_Articles_Option::get_registered_compat('instant_articles_compat_registry_ads'); foreach ($field['select_options'] as $option_id => $option_info) { $all_options[] = $option_id; } foreach ($registered_compat_ads as $compat_id => $compat_info) { $all_options[] = $compat_id; } if (!in_array($field_value, $all_options, true)) { $field_values[$field_id] = $field['default']; add_settings_error($field_id, 'invalid_option', 'Invalid Ad Source'); } break; case 'fan_placement_id': if (isset($field_values['ad_source']) && 'fan' === $field_values['ad_source']) { if (preg_match('/^[0-9_]+$/', $field_values[$field_id]) !== 1) { add_settings_error($field_id, 'invalid_placement_id', 'Invalid Audience Network Placement ID provided'); $field_values[$field_id] = $field['default']; } } break; case 'iframe_url': if (isset($field_values['ad_source']) && 'iframe' === $field_values['ad_source']) { $url = $field_values[$field_id]; if (substr($url, 0, 2) === '//') { // Allow URLs without protocol prefix $url = 'http:' . $url; } $url = filter_var($url, FILTER_VALIDATE_URL); if (!$url) { $field_values[$field_id] = $field['default']; add_settings_error($field_id, 'invalid_url', 'Invalid URL provided for Ad iframe'); } } break; case 'embed_code': if (isset($field_values['ad_source']) && 'embed' === $field_values['ad_source']) { $document = new DOMDocument(); $fragment = $document->createDocumentFragment(); if (!@$fragment->appendXML($field_values[$field_id])) { add_settings_error('embed_code', 'invalid_markup', 'Invalid HTML markup provided for ad custom embed code'); } } break; case 'dimensions': if (isset($field_values['ad_source']) && 'none' !== $field_values['ad_source']) { if (!array_key_exists($field_value, $field['select_options'])) { $field_values[$field_id] = $field['default']; add_settings_error('embed_code', 'invalid_dimensions', 'Invalid dimensions provided for Ad'); } } break; } } return $field_values; }