File: /medikors/www/wp-content/plugins/userfeedback-lite/includes/admin/addons.php
<?php
/**
* Addons class.
*
* @since 1.0.0
*
* @package UserFeedback
*/
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Retrieves addons from the stored transient or remote server.
*
* @since 1.0.0
*
* @return bool | array false | Array of licensed and unlicensed Addons.
*/
function userfeedback_get_addons() {
// Get license key and type.
$key = '';
$type = 'lite';
if ( userfeedback_is_pro_version() ) {
$key = is_network_admin() ? UserFeedback()->license->get_network_license_key() : UserFeedback()->license->get_site_license_key();
$type = is_network_admin() ? UserFeedback()->license->get_network_license_type() : UserFeedback()->license->get_site_license_type();
}
// Get addons data from transient or perform API query if no transient.
if ( false === ( $addons = get_transient( '_userfeedback_addons' ) ) ) {
$addons = userfeedback_get_addons_data( $key );
}
// If no Addons exist, return false
if ( ! $addons ) {
return false;
}
// Iterate through Addons, to build two arrays:
// - Addons the user is licensed to use,
// - Addons the user isn't licensed to use.
$results = array(
'licensed' => array(),
'unlicensed' => array(),
);
foreach ( (array) $addons as $i => $addon ) {
// Determine whether the user is licensed to use this Addon or not.
if ( empty( $type ) ) {
$results['unlicensed'][] = $addon;
} elseif (
( in_array( 'Plus', $addon->categories ) || in_array( 'Pro', $addon->categories ) ) &&
( $type == 'pro' || $type == 'elite' )
) {
$results['licensed'][] = $addon;
} elseif ( in_array( 'Plus', $addon->categories ) && $type == 'plus' ) {
$results['licensed'][] = $addon;
} else {
$results['unlicensed'][] = $addon;
}
}
// Return Addons, split by licensed and unlicensed.
return $results;
}
/**
* Pings the remote server for addons data.
*
* @since 1.0.0
*
* @param string $key The user license key.
* @return array|boolean Array of addon data otherwise or false if error
*/
function userfeedback_get_addons_data( $key ) {
// Get Addons
// If the key is valid, we'll get personalised upgrade URLs for each Addon (if necessary) and plugin update information.
if ( userfeedback_is_pro_version() && $key ) {
$addons = UserFeedback()->license_actions->perform_remote_request( 'get-addons-data', array( 'tgm-updater-key' => $key ) );
} else {
$addons = userfeedback_get_all_addons_data();
}
// If there was an API error, set transient for only 10 minutes.
if ( ! $addons ) {
set_transient( '_userfeedback_addons', false, 10 * MINUTE_IN_SECONDS );
return false;
}
// If there was an error retrieving the addons, set the error.
if ( isset( $addons->error ) ) {
set_transient( '_userfeedback_addons', false, 10 * MINUTE_IN_SECONDS );
return false;
}
// Otherwise, our request worked. Save the data and return it.
set_transient( '_userfeedback_addons', $addons, 4 * HOUR_IN_SECONDS );
return $addons;
}
/**
* Get all addons without a license, for lite users.
*
* @return array|bool|mixed|object
*/
function userfeedback_get_all_addons_data() {
// Build the body of the request.
$body = array(
'tgm-updater-action' => 'get-all-addons-data',
'tgm-updater-key' => '',
'tgm-updater-wp-version' => get_bloginfo( 'version' ),
'tgm-updater-referer' => site_url(),
'tgm-updater-mi-version' => USERFEEDBACK_VERSION,
'tgm-updater-is-pro' => false,
);
$body = http_build_query( $body, '', '&' );
// Build the headers of the request.
$headers = array(
'Content-Type' => 'application/x-www-form-urlencoded',
'Content-Length' => strlen( $body ),
);
// Setup variable for wp_remote_post.
$post = array(
'headers' => $headers,
'body' => $body,
);
// Perform the query and retrieve the response.
$response = wp_remote_post( userfeedback_get_licensing_url(), $post );
$response_code = wp_remote_retrieve_response_code( $response );
$response_body = wp_remote_retrieve_body( $response );
// Bail out early if there are any errors.
if ( 200 !== $response_code || is_wp_error( $response_body ) ) {
return false;
}
// Return the json decoded content.
return json_decode( $response_body );
}
/**
* Retrieve the plugin basename from the plugin slug.
*
* @since 1.0.0
*
* @param string $slug The plugin slug.
* @return string The plugin basename if found, else the plugin slug.
*/
function userfeedback_get_plugin_basename_from_slug( $slug ) {
$keys = array_keys( get_plugins() );
foreach ( $keys as $key ) {
if ( preg_match( '|^' . $slug . '|', $key ) ) {
return $key;
}
}
return $slug;
}
/**
* Deactivates a UserFeedback addon.
*
* @access public
* @since 1.0.0
*/
function userfeedback_ajax_deactivate_addon() {
// Run a security check first.
check_ajax_referer( 'userfeedback-deactivate', 'nonce' );
if ( ! current_user_can( 'deactivate_plugins' ) ) {
wp_send_json(
array(
'error' => esc_html__( 'You are not allowed to deactivate plugins', 'userfeedback' ),
)
);
}
// Deactivate the addon.
$post_data = sanitize_post( $_POST, 'raw' );
if ( isset( $post_data['plugin'] ) ) {
if ( isset( $post_data['isnetwork'] ) && $post_data['isnetwork'] ) {
deactivate_plugins( $post_data['plugin'], false, true );
} else {
deactivate_plugins( $post_data['plugin'] );
}
}
wp_send_json_success();
wp_die();
}
add_action( 'wp_ajax_userfeedback_deactivate_addon', 'userfeedback_ajax_deactivate_addon' );
/**
* Installs a UserFeedback addon.
*
* @access public
* @since 1.0.0
*/
function userfeedback_ajax_install_addon() {
// Run a security check first.
check_ajax_referer( 'userfeedback-install', 'nonce' );
if ( ! userfeedback_can_install_plugins() ) {
wp_send_json(
array(
'error' => esc_html__( 'You are not allowed to install plugins', 'userfeedback' ),
)
);
}
// Install the addon.
$post_data = sanitize_post( $_POST, 'raw' );
if ( isset( $post_data['plugin'] ) ) {
$download_url = esc_url_raw(
filter_input( INPUT_POST, 'plugin', FILTER_SANITIZE_URL )
);
global $hook_suffix;
// Set the current screen to avoid undefined notices.
set_current_screen();
// Prepare variables.
$method = '';
$url = add_query_arg(
array(
'page' => 'userfeedback-settings',
),
admin_url( 'admin.php' )
);
$url = esc_url( $url );
// Start output bufferring to catch the filesystem form if credentials are needed.
ob_start();
if ( false === ( $creds = request_filesystem_credentials( $url, $method, false, false, null ) ) ) {
$form = ob_get_clean();
echo json_encode( array( 'form' => $form ) );
wp_die();
}
// If we are not authenticated, make it happen now.
if ( ! WP_Filesystem( $creds ) ) {
ob_start();
request_filesystem_credentials( $url, $method, true, false, null );
$form = ob_get_clean();
echo json_encode( array( 'form' => $form ) );
wp_die();
}
// We do not need any extra credentials if we have gotten this far, so let's install the plugin.
userfeedback_require_upgrader( false );
// Create the plugin upgrader with our custom skin.
$installer = new Plugin_Upgrader( $skin = new UserFeedback_Skin() );
$installer->install( $download_url );
// Flush the cache and return the newly installed plugin basename.
wp_cache_flush();
if ( $installer->plugin_info() ) {
$plugin_basename = $installer->plugin_info();
wp_send_json_success( array( 'plugin' => $plugin_basename ) );
wp_die();
}
}
// Send back a response.
wp_send_json_success();
wp_die();
}
add_action( 'wp_ajax_userfeedback_install_addon', 'userfeedback_ajax_install_addon' );
/**
* Activates a UserFeedback addon.
*
* @access public
* @since 1.0.0
*/
function userfeedback_ajax_activate_addon() {
// Run a security check first.
check_ajax_referer( 'userfeedback-activate', 'nonce' );
if ( ! current_user_can( 'activate_plugins' ) ) {
wp_send_json(
array(
'error' => esc_html__( 'You are not allowed to activate plugins', 'userfeedback' ),
)
);
}
// Activate the addon.
$post_data = sanitize_post( $_POST, 'raw' );
if ( isset( $post_data['plugin'] ) ) {
if ( isset( $post_data['isnetwork'] ) && $post_data['isnetwork'] ) {
$activate = activate_plugin( $post_data['plugin'], null, true );
} else {
$activate = activate_plugin( $post_data['plugin'] );
}
// Disable MonsterInsights redirect
if(strstr($post_data['plugin'], 'google-analytics-for-wordpress')){
delete_transient( '_monsterinsights_activation_redirect' );
}
// Disable Exactmetrics redirect
if(strstr($post_data['plugin'], 'google-analytics-dashboard-for-wp')){
delete_transient( '_exactmetrics_activation_redirect' );
}
// Disable WP Mail SMTP redirect
if(strstr($post_data['plugin'], 'wp-mail-smtp')){
delete_transient( 'wp_mail_smtp_activation_redirect' );
}
// Disable Rafflepress redirect
if(strstr($post_data['plugin'], 'rafflepress')){
delete_transient( '_rafflepress_welcome_screen_activation_redirect' );
}
// Disable seedprod redirect
if(strstr($post_data['plugin'], 'seedprod')){
delete_transient( '_seedprod_welcome_screen_activation_redirect' );
}
// Disable instagram-feed redirect
if(strstr($post_data['plugin'], 'instagram-feed')){
delete_option( 'sbi_plugin_do_activation_redirect' );
}
// Disable facebook-feed redirect
if(strstr($post_data['plugin'], 'facebook-feed')){
delete_option( 'cff_plugin_do_activation_redirect' );
}
// Disable trustpulse redirect
if(strstr($post_data['plugin'], 'trustpulse')){
delete_option( 'trustpulse_api_plugin_do_activation_redirect' );
}
// Disable searchwp-live-ajax-search redirect
if(strstr($post_data['plugin'], 'searchwp-live-ajax-search')){
delete_transient( 'searchwp_live_search_activation_redirect' );
}
// Disable stripe redirect
if(strstr($post_data['plugin'], 'stripe')){
update_option( 'simpay_customer_journey_start', strtotime('-1 hour') );
delete_transient( 'simpay_activation_redirect' );
}
// Disable charitable redirect
if(strstr($post_data['plugin'], 'charitable')){
delete_transient( 'charitable_install' );
}
// Disable duplicator redirect
if(strstr($post_data['plugin'], 'duplicator')){
update_option( 'duplicator_redirect_to_welcome', false );
}
// Disable pushengage redirect
if(strstr($post_data['plugin'], 'pushengage')){
delete_transient( 'pushengage_activation_redirect' );
}
if ( is_wp_error( $activate ) ) {
echo json_encode( array( 'error' => $activate->get_error_message() ) );
wp_die();
}
}
wp_send_json_success();
wp_die();
}
add_action( 'wp_ajax_userfeedback_activate_addon', 'userfeedback_ajax_activate_addon' );
/**
* Return the state of the addons ( installed, activated )
*/
function userfeedback_ajax_get_addons() {
check_ajax_referer( 'uf-admin-nonce', 'nonce' );
if ( ! current_user_can( 'userfeedback_save_settings' ) ) {
return;
}
$post_data = sanitize_post( $_POST, 'raw' );
if ( isset( $post_data['network'] ) && intval( $post_data['network'] ) > 0 ) {
define( 'WP_NETWORK_ADMIN', true );
}
$parsed_addons = userfeedback_get_parsed_addons();
wp_send_json( $parsed_addons );
exit;
}
add_action( 'wp_ajax_userfeedback_get_addons', 'userfeedback_ajax_get_addons' );
function userfeedback_get_parsed_addons() {
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$addons_data = userfeedback_get_addons();
$parsed_addons = array();
$installed_plugins = get_plugins();
if ( ! is_array( $addons_data ) ) {
$addons_data = array();
}
$license = get_option( 'userfeedback_license', true );
foreach ( $addons_data as $addons_type => $addons ) {
foreach ( $addons as $addon ) {
$slug = 'userfeedback-' . $addon->slug;
$addon = userfeedback_parse_addon( $installed_plugins, $addons_type, $addon, $slug, $license );
$parsed_addons[ $addon->slug ] = $addon;
}
}
$parsed_addons = apply_filters( 'userfeedback_parsed_addons', $parsed_addons );
/* Update parsed addons data to use in the scripts localization. */
update_option( 'userfeedback_parsed_addons', $parsed_addons );
return $parsed_addons;
}
function userfeedback_parse_addon( $installed_plugins, $addons_type, $addon, $slug, $license ) {
$active = false;
$installed = false;
$plugin_basename = userfeedback_get_plugin_basename_from_slug( $slug );
if ( isset( $installed_plugins[ $plugin_basename ] ) ) {
$installed = true;
if ( is_multisite() && is_network_admin() ) {
$active = is_plugin_active_for_network( $plugin_basename );
} else {
$active = is_plugin_active( $plugin_basename );
}
}
if ( empty( $addon->url ) ) {
$addon->url = '';
}
$active_version = false;
if ( $active ) {
if ( ! empty( $installed_plugins[ $plugin_basename ]['Version'] ) ) {
$active_version = $installed_plugins[ $plugin_basename ]['Version'];
}
}
if ( isset( $license['type'] ) && in_array( ucwords( $license['type'] ), $addon->categories ) ) {
$addons_type = 'licensed';
}
$addon->type = $addons_type;
$addon->installed = $installed;
$addon->active_version = $active_version;
$addon->active = $active;
$addon->basename = $plugin_basename;
return $addon;
}