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.../httpdocs/wp-conte.../plugins/content-.../inc/freemius/includes
File: class-freemius.php
return;
[26000] Fix | Delete
}
[26001] Fix | Delete
[26002] Fix | Delete
require_once WP_FS__DIR_INCLUDES . '/class-fs-user-lock.php';
[26003] Fix | Delete
[26004] Fix | Delete
$lock = FS_User_Lock::instance();
[26005] Fix | Delete
[26006] Fix | Delete
/**
[26007] Fix | Delete
* Try to acquire a 60-sec lock based on the WP user and thread/process ID.
[26008] Fix | Delete
*/
[26009] Fix | Delete
if ( ! $lock->try_lock( 60 ) ) {
[26010] Fix | Delete
return;
[26011] Fix | Delete
}
[26012] Fix | Delete
[26013] Fix | Delete
/**
[26014] Fix | Delete
* @var $current_wp_user WP_User
[26015] Fix | Delete
*/
[26016] Fix | Delete
$current_wp_user = self::_get_current_wp_user();
[26017] Fix | Delete
[26018] Fix | Delete
/**
[26019] Fix | Delete
* @var FS_User $current_fs_user
[26020] Fix | Delete
*/
[26021] Fix | Delete
$current_fs_user = Freemius::_get_user_by_email( $current_wp_user->user_email );
[26022] Fix | Delete
[26023] Fix | Delete
$ten_years_in_sec = 10 * 365 * WP_FS__TIME_24_HOURS_IN_SEC;
[26024] Fix | Delete
[26025] Fix | Delete
if ( ! is_object( $current_fs_user ) ) {
[26026] Fix | Delete
// 10-year lock.
[26027] Fix | Delete
$lock->lock( $ten_years_in_sec );
[26028] Fix | Delete
[26029] Fix | Delete
return;
[26030] Fix | Delete
}
[26031] Fix | Delete
[26032] Fix | Delete
$gdpr = FS_GDPR_Manager::instance();
[26033] Fix | Delete
[26034] Fix | Delete
if ( $gdpr->is_opt_in_notice_shown() ) {
[26035] Fix | Delete
// 30-day lock.
[26036] Fix | Delete
$lock->lock( 30 * WP_FS__TIME_24_HOURS_IN_SEC );
[26037] Fix | Delete
[26038] Fix | Delete
return;
[26039] Fix | Delete
}
[26040] Fix | Delete
[26041] Fix | Delete
if ( ! $gdpr->should_show_opt_in_notice() ) {
[26042] Fix | Delete
// 10-year lock.
[26043] Fix | Delete
$lock->lock( $ten_years_in_sec );
[26044] Fix | Delete
[26045] Fix | Delete
return;
[26046] Fix | Delete
}
[26047] Fix | Delete
[26048] Fix | Delete
$last_time_notice_shown = $gdpr->last_time_notice_was_shown();
[26049] Fix | Delete
$was_notice_shown_before = ( false !== $last_time_notice_shown );
[26050] Fix | Delete
[26051] Fix | Delete
if ( $was_notice_shown_before &&
[26052] Fix | Delete
30 * WP_FS__TIME_24_HOURS_IN_SEC > time() - $last_time_notice_shown
[26053] Fix | Delete
) {
[26054] Fix | Delete
// If the notice was shown before, show it again after 30 days from the last time it was shown.
[26055] Fix | Delete
return;
[26056] Fix | Delete
}
[26057] Fix | Delete
[26058] Fix | Delete
/**
[26059] Fix | Delete
* Find all plugin IDs that were installed by the current admin.
[26060] Fix | Delete
*/
[26061] Fix | Delete
$plugin_ids_map = self::get_user_opted_in_module_ids_map( $current_fs_user->id );
[26062] Fix | Delete
[26063] Fix | Delete
if ( empty( $plugin_ids_map )) {
[26064] Fix | Delete
$lock->lock( $ten_years_in_sec );
[26065] Fix | Delete
[26066] Fix | Delete
return;
[26067] Fix | Delete
}
[26068] Fix | Delete
[26069] Fix | Delete
$user_plugins = $this->fetch_user_marketing_flag_status_by_plugins(
[26070] Fix | Delete
$current_fs_user->email,
[26071] Fix | Delete
null,
[26072] Fix | Delete
array_keys( $plugin_ids_map )
[26073] Fix | Delete
);
[26074] Fix | Delete
[26075] Fix | Delete
if ( empty( $user_plugins ) ) {
[26076] Fix | Delete
$lock->lock(
[26077] Fix | Delete
is_array($user_plugins) ?
[26078] Fix | Delete
$ten_years_in_sec :
[26079] Fix | Delete
// Lock for 24-hours on errors.
[26080] Fix | Delete
WP_FS__TIME_24_HOURS_IN_SEC
[26081] Fix | Delete
);
[26082] Fix | Delete
[26083] Fix | Delete
return;
[26084] Fix | Delete
}
[26085] Fix | Delete
[26086] Fix | Delete
$has_unset_marketing_optin = false;
[26087] Fix | Delete
[26088] Fix | Delete
foreach ( $user_plugins as $user_plugin ) {
[26089] Fix | Delete
if ( true == $user_plugin->is_marketing_allowed ) {
[26090] Fix | Delete
unset( $plugin_ids_map[ $user_plugin->plugin_id ] );
[26091] Fix | Delete
}
[26092] Fix | Delete
[26093] Fix | Delete
if ( ! $has_unset_marketing_optin && is_null( $user_plugin->is_marketing_allowed ) ) {
[26094] Fix | Delete
$has_unset_marketing_optin = true;
[26095] Fix | Delete
}
[26096] Fix | Delete
}
[26097] Fix | Delete
[26098] Fix | Delete
if ( empty( $plugin_ids_map ) ||
[26099] Fix | Delete
( $was_notice_shown_before && ! $has_unset_marketing_optin )
[26100] Fix | Delete
) {
[26101] Fix | Delete
$lock->lock( $ten_years_in_sec );
[26102] Fix | Delete
[26103] Fix | Delete
return;
[26104] Fix | Delete
}
[26105] Fix | Delete
[26106] Fix | Delete
$modules = array_merge(
[26107] Fix | Delete
array_values( self::maybe_get_entities_account_option( 'plugins', array() ) ),
[26108] Fix | Delete
array_values( self::maybe_get_entities_account_option( 'themes', array() ) )
[26109] Fix | Delete
);
[26110] Fix | Delete
[26111] Fix | Delete
foreach ( $modules as $module ) {
[26112] Fix | Delete
if ( ! FS_Plugin::is_valid_id( $module->parent_plugin_id ) && isset( $plugin_ids_map[ $module->id ] ) ) {
[26113] Fix | Delete
$plugin_ids_map[ $module->id ] = $module;
[26114] Fix | Delete
}
[26115] Fix | Delete
}
[26116] Fix | Delete
[26117] Fix | Delete
$plugin_title = null;
[26118] Fix | Delete
if ( 1 === count( $plugin_ids_map ) ) {
[26119] Fix | Delete
$module = reset( $plugin_ids_map );
[26120] Fix | Delete
$plugin_title = $module->title;
[26121] Fix | Delete
}
[26122] Fix | Delete
[26123] Fix | Delete
$gdpr->add_opt_in_sticky_notice(
[26124] Fix | Delete
$this->get_gdpr_admin_notice_string( $plugin_ids_map ),
[26125] Fix | Delete
$plugin_title
[26126] Fix | Delete
);
[26127] Fix | Delete
[26128] Fix | Delete
$this->add_gdpr_optin_ajax_handler_and_style();
[26129] Fix | Delete
[26130] Fix | Delete
$gdpr->notice_was_just_shown();
[26131] Fix | Delete
[26132] Fix | Delete
// 30-day lock.
[26133] Fix | Delete
$lock->lock( 30 * WP_FS__TIME_24_HOURS_IN_SEC );
[26134] Fix | Delete
}
[26135] Fix | Delete
[26136] Fix | Delete
/**
[26137] Fix | Delete
* Prevents the GDPR opt-in admin notice from being added if the user has already chosen to allow or not allow
[26138] Fix | Delete
* marketing.
[26139] Fix | Delete
*
[26140] Fix | Delete
* @author Leo Fajardo (@leorw)
[26141] Fix | Delete
* @since 2.1.0
[26142] Fix | Delete
*/
[26143] Fix | Delete
private function disable_opt_in_notice_and_lock_user() {
[26144] Fix | Delete
FS_GDPR_Manager::instance()->disable_opt_in_notice();
[26145] Fix | Delete
[26146] Fix | Delete
require_once WP_FS__DIR_INCLUDES . '/class-fs-user-lock.php';
[26147] Fix | Delete
[26148] Fix | Delete
// 10-year lock.
[26149] Fix | Delete
FS_User_Lock::instance()->lock( 10 * 365 * WP_FS__TIME_24_HOURS_IN_SEC );
[26150] Fix | Delete
}
[26151] Fix | Delete
[26152] Fix | Delete
/**
[26153] Fix | Delete
* @author Leo Fajardo (@leorw)
[26154] Fix | Delete
* @since 2.5.4
[26155] Fix | Delete
*/
[26156] Fix | Delete
static function _add_api_connectivity_notice_handler_js() {
[26157] Fix | Delete
fs_require_once_template( 'api-connectivity-message-js.php' );
[26158] Fix | Delete
}
[26159] Fix | Delete
[26160] Fix | Delete
/**
[26161] Fix | Delete
* @author Leo Fajardo (@leorw)
[26162] Fix | Delete
* @since 2.1.0
[26163] Fix | Delete
*/
[26164] Fix | Delete
function _add_gdpr_optin_js() {
[26165] Fix | Delete
$vars = array( 'id' => $this->_module_id );
[26166] Fix | Delete
[26167] Fix | Delete
fs_require_once_template( 'gdpr-optin-js.php', $vars );
[26168] Fix | Delete
}
[26169] Fix | Delete
[26170] Fix | Delete
/**
[26171] Fix | Delete
* @author Leo Fajardo (@leorw)
[26172] Fix | Delete
* @since 2.1.0
[26173] Fix | Delete
*/
[26174] Fix | Delete
function enqueue_gdpr_optin_notice_style() {
[26175] Fix | Delete
fs_enqueue_local_style( 'fs_gdpr_optin_notice', '/admin/gdpr-optin-notice.css' );
[26176] Fix | Delete
}
[26177] Fix | Delete
[26178] Fix | Delete
/**
[26179] Fix | Delete
* @author Leo Fajardo (@leorw)
[26180] Fix | Delete
* @since 2.1.0
[26181] Fix | Delete
*/
[26182] Fix | Delete
function _maybe_add_gdpr_optin_ajax_handler() {
[26183] Fix | Delete
$this->add_ajax_action( 'fetch_is_marketing_required_flag_value', array( &$this, '_fetch_is_marketing_required_flag_value_ajax_action' ) );
[26184] Fix | Delete
[26185] Fix | Delete
if ( FS_GDPR_Manager::instance()->is_opt_in_notice_shown() ) {
[26186] Fix | Delete
$this->add_gdpr_optin_ajax_handler_and_style();
[26187] Fix | Delete
}
[26188] Fix | Delete
}
[26189] Fix | Delete
[26190] Fix | Delete
/**
[26191] Fix | Delete
* @author Leo Fajardo (@leorw)
[26192] Fix | Delete
* @since 2.1.0
[26193] Fix | Delete
*/
[26194] Fix | Delete
function _fetch_is_marketing_required_flag_value_ajax_action() {
[26195] Fix | Delete
$this->_logger->entrance();
[26196] Fix | Delete
[26197] Fix | Delete
$this->check_ajax_referer( 'fetch_is_marketing_required_flag_value' );
[26198] Fix | Delete
[26199] Fix | Delete
$license_key = fs_request_get_raw( 'license_key' );
[26200] Fix | Delete
[26201] Fix | Delete
if ( empty($license_key) ) {
[26202] Fix | Delete
self::shoot_ajax_failure( $this->get_text_inline( 'License key is empty.', 'empty-license-key' ) );
[26203] Fix | Delete
}
[26204] Fix | Delete
[26205] Fix | Delete
$user_plugins = $this->fetch_user_marketing_flag_status_by_plugins(
[26206] Fix | Delete
null,
[26207] Fix | Delete
$license_key,
[26208] Fix | Delete
array( $this->_module_id )
[26209] Fix | Delete
);
[26210] Fix | Delete
[26211] Fix | Delete
if ( ! is_array( $user_plugins ) ||
[26212] Fix | Delete
empty($user_plugins) ||
[26213] Fix | Delete
!isset($user_plugins[0]->plugin_id) ||
[26214] Fix | Delete
$user_plugins[0]->plugin_id != $this->_module_id
[26215] Fix | Delete
) {
[26216] Fix | Delete
/**
[26217] Fix | Delete
* If faced an error or if the module ID do not match to the current module, ask for GDPR opt-in.
[26218] Fix | Delete
*
[26219] Fix | Delete
* @author Vova Feldman (@svovaf)
[26220] Fix | Delete
*/
[26221] Fix | Delete
self::shoot_ajax_success( array(
[26222] Fix | Delete
'is_marketing_allowed' => null,
[26223] Fix | Delete
'license_owner_id' => null
[26224] Fix | Delete
) );
[26225] Fix | Delete
}
[26226] Fix | Delete
[26227] Fix | Delete
self::shoot_ajax_success( array(
[26228] Fix | Delete
'is_marketing_allowed' => $user_plugins[0]->is_marketing_allowed,
[26229] Fix | Delete
'license_owner_id' => ( isset( $user_plugins[0]->license_owner_id ) ? $user_plugins[0]->license_owner_id : null )
[26230] Fix | Delete
) );
[26231] Fix | Delete
}
[26232] Fix | Delete
[26233] Fix | Delete
/**
[26234] Fix | Delete
* @author Leo Fajardo (@leorw)
[26235] Fix | Delete
* @since 2.3.2
[26236] Fix | Delete
*
[26237] Fix | Delete
* @param number[] $install_ids
[26238] Fix | Delete
*
[26239] Fix | Delete
* @return array {
[26240] Fix | Delete
* An array of objects containing the installs' licenses owners data.
[26241] Fix | Delete
*
[26242] Fix | Delete
* @property number $id User ID.
[26243] Fix | Delete
* @property string $email User email (can be masked email).
[26244] Fix | Delete
* }
[26245] Fix | Delete
*/
[26246] Fix | Delete
private function fetch_installs_licenses_owners_data( $install_ids ) {
[26247] Fix | Delete
$this->_logger->entrance();
[26248] Fix | Delete
[26249] Fix | Delete
$response = $this->get_api_user_scope()->get(
[26250] Fix | Delete
'/licenses_owners.json?install_ids=' . implode( ',', $install_ids )
[26251] Fix | Delete
);
[26252] Fix | Delete
[26253] Fix | Delete
$license_owners = array();
[26254] Fix | Delete
[26255] Fix | Delete
if ( $this->is_api_result_object( $response, 'owners' ) ) {
[26256] Fix | Delete
$license_owners = $response->owners;
[26257] Fix | Delete
}
[26258] Fix | Delete
[26259] Fix | Delete
return $license_owners;
[26260] Fix | Delete
}
[26261] Fix | Delete
[26262] Fix | Delete
/**
[26263] Fix | Delete
* @author Leo Fajardo (@leorw)
[26264] Fix | Delete
* @since 2.1.0
[26265] Fix | Delete
*/
[26266] Fix | Delete
private function add_gdpr_optin_ajax_handler_and_style() {
[26267] Fix | Delete
// Add GDPR action AJAX callback.
[26268] Fix | Delete
$this->add_ajax_action( 'gdpr_optin_action', array( &$this, '_gdpr_optin_ajax_action' ) );
[26269] Fix | Delete
[26270] Fix | Delete
add_action( 'admin_footer', array( &$this, '_add_gdpr_optin_js' ) );
[26271] Fix | Delete
add_action( 'admin_enqueue_scripts', array( &$this, 'enqueue_gdpr_optin_notice_style' ) );
[26272] Fix | Delete
}
[26273] Fix | Delete
[26274] Fix | Delete
/**
[26275] Fix | Delete
* @author Leo Fajardo (@leorw)
[26276] Fix | Delete
* @since 2.1.0
[26277] Fix | Delete
*/
[26278] Fix | Delete
function _gdpr_optin_ajax_action() {
[26279] Fix | Delete
$this->_logger->entrance();
[26280] Fix | Delete
[26281] Fix | Delete
$this->check_ajax_referer( 'gdpr_optin_action' );
[26282] Fix | Delete
[26283] Fix | Delete
if ( ! fs_request_has( 'is_marketing_allowed' ) || ! fs_request_has( 'plugin_ids' ) ) {
[26284] Fix | Delete
self::shoot_ajax_failure();
[26285] Fix | Delete
}
[26286] Fix | Delete
[26287] Fix | Delete
$current_wp_user = self::_get_current_wp_user();
[26288] Fix | Delete
[26289] Fix | Delete
$plugin_ids = fs_request_get( 'plugin_ids', array() );
[26290] Fix | Delete
if ( ! is_array( $plugin_ids ) || empty( $plugin_ids ) ) {
[26291] Fix | Delete
self::shoot_ajax_failure();
[26292] Fix | Delete
}
[26293] Fix | Delete
[26294] Fix | Delete
$modules = array_merge(
[26295] Fix | Delete
array_values( self::maybe_get_entities_account_option( 'plugins', array() ) ),
[26296] Fix | Delete
array_values( self::maybe_get_entities_account_option( 'themes', array() ) )
[26297] Fix | Delete
);
[26298] Fix | Delete
[26299] Fix | Delete
foreach ( $modules as $key => $module ) {
[26300] Fix | Delete
if ( ! in_array( $module->id, $plugin_ids ) ) {
[26301] Fix | Delete
unset( $modules[ $key ] );
[26302] Fix | Delete
}
[26303] Fix | Delete
}
[26304] Fix | Delete
[26305] Fix | Delete
if ( empty( $modules ) ) {
[26306] Fix | Delete
self::shoot_ajax_failure();
[26307] Fix | Delete
}
[26308] Fix | Delete
[26309] Fix | Delete
$user_api = $this->get_api_user_scope_by_user( Freemius::_get_user_by_email( $current_wp_user->user_email ) );
[26310] Fix | Delete
[26311] Fix | Delete
foreach ( $modules as $module ) {
[26312] Fix | Delete
$user_api->call( "?plugin_id={$module->id}", 'put', array(
[26313] Fix | Delete
'is_marketing_allowed' => ( true == fs_request_get_bool( 'is_marketing_allowed' ) )
[26314] Fix | Delete
) );
[26315] Fix | Delete
}
[26316] Fix | Delete
[26317] Fix | Delete
FS_GDPR_Manager::instance()->remove_opt_in_notice();
[26318] Fix | Delete
[26319] Fix | Delete
require_once WP_FS__DIR_INCLUDES . '/class-fs-user-lock.php';
[26320] Fix | Delete
[26321] Fix | Delete
// 10-year lock.
[26322] Fix | Delete
FS_User_Lock::instance()->lock( 10 * 365 * WP_FS__TIME_24_HOURS_IN_SEC );
[26323] Fix | Delete
[26324] Fix | Delete
self::shoot_ajax_success();
[26325] Fix | Delete
}
[26326] Fix | Delete
[26327] Fix | Delete
/**
[26328] Fix | Delete
* Checks if the GDPR admin notice should be handled. By default, this logic is off, unless the integrator adds the special 'handle_gdpr_admin_notice' filter.
[26329] Fix | Delete
*
[26330] Fix | Delete
* @author Vova Feldman (@svovaf)
[26331] Fix | Delete
* @since 2.1.0
[26332] Fix | Delete
*
[26333] Fix | Delete
* @return bool
[26334] Fix | Delete
*/
[26335] Fix | Delete
private function should_handle_gdpr_admin_notice() {
[26336] Fix | Delete
return $this->apply_filters(
[26337] Fix | Delete
'handle_gdpr_admin_notice',
[26338] Fix | Delete
// Default to false.
[26339] Fix | Delete
false
[26340] Fix | Delete
);
[26341] Fix | Delete
}
[26342] Fix | Delete
[26343] Fix | Delete
#endregion
[26344] Fix | Delete
[26345] Fix | Delete
#----------------------------------------------------------------------------------
[26346] Fix | Delete
#region Marketing
[26347] Fix | Delete
#----------------------------------------------------------------------------------
[26348] Fix | Delete
[26349] Fix | Delete
/**
[26350] Fix | Delete
* Check if current user purchased any other plugins before.
[26351] Fix | Delete
*
[26352] Fix | Delete
* @author Vova Feldman (@svovaf)
[26353] Fix | Delete
* @since 1.0.9
[26354] Fix | Delete
*
[26355] Fix | Delete
* @return bool
[26356] Fix | Delete
*/
[26357] Fix | Delete
function has_purchased_before() {
[26358] Fix | Delete
// TODO: Implement has_purchased_before() method.
[26359] Fix | Delete
throw new Exception( 'not implemented' );
[26360] Fix | Delete
}
[26361] Fix | Delete
[26362] Fix | Delete
/**
[26363] Fix | Delete
* Check if current user classified as an agency.
[26364] Fix | Delete
*
[26365] Fix | Delete
* @author Vova Feldman (@svovaf)
[26366] Fix | Delete
* @since 1.0.9
[26367] Fix | Delete
*
[26368] Fix | Delete
* @return bool
[26369] Fix | Delete
*/
[26370] Fix | Delete
function is_agency() {
[26371] Fix | Delete
// TODO: Implement is_agency() method.
[26372] Fix | Delete
throw new Exception( 'not implemented' );
[26373] Fix | Delete
}
[26374] Fix | Delete
[26375] Fix | Delete
/**
[26376] Fix | Delete
* Check if current user classified as a developer.
[26377] Fix | Delete
*
[26378] Fix | Delete
* @author Vova Feldman (@svovaf)
[26379] Fix | Delete
* @since 1.0.9
[26380] Fix | Delete
*
[26381] Fix | Delete
* @return bool
[26382] Fix | Delete
*/
[26383] Fix | Delete
function is_developer() {
[26384] Fix | Delete
// TODO: Implement is_developer() method.
[26385] Fix | Delete
throw new Exception( 'not implemented' );
[26386] Fix | Delete
}
[26387] Fix | Delete
[26388] Fix | Delete
/**
[26389] Fix | Delete
* Check if current user classified as a business.
[26390] Fix | Delete
*
[26391] Fix | Delete
* @author Vova Feldman (@svovaf)
[26392] Fix | Delete
* @since 1.0.9
[26393] Fix | Delete
*
[26394] Fix | Delete
* @return bool
[26395] Fix | Delete
*/
[26396] Fix | Delete
function is_business() {
[26397] Fix | Delete
// TODO: Implement is_business() method.
[26398] Fix | Delete
throw new Exception( 'not implemented' );
[26399] Fix | Delete
}
[26400] Fix | Delete
[26401] Fix | Delete
#endregion
[26402] Fix | Delete
[26403] Fix | Delete
#----------------------------------------------------------------------------------
[26404] Fix | Delete
#region Helper
[26405] Fix | Delete
#----------------------------------------------------------------------------------
[26406] Fix | Delete
[26407] Fix | Delete
/**
[26408] Fix | Delete
* If running with a secret key, assume it's the developer and show pending plans as well.
[26409] Fix | Delete
*
[26410] Fix | Delete
* @author Vova Feldman (@svovaf)
[26411] Fix | Delete
* @since 2.1.2
[26412] Fix | Delete
*
[26413] Fix | Delete
* @param string $path
[26414] Fix | Delete
*
[26415] Fix | Delete
* @return string
[26416] Fix | Delete
*/
[26417] Fix | Delete
function add_show_pending( $path ) {
[26418] Fix | Delete
if ( ! $this->has_secret_key() ) {
[26419] Fix | Delete
return $path;
[26420] Fix | Delete
}
[26421] Fix | Delete
[26422] Fix | Delete
return $path . ( false !== strpos( $path, '?' ) ? '&' : '?' ) . 'show_pending=true';
[26423] Fix | Delete
}
[26424] Fix | Delete
[26425] Fix | Delete
#endregion
[26426] Fix | Delete
}
[26427] Fix | Delete
[26428] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function