File "FrmProDisplaysHelper.php"
Full path: /home/bud/public_html/swamp/wp-admin/wp-content/plugins/formidable-pro/classes/helpers/FrmProDisplaysHelper.php
File size: 5.99 KB
MIME-type: text/x-php
Charset: utf-8
<?php
if ( ! defined( 'ABSPATH' ) ) {
die( 'You are not allowed to call this page directly.' );
}
class FrmProDisplaysHelper {
public static function get_shortcodes( $content, $form_id ) {
if ( ! $form_id || strpos( $content, '[' ) === false ) {
// don't continue if there are no shortcodes to check
return array( array() );
}
$tagregexp = array( 'deletelink', 'detaillink', 'evenodd', 'get', 'entry_count', 'event_date', 'is[-|_]draft' );
$form_id = (int) $form_id;
$form_ids = self::linked_form_ids( $form_id );
$field_query = array(
'form_id' => $form_ids,
'or' => 1,
);
$field_keys = FrmDb::get_col( 'frm_fields', $field_query, 'field_key' );
if ( count( $field_keys ) > 200 ) {
$tagregexp = array_merge( $tagregexp, self::get_additional_keys_for_regex( $content, $field_keys ) );
} else {
$tagregexp = array_merge( $tagregexp, $field_keys );
}
$tagregexp = implode( '|', $tagregexp ) . '|';
$tagregexp .= FrmFieldsHelper::allowed_shortcodes();
self::maybe_increase_regex_limit();
preg_match_all( "/\[(if |foreach )?(\d+|$tagregexp)\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?/s", $content, $matches, PREG_PATTERN_ORDER );
$matches[0] = self::organize_and_filter_shortcodes( $matches[0] );
return $matches;
}
/**
* To avoid issues with regex limits, remove any field keys that aren't found in the content ahead of time for large field sets.
*
* @param string $content
* @param array $keys
* @return array
*/
private static function get_additional_keys_for_regex( $content, $keys ) {
$additional_keys = array();
foreach ( $keys as $key ) {
if ( false !== strpos( $content, $key ) ) {
$additional_keys[] = $key;
}
}
return $additional_keys;
}
/**
* Get the ids of any child forms (repeat or embedded)
*
* @since 3.0
*/
private static function linked_form_ids( $form_id ) {
$linked_field_query = array(
'form_id' => $form_id,
'type' => array( 'divider', 'form' ),
);
$fields = FrmDb::get_col( 'frm_fields', $linked_field_query, 'field_options' );
$form_ids = array( $form_id );
foreach ( $fields as $field_options ) {
FrmProAppHelper::unserialize_or_decode( $field_options );
if ( ! empty( $field_options['form_select'] ) ) {
$form_ids[] = $field_options['form_select'];
}
unset( $field_options );
}
return $form_ids;
}
/**
* Make sure the backtrack limit is as least at the default
*
* @since 3.0
*/
private static function maybe_increase_regex_limit() {
$backtrack_limit = ini_get( 'pcre.backtrack_limit' );
if ( $backtrack_limit < 1000000 ) {
ini_set( 'pcre.backtrack_limit', 1000000 );
}
}
/**
* Put conditionals and foreach first
* Remove duplicate conditional and foreach tags
*
* @since 2.01.03
* @param array $shortcodes
* @return array $shortcodes
*/
private static function organize_and_filter_shortcodes( $shortcodes ) {
$move_up = array();
foreach ( $shortcodes as $short_key => $tag ) {
$conditional = preg_match( '/^\[if/s', $shortcodes[ $short_key ] ) ? true : false;
$foreach = preg_match( '/^\[foreach/s', $shortcodes[ $short_key ] ) ? true : false;
if ( $conditional || $foreach ) {
if ( ! in_array( $tag, $move_up, true ) ) {
$move_up[ $short_key ] = $tag;
}
unset( $shortcodes[ $short_key ] );
}
}
if ( $move_up ) {
$shortcodes = $move_up + $shortcodes;
}
return $shortcodes;
}
public static function prepare_duplicate_view( &$post ) {
if ( is_callable( 'FrmViewsDisplaysHelper::prepare_duplicate_view' ) ) {
FrmViewsDisplaysHelper::prepare_duplicate_view( $post );
}
}
public static function get_show_counts() {
if ( is_callable( 'FrmViewsDisplaysHelper::get_show_counts' ) ) {
return FrmViewsDisplaysHelper::get_show_counts();
}
return array();
}
/**
* @param string|false $include_key if false all keys are included.
* @return array
*/
public static function get_frm_options_for_views( $include_key = false ) {
if ( is_callable( 'FrmViewsDisplaysHelper::get_frm_options_for_views' ) ) {
return FrmViewsDisplaysHelper::get_frm_options_for_views( $include_key );
}
return array();
}
/**
* @deprecated 4.09
*/
public static function where_is_options() {
return self::deprecated_function( __METHOD__, 'FrmViewsDisplaysHelper::where_is_options' );
}
/**
* @deprecated 4.09
*/
public static function get_meta_values( $key = '', $post_type = 'frm_display' ) {
return self::deprecated_function( __METHOD__, 'FrmViewsDisplaysHelper::get_meta_values', $key, $post_type );
}
/**
* @deprecated 4.09
*/
public static function get_default_opts() {
return self::deprecated_function( __METHOD__, 'FrmViewsDisplaysHelper::get_default_opts' );
}
/**
* @deprecated 4.09
*/
public static function get_current_view( $post ) {
return self::deprecated_function( __METHOD__, 'FrmViewsDisplaysHelper::get_current_view', $post );
}
/**
* @deprecated 4.09
*/
public static function setup_new_vars() {
return self::deprecated_function( __METHOD__, 'FrmViewsDisplaysHelper::setup_new_vars' );
}
/**
* @deprecated 4.09
*/
public static function setup_edit_vars( $post, $check_post = true ) {
return self::deprecated_function( __METHOD__, 'FrmViewsDisplaysHelper::setup_edit_vars', $post, $check_post );
}
/**
* @deprecated 4.09
*/
public static function is_edit_view_page() {
return self::deprecated_function( __METHOD__, 'FrmViewsDisplaysHelper::is_edit_view_page' );
}
/**
* Call FrmProDisplaysController::deprecated_function if possible
* During the migration process FrmProDisplaysController.php might still be out of date
*/
private static function deprecated_function( $method, $replacement = '', ...$params ) {
if ( is_callable( 'FrmProDisplaysController::deprecated_function' ) ) {
return FrmProDisplaysController::deprecated_function( $method, $replacement, ...$params );
}
_deprecated_function( $method, '4.09', $replacement );
if ( $replacement && is_callable( $replacement ) ) {
return $replacement( ...$params );
}
}
}