Files
medicalalert-web-reloaded/wp/wp-content/plugins/gravityforms/includes/telemetry/class-gf-telemetry-snapshot-data.php
2024-06-18 17:29:05 -04:00

243 lines
6.8 KiB
PHP

<?php
namespace Gravity_Forms\Gravity_Forms\Telemetry;
use GFCommon;
use GFForms;
use GFFormsModel;
use \Gravity_Forms\Gravity_Forms\Setup_Wizard\GF_Setup_Wizard_Service_Provider;
use \Gravity_Forms\Gravity_Forms\Setup_Wizard\Endpoints\GF_Setup_Wizard_Endpoint_Save_Prefs;
class GF_Telemetry_Snapshot_Data extends GF_Telemetry_Data {
/**
* @var string $key Identifier for this data object.
*/
public $key = 'snapshot';
public function __construct() {
parent::__construct();
/**
* Array of callback functions returning an array of data to be included in the telemetry snapshot.
*
* @since 2.8
*/
$callbacks = array(
array( $this, 'get_site_basic_info' ),
array( $this, 'get_gf_settings' ),
array( $this, 'get_legacy_forms' ),
);
// Merges the default callbacks with any additional callbacks added via the gform_telemetry_snapshot_data filter. Default callbacks are added last so they can't be overridden.
$callbacks = array_merge( $this->get_callbacks(), $callbacks );
foreach ( $callbacks as $callback ) {
if ( is_callable( $callback ) ) {
$this->data = array_merge( $this->data, call_user_func( $callback ) );
}
}
}
/**
* Get additional callbacks that return data to be included in the telemetry snapshot.
*
* @since 2.8
*
* @return array
*/
public function get_callbacks() {
/**
* Filters the non-default data to be included in the telemetry snapshot.
*
* @since 2.8
*
* @param array $new_callbacks An array of callbacks returning an array of data to be included in the telemetry snapshot. Default empty array.
*/
return apply_filters( 'gform_telemetry_snapshot_data', array() );
}
/**
* Get basic site info for telemetry.
*
* @since 2.8
*
* @return array
*/
public function get_site_basic_info() {
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$plugin_list = get_plugins();
$plugins = array();
$active_plugins = get_option( 'active_plugins' );
foreach ( $plugin_list as $key => $plugin ) {
$is_active = in_array( $key, $active_plugins );
$slug = substr( $key, 0, strpos( $key, '/' ) );
if ( empty( $slug ) ) {
$slug = str_replace( '.php', '', $key );
}
$plugins[] = array(
'name' => str_replace( 'phpinfo()', 'PHP Info', $plugin['Name'] ),
'slug' => $slug,
'version' => $plugin['Version'],
'is_active' => $is_active,
);
}
$theme = wp_get_theme();
$theme_name = $theme->get( 'Name' );
$theme_uri = $theme->get( 'ThemeURI' );
$theme_version = $theme->get( 'Version' );
$theme_author = $theme->get( 'Author' );
$theme_author_uri = $theme->get( 'AuthorURI' );
$form_counts = GFFormsModel::get_form_count();
$active_count = $form_counts['active'];
$inactive_count = $form_counts['inactive'];
$fc = abs( $active_count ) + abs( $inactive_count );
$entry_count = GFFormsModel::get_entry_count_all_forms( 'active' );
$meta_counts = GFFormsModel::get_entry_meta_counts();
$im = is_multisite();
$lang = get_locale();
$db = GFCommon::get_dbms_type();
$post = array(
'key' => GFCommon::get_key(),
'wp_version' => get_bloginfo( 'version' ),
'php_version' => phpversion(),
'mysql_version' => GFCommon::get_db_version(),
'plugins' => $plugins,
'theme_name' => $theme_name,
'theme_uri' => $theme_uri,
'theme_version' => $theme_version,
'theme_author' => $theme_author,
'theme_author_uri' => $theme_author_uri,
'is_multisite' => $im,
'total_forms' => $fc,
'total_entries' => $entry_count,
'emails_sent' => GFCommon::get_emails_sent(),
'api_calls' => GFCommon::get_api_calls(),
'entry_meta_count' => $meta_counts['meta'],
'entry_details_count' => $meta_counts['details'],
'entry_notes_count' => $meta_counts['notes'],
'lang' => $lang,
'db' => $db,
);
$installation_telemetry = array(
GF_Setup_Wizard_Endpoint_Save_Prefs::PARAM_AUTO_UPDATE,
GF_Setup_Wizard_Endpoint_Save_Prefs::PARAM_CURRENCY,
GF_Setup_Wizard_Endpoint_Save_Prefs::PARAM_DATA_COLLECTION,
GF_Setup_Wizard_Endpoint_Save_Prefs::PARAM_EMAIL,
GF_Setup_Wizard_Endpoint_Save_Prefs::PARAM_FORM_TYPES,
GF_Setup_Wizard_Endpoint_Save_Prefs::PARAM_FORM_TYPES_OTHER,
GF_Setup_Wizard_Endpoint_Save_Prefs::PARAM_HIDE_LICENSE,
GF_Setup_Wizard_Endpoint_Save_Prefs::PARAM_ORGANIZATION,
GF_Setup_Wizard_Endpoint_Save_Prefs::PARAM_ORGANIZATION_OTHER,
GF_Setup_Wizard_Endpoint_Save_Prefs::PARAM_SERVICES,
GF_Setup_Wizard_Endpoint_Save_Prefs::PARAM_SERVICES_OTHER,
);
$wizard_endpoint = GFForms::get_service_container()->get( GF_Setup_Wizard_Service_Provider::SAVE_PREFS_ENDPOINT );
foreach ( $installation_telemetry as $telem ) {
$post[ $telem ] = $wizard_endpoint->get_value( $telem );
}
return $post;
}
/**
* Collect the data from the Gravity Forms settings page
*
* @since 2.8.3
*
* @return array
*/
public function get_gf_settings() {
if ( ! $this->data_collection ) {
return array();
}
$gform_settings = array();
$settings_keys = array(
'gform_enable_logging',
'rg_gforms_default_theme',
'gform_enable_toolbar_menu',
'gform_enable_noconflict',
);
foreach ( $settings_keys as $key ) {
$gform_settings[ $key ] = get_option( $key );
}
return $gform_settings;
}
/**
* Count the number of forms with legacy mode enabled.
*
* @since 2.8.3
*
* @return array
*/
public function get_legacy_forms() {
if ( ! $this->data_collection ) {
return array();
}
$legacy_forms = 0;
$forms = GFFormsModel::get_forms();
foreach ( $forms as $form ) {
// if form has legacy mode enabled, add it to the total
if ( GFCommon::is_legacy_markup_enabled( $form->id ) ) {
$legacy_forms++;
}
}
return array( 'legacy_forms' => $legacy_forms );
}
/**
* Stores the response from the version.php endpoint, to be used by the license service.
*
* @since 2.8
*
* @param array $response Raw response from the API endpoint.
*/
public static function data_sent( $response ) {
$version_info = array(
'is_valid_key' => '1',
'version' => '',
'url' => '',
'is_error' => '1',
);
if ( is_wp_error( $response ) || rgars( $response, 'response/code' ) != 200 ) {
$version_info['timestamp'] = time();
return $version_info;
}
$decoded = json_decode( $response['body'], true );
if ( empty( $decoded ) ) {
$version_info['timestamp'] = time();
return $version_info;
}
$decoded['timestamp'] = time();
update_option( 'gform_version_info', $decoded, false );
\GFCommon::log_debug( __METHOD__ . sprintf( '(): Version info cached.' ) );
}
}