response[ $plugin ] = (object) $_plugin;
}
}
return $transient;
}
/**
* Inject API data for premium plugins.
*
* @since 1.0.0
*
* @param bool $response Always false.
* @param string $action The API action being performed.
* @param object $args Plugin arguments.
* @return bool|object $response The plugin info or false.
*/
public function plugins_api( $response, $action, $args ) {
self::set_plugins( true );
// Process premium theme updates.
if ( 'plugin_information' === $action && isset( $args->slug ) ) {
$installed = array_merge( self::$plugins['active'], self::$plugins['installed'] );
foreach ( $installed as $slug => $plugin ) {
if ( dirname( $slug ) === $args->slug ) {
$response = new stdClass();
$response->slug = $args->slug;
$response->plugin = $slug;
$response->plugin_name = $plugin['name'];
$response->name = $plugin['name'];
$response->version = $plugin['version'];
$response->author = $plugin['author'];
$response->homepage = $plugin['url'];
$response->requires = $plugin['requires'];
$response->tested = $plugin['tested'];
$response->downloaded = $plugin['number_of_sales'];
$response->last_updated = $plugin['updated_at'];
$response->sections = array( 'description' => $plugin['description'] );
$response->banners['low'] = $plugin['landscape_url'];
$response->rating = ! empty( $plugin['rating'] ) && ! empty( $plugin['rating']['rating'] ) && $plugin['rating']['rating'] > 0 ? $plugin['rating']['rating'] / 5 * 100 : 0;
$response->num_ratings = ! empty( $plugin['rating'] ) && ! empty( $plugin['rating']['count'] ) ? $plugin['rating']['count'] : 0;
$response->download_link = envato_market()->api()->deferred_download( $plugin['id'] );
break;
}
}
}
return $response;
}
/**
* Set the list of themes
*
* @since 1.0.0
*
* @param bool $forced Forces an API request. Default is 'false'.
* @param bool $use_cache Attempts to rebuild from the cache before making an API request.
*/
public function set_themes( $forced = false, $use_cache = false ) {
$themes_transient = get_site_transient( envato_market()->get_option_name() . '_themes' );
self::$themes = is_array($themes_transient) ? $themes_transient : array();
if ( empty(self::$themes) || true === $forced ) {
$themes = envato_market()->api()->themes();
foreach ( envato_market()->get_option( 'items', array() ) as $item ) {
if ( empty( $item ) ) {
continue;
}
if ( 'theme' === $item['type'] ) {
$request_args = array(
'headers' => array(
'Authorization' => 'Bearer ' . $item['token'],
),
);
$request = envato_market()->api()->item( $item['id'], $request_args );
if ( false !== $request ) {
$themes[] = $request;
}
}
}
self::process_themes( $themes );
} elseif ( true === $use_cache ) {
self::process_themes( self::$themes['purchased'] );
}
}
/**
* Set the list of plugins
*
* @since 1.0.0
*
* @param bool $forced Forces an API request. Default is 'false'.
* @param bool $use_cache Attempts to rebuild from the cache before making an API request.
* @param array $args Used to remove or add a plugin during activate and deactivate routines.
*/
public function set_plugins( $forced = false, $use_cache = false, $args = array() ) {
$plugins_transient = get_site_transient( envato_market()->get_option_name() . '_plugins' );
self::$plugins = is_array($plugins_transient) ? $plugins_transient : array();
if ( empty(self::$plugins) || true === $forced ) {
$plugins = envato_market()->api()->plugins();
foreach ( envato_market()->get_option( 'items', array() ) as $item ) {
if ( empty( $item ) ) {
continue;
}
if ( 'plugin' === $item['type'] ) {
$request_args = array(
'headers' => array(
'Authorization' => 'Bearer ' . $item['token'],
),
);
$request = envato_market()->api()->item( $item['id'], $request_args );
if ( false !== $request ) {
$plugins[] = $request;
}
}
}
self::process_plugins( $plugins, $args );
} elseif ( true === $use_cache ) {
self::process_plugins( self::$plugins['purchased'], $args );
}
}
/**
* Rebuild the themes array using the cache value if possible.
*
* @since 1.0.0
*
* @param mixed $filter Any data being filtered.
* @return mixed
*/
public function rebuild_themes( $filter ) {
self::set_themes( false, true );
return $filter;
}
/**
* Rebuild the plugins array using the cache value if possible.
*
* @since 1.0.0
*
* @param string $plugin The plugin to add or remove.
*/
public function rebuild_plugins( $plugin ) {
$remove = ( 'deactivated_plugin' === current_filter() ) ? true : false;
self::set_plugins(
false,
true,
array(
'plugin' => $plugin,
'remove' => $remove,
)
);
}
/**
* Normalizes a string to do a value check against.
*
* Strip all HTML tags including script and style & then decode the
* HTML entities so `&` will equal `&` in the value check and
* finally lower case the entire string. This is required becuase some
* themes & plugins add a link to the Author field or ambersands to the
* names, or change the case of their files or names, which will not match
* the saved value in the database causing a false negative.
*
* @since 1.0.0
*
* @param string $string The string to normalize.
* @return string
*/
public function normalize( $string ) {
return strtolower( html_entity_decode( wp_strip_all_tags( $string ) ) );
}
/**
* Process the themes and save the transient.
*
* @since 1.0.0
*
* @param array $purchased The purchased themes array.
*/
private function process_themes( $purchased ) {
if ( is_wp_error( $purchased ) ) {
$purchased = array();
}
$current = wp_get_theme()->get_template();
$active = array();
$installed = array();
$install = $purchased;
if ( ! empty( $purchased ) ) {
foreach ( wp_get_themes() as $theme ) {
/**
* WP_Theme object.
*
* @var WP_Theme $theme
*/
$template = $theme->get_template();
$title = $theme->get( 'Name' );
$author = $theme->get( 'Author' );
foreach ( $install as $key => $value ) {
if ( $this->normalize( $value['name'] ) === $this->normalize( $title ) && $this->normalize( $value['author'] ) === $this->normalize( $author ) ) {
$installed[ $template ] = $value;
unset( $install[ $key ] );
}
}
}
}
if ( isset( $installed[ $current ] ) ) {
$active[ $current ] = $installed[ $current ];
unset( $installed[ $current ] );
}
self::$themes['purchased'] = array_unique( $purchased, SORT_REGULAR );
self::$themes['active'] = array_unique( $active, SORT_REGULAR );
self::$themes['installed'] = array_unique( $installed, SORT_REGULAR );
self::$themes['install'] = array_unique( array_values( $install ), SORT_REGULAR );
set_site_transient( envato_market()->get_option_name() . '_themes', self::$themes, HOUR_IN_SECONDS );
}
/**
* Process the plugins and save the transient.
*
* @since 1.0.0
*
* @param array $purchased The purchased plugins array.
* @param array $args Used to remove or add a plugin during activate and deactivate routines.
*/
private function process_plugins( $purchased, $args = array() ) {
if ( is_wp_error( $purchased ) ) {
$purchased = array();
}
$active = array();
$installed = array();
$install = $purchased;
if ( ! empty( $purchased ) ) {
foreach ( self::wp_plugins( true ) as $slug => $plugin ) {
foreach ( $install as $key => $value ) {
if ( $this->normalize( $value['name'] ) === $this->normalize( $plugin['Name'] ) && $this->normalize( $value['author'] ) === $this->normalize( $plugin['Author'] ) && file_exists( WP_PLUGIN_DIR . '/' . $slug ) ) {
$installed[ $slug ] = $value;
unset( $install[ $key ] );
}
}
}
}
foreach ( $installed as $slug => $plugin ) {
$condition = false;
if ( ! empty( $args ) && $slug === $args['plugin'] ) {
if ( true === $args['remove'] ) {
continue;
}
$condition = true;
}
if ( $condition || is_plugin_active( $slug ) ) {
$active[ $slug ] = $plugin;
unset( $installed[ $slug ] );
}
}
self::$plugins['purchased'] = array_unique( $purchased, SORT_REGULAR );
self::$plugins['active'] = array_unique( $active, SORT_REGULAR );
self::$plugins['installed'] = array_unique( $installed, SORT_REGULAR );
self::$plugins['install'] = array_unique( array_values( $install ), SORT_REGULAR );
set_site_transient( envato_market()->get_option_name() . '_plugins', self::$plugins, HOUR_IN_SECONDS );
}
}
endif;
Fatal error: Uncaught Error: Class 'Envato_Market_Items' not found in /var/www/html/helitower.com.br/web/wp-content/plugins/envato-market/inc/class-envato-market.php:486
Stack trace:
#0 /var/www/html/helitower.com.br/web/wp-includes/class-wp-hook.php(324): Envato_Market->items('')
#1 /var/www/html/helitower.com.br/web/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(Object(Envato_Market_Admin), Array)
#2 /var/www/html/helitower.com.br/web/wp-includes/plugin.php(517): WP_Hook->do_action(Array)
#3 /var/www/html/helitower.com.br/web/wp-settings.php(695): do_action('init')
#4 /var/www/html/helitower.com.br/web/wp-config.php(99): require_once('/var/www/html/h...')
#5 /var/www/html/helitower.com.br/web/wp-load.php(50): require_once('/var/www/html/h...')
#6 /var/www/html/helitower.com.br/web/wp-blog-header.php(13): require_once('/var/www/html/h...')
#7 /var/www/html/helitower.com.br/web/index.php(18): require('/var/www/html/h...')
#8 {main}
thrown in /var/www/html/helitower.com.br/web/wp-content/plugins/envato-market/inc/class-envato-market.php on line 486