Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../public_h.../wp-conte.../plugins/wpforms-.../src/Integrat.../UsageTra...
File: UsageTracking.php
* @param array $forms All forms.
[500] Fix | Delete
*
[501] Fix | Delete
* @return array
[502] Fix | Delete
*/
[503] Fix | Delete
private function get_ajax_form_submissions( array $forms ): array {
[504] Fix | Delete
[505] Fix | Delete
return array_filter(
[506] Fix | Delete
$forms,
[507] Fix | Delete
static function ( $form ) {
[508] Fix | Delete
[509] Fix | Delete
return ! empty( $form->post_content['settings']['ajax_submit'] );
[510] Fix | Delete
}
[511] Fix | Delete
);
[512] Fix | Delete
}
[513] Fix | Delete
[514] Fix | Delete
/**
[515] Fix | Delete
* Total number of sites.
[516] Fix | Delete
*
[517] Fix | Delete
* @since 1.6.1
[518] Fix | Delete
*
[519] Fix | Delete
* @return int
[520] Fix | Delete
*/
[521] Fix | Delete
private function get_sites_total(): int {
[522] Fix | Delete
[523] Fix | Delete
return function_exists( 'get_blog_count' ) ? (int) get_blog_count() : 1;
[524] Fix | Delete
}
[525] Fix | Delete
[526] Fix | Delete
/**
[527] Fix | Delete
* Total number of entries.
[528] Fix | Delete
*
[529] Fix | Delete
* @since 1.6.1
[530] Fix | Delete
*
[531] Fix | Delete
* @param string $period Which period should be counted? Possible values: 7days, 30days.
[532] Fix | Delete
* Everything else will mean "all" entries.
[533] Fix | Delete
*
[534] Fix | Delete
* @return int
[535] Fix | Delete
*/
[536] Fix | Delete
private function get_entries_total( string $period = 'all' ): int {
[537] Fix | Delete
[538] Fix | Delete
if ( ! wpforms()->is_pro() ) {
[539] Fix | Delete
if ( $period === '7days' || $period === '30days' ) {
[540] Fix | Delete
return 0;
[541] Fix | Delete
}
[542] Fix | Delete
[543] Fix | Delete
global $wpdb;
[544] Fix | Delete
[545] Fix | Delete
$count = $wpdb->get_var( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching
[546] Fix | Delete
"SELECT SUM(meta_value)
[547] Fix | Delete
FROM $wpdb->postmeta
[548] Fix | Delete
WHERE meta_key = 'wpforms_entries_count';"
[549] Fix | Delete
);
[550] Fix | Delete
[551] Fix | Delete
return (int) $count;
[552] Fix | Delete
}
[553] Fix | Delete
[554] Fix | Delete
$args = [];
[555] Fix | Delete
[556] Fix | Delete
// Limit results to only forms, excluding form templates.
[557] Fix | Delete
$form_ids = wp_list_pluck( $this->get_all_forms(), 'ID' );
[558] Fix | Delete
[559] Fix | Delete
if ( ! empty( $form_ids ) ) {
[560] Fix | Delete
$args['form_id'] = $form_ids;
[561] Fix | Delete
}
[562] Fix | Delete
[563] Fix | Delete
switch ( $period ) {
[564] Fix | Delete
case '7days':
[565] Fix | Delete
$args = [
[566] Fix | Delete
'date' => [
[567] Fix | Delete
gmdate( 'Y-m-d', strtotime( '-7 days' ) ),
[568] Fix | Delete
gmdate( 'Y-m-d' ),
[569] Fix | Delete
],
[570] Fix | Delete
];
[571] Fix | Delete
break;
[572] Fix | Delete
[573] Fix | Delete
case '30days':
[574] Fix | Delete
$args = [
[575] Fix | Delete
'date' => [
[576] Fix | Delete
gmdate( 'Y-m-d', strtotime( '-30 days' ) ),
[577] Fix | Delete
gmdate( 'Y-m-d' ),
[578] Fix | Delete
],
[579] Fix | Delete
];
[580] Fix | Delete
break;
[581] Fix | Delete
}
[582] Fix | Delete
[583] Fix | Delete
$entry_obj = wpforms()->get( 'entry' );
[584] Fix | Delete
[585] Fix | Delete
return $entry_obj ? $entry_obj->get_entries( $args, true ) : 0;
[586] Fix | Delete
}
[587] Fix | Delete
[588] Fix | Delete
/**
[589] Fix | Delete
* Forms field occurrences.
[590] Fix | Delete
*
[591] Fix | Delete
* @since 1.7.9
[592] Fix | Delete
*
[593] Fix | Delete
* @param array $forms List of forms.
[594] Fix | Delete
*
[595] Fix | Delete
* @return array List of field occurrences in all forms created.
[596] Fix | Delete
*/
[597] Fix | Delete
private function get_form_fields_count( array $forms ): array {
[598] Fix | Delete
[599] Fix | Delete
// Bail early, in case there are no forms created yet!
[600] Fix | Delete
if ( empty( $forms ) ) {
[601] Fix | Delete
return [];
[602] Fix | Delete
}
[603] Fix | Delete
[604] Fix | Delete
$fields = array_map(
[605] Fix | Delete
static function( $form ) {
[606] Fix | Delete
[607] Fix | Delete
return $form->post_content['fields'] ?? [];
[608] Fix | Delete
},
[609] Fix | Delete
$forms
[610] Fix | Delete
);
[611] Fix | Delete
[612] Fix | Delete
$fields_flatten = array_merge( [], ...$fields );
[613] Fix | Delete
$field_types = array_column( $fields_flatten, 'type' );
[614] Fix | Delete
[615] Fix | Delete
return array_count_values( $field_types );
[616] Fix | Delete
}
[617] Fix | Delete
[618] Fix | Delete
/**
[619] Fix | Delete
* Determines whether the plugin is active for the entire network.
[620] Fix | Delete
*
[621] Fix | Delete
* This is a copy of the WP core is_plugin_active_for_network() function.
[622] Fix | Delete
*
[623] Fix | Delete
* @since 1.8.2
[624] Fix | Delete
*
[625] Fix | Delete
* @return bool
[626] Fix | Delete
*/
[627] Fix | Delete
private function is_active_for_network(): bool {
[628] Fix | Delete
[629] Fix | Delete
// Bail early, in case we are not in multisite.
[630] Fix | Delete
if ( ! is_multisite() ) {
[631] Fix | Delete
return false;
[632] Fix | Delete
}
[633] Fix | Delete
[634] Fix | Delete
// Get all active plugins.
[635] Fix | Delete
$plugins = get_site_option( 'active_sitewide_plugins' );
[636] Fix | Delete
[637] Fix | Delete
// Bail early, in case the plugin is active for the entire network.
[638] Fix | Delete
if ( isset( $plugins[ plugin_basename( WPFORMS_PLUGIN_FILE ) ] ) ) {
[639] Fix | Delete
return true;
[640] Fix | Delete
}
[641] Fix | Delete
[642] Fix | Delete
return false;
[643] Fix | Delete
}
[644] Fix | Delete
[645] Fix | Delete
/**
[646] Fix | Delete
* Average entries count.
[647] Fix | Delete
*
[648] Fix | Delete
* @since 1.6.1
[649] Fix | Delete
*
[650] Fix | Delete
* @param int $forms Total forms count.
[651] Fix | Delete
* @param int $entries Total entries count.
[652] Fix | Delete
*
[653] Fix | Delete
* @return int
[654] Fix | Delete
*/
[655] Fix | Delete
private function get_entries_avg( int $forms, int $entries ): int {
[656] Fix | Delete
[657] Fix | Delete
return $forms ? round( $entries / $forms ) : 0;
[658] Fix | Delete
}
[659] Fix | Delete
[660] Fix | Delete
/**
[661] Fix | Delete
* Get all forms.
[662] Fix | Delete
*
[663] Fix | Delete
* @since 1.6.1
[664] Fix | Delete
* @since 1.8.9 Added post_type parameter.
[665] Fix | Delete
*
[666] Fix | Delete
* @param string|string[] $post_type Allow to sort result by post_type. By default, it's 'wpforms'.
[667] Fix | Delete
*
[668] Fix | Delete
* @return array
[669] Fix | Delete
*/
[670] Fix | Delete
private function get_all_forms( $post_type = 'wpforms' ): array {
[671] Fix | Delete
[672] Fix | Delete
$forms = wpforms()->get( 'form' )->get( '', [ 'post_type' => $post_type ] );
[673] Fix | Delete
[674] Fix | Delete
if ( ! is_array( $forms ) ) {
[675] Fix | Delete
return [];
[676] Fix | Delete
}
[677] Fix | Delete
[678] Fix | Delete
return array_map(
[679] Fix | Delete
static function ( $form ) {
[680] Fix | Delete
[681] Fix | Delete
$form->post_content = wpforms_decode( $form->post_content );
[682] Fix | Delete
[683] Fix | Delete
return $form;
[684] Fix | Delete
},
[685] Fix | Delete
$forms
[686] Fix | Delete
);
[687] Fix | Delete
}
[688] Fix | Delete
[689] Fix | Delete
/**
[690] Fix | Delete
* Get the favorite templates.
[691] Fix | Delete
*
[692] Fix | Delete
* @since 1.7.7
[693] Fix | Delete
*
[694] Fix | Delete
* @return array
[695] Fix | Delete
*/
[696] Fix | Delete
private function get_favorite_templates(): array {
[697] Fix | Delete
[698] Fix | Delete
$settings = [];
[699] Fix | Delete
$templates = (array) get_option( Templates::FAVORITE_TEMPLATES_OPTION, [] );
[700] Fix | Delete
[701] Fix | Delete
foreach ( $templates as $user_templates ) {
[702] Fix | Delete
foreach ( $user_templates as $template => $v ) {
[703] Fix | Delete
$name = 'fav_templates_' . str_replace( '-', '_', $template );
[704] Fix | Delete
$settings[ $name ] = empty( $settings[ $name ] ) ? 1 : ++ $settings[ $name ];
[705] Fix | Delete
}
[706] Fix | Delete
}
[707] Fix | Delete
[708] Fix | Delete
return $settings;
[709] Fix | Delete
}
[710] Fix | Delete
[711] Fix | Delete
/**
[712] Fix | Delete
* Test if the REST API is accessible.
[713] Fix | Delete
*
[714] Fix | Delete
* The REST API might be inaccessible due to various security measures,
[715] Fix | Delete
* or it might be completely disabled by a plugin.
[716] Fix | Delete
*
[717] Fix | Delete
* @since 1.8.2.2
[718] Fix | Delete
*
[719] Fix | Delete
* @return bool
[720] Fix | Delete
*/
[721] Fix | Delete
private function is_rest_api_enabled(): bool {
[722] Fix | Delete
[723] Fix | Delete
// phpcs:disable WPForms.PHP.ValidateHooks.InvalidHookName
[724] Fix | Delete
/** This filter is documented in wp-includes/class-wp-http-streams.php */
[725] Fix | Delete
$sslverify = apply_filters( 'https_local_ssl_verify', false );
[726] Fix | Delete
// phpcs:enable WPForms.PHP.ValidateHooks.InvalidHookName
[727] Fix | Delete
[728] Fix | Delete
$url = rest_url( 'wp/v2/types/post' );
[729] Fix | Delete
$response = wp_remote_get(
[730] Fix | Delete
$url,
[731] Fix | Delete
[
[732] Fix | Delete
'timeout' => 10,
[733] Fix | Delete
'cookies' => is_user_logged_in() ? wp_unslash( $_COOKIE ) : [],
[734] Fix | Delete
'sslverify' => $sslverify,
[735] Fix | Delete
'headers' => [
[736] Fix | Delete
'Cache-Control' => 'no-cache',
[737] Fix | Delete
'X-WP-Nonce' => wp_create_nonce( 'wp_rest' ),
[738] Fix | Delete
],
[739] Fix | Delete
]
[740] Fix | Delete
);
[741] Fix | Delete
[742] Fix | Delete
// When testing the REST API, an error was encountered, leave early.
[743] Fix | Delete
if ( is_wp_error( $response ) ) {
[744] Fix | Delete
return false;
[745] Fix | Delete
}
[746] Fix | Delete
[747] Fix | Delete
// When testing the REST API, an unexpected result was returned, leave early.
[748] Fix | Delete
if ( wp_remote_retrieve_response_code( $response ) !== 200 ) {
[749] Fix | Delete
return false;
[750] Fix | Delete
}
[751] Fix | Delete
[752] Fix | Delete
// The REST API did not behave correctly, leave early.
[753] Fix | Delete
if ( ! wpforms_is_json( wp_remote_retrieve_body( $response ) ) ) {
[754] Fix | Delete
return false;
[755] Fix | Delete
}
[756] Fix | Delete
[757] Fix | Delete
// We are all set. Confirm the connection.
[758] Fix | Delete
return true;
[759] Fix | Delete
}
[760] Fix | Delete
[761] Fix | Delete
/**
[762] Fix | Delete
* Retrieves additional statistics.
[763] Fix | Delete
*
[764] Fix | Delete
* @since 1.8.8
[765] Fix | Delete
*
[766] Fix | Delete
* @return array
[767] Fix | Delete
*/
[768] Fix | Delete
private function get_additional_stats(): array {
[769] Fix | Delete
[770] Fix | Delete
// Initialize an empty array to store the statistics.
[771] Fix | Delete
$stats = [];
[772] Fix | Delete
[773] Fix | Delete
return $this->get_admin_pointer_stats( $stats );
[774] Fix | Delete
}
[775] Fix | Delete
[776] Fix | Delete
/**
[777] Fix | Delete
* Retrieves statistics for admin pointers.
[778] Fix | Delete
* This function retrieves statistics for admin pointers based on their engagement or dismissal status.
[779] Fix | Delete
*
[780] Fix | Delete
* Note: Pointers can only be engaged (interacted with) or dismissed.
[781] Fix | Delete
*
[782] Fix | Delete
* - If the value is 1 or true, it means the pointer is shown and interacted with (engaged).
[783] Fix | Delete
* - If the value is 0 or false, it means the pointer is dismissed.
[784] Fix | Delete
* - If there is no pointer ID in the stats, it means the user hasn't seen the pointer yet.
[785] Fix | Delete
*
[786] Fix | Delete
* @since 1.8.8
[787] Fix | Delete
*
[788] Fix | Delete
* @param array $stats An array containing existing statistics.
[789] Fix | Delete
*
[790] Fix | Delete
* @return array
[791] Fix | Delete
*/
[792] Fix | Delete
private function get_admin_pointer_stats( array $stats ): array {
[793] Fix | Delete
[794] Fix | Delete
$pointers = get_option( 'wpforms_pointers', [] );
[795] Fix | Delete
[796] Fix | Delete
// If there are no pointers, return empty statistics.
[797] Fix | Delete
if ( empty( $pointers ) ) {
[798] Fix | Delete
return $stats;
[799] Fix | Delete
}
[800] Fix | Delete
[801] Fix | Delete
// Pointers can only be interacted with or dismissed.
[802] Fix | Delete
[803] Fix | Delete
// If there are engagement pointers, process them.
[804] Fix | Delete
if ( isset( $pointers['engagement'] ) ) {
[805] Fix | Delete
foreach ( $pointers['engagement'] as $pointer ) {
[806] Fix | Delete
$stats[ sanitize_key( $pointer ) ] = true;
[807] Fix | Delete
}
[808] Fix | Delete
}
[809] Fix | Delete
[810] Fix | Delete
// If there are dismiss pointers, process them.
[811] Fix | Delete
if ( isset( $pointers['dismiss'] ) ) {
[812] Fix | Delete
foreach ( $pointers['dismiss'] as $pointer ) {
[813] Fix | Delete
$stats[ sanitize_key( $pointer ) ] = false;
[814] Fix | Delete
}
[815] Fix | Delete
}
[816] Fix | Delete
[817] Fix | Delete
return $stats;
[818] Fix | Delete
}
[819] Fix | Delete
}
[820] Fix | Delete
[821] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function